urllib网页数据抓取:get请求抓取小说数据

分享
藏宝库编辑 2024-9-28 00:17:09 95 0 来自 中国
【目标】本文使用urllib实验获取某本小说前100章的源码数据

语言:python

包:urllib

本文仅做学习交换使用!!!

练习网站:

星门网
分析网站的请求要求、请求的结构等


  • 谷歌欣赏器登录网站,进入开辟者模式(页面右键“查抄”);
  • 查找network下全部的请求信息,不难发现有个2072590.html的请求包含了小说正文的内容(Response信息);
  • 查询该记录的请求信息(Request Headers),可以或许获取:
    · 请求地点url(Request URL):
    · 请求方式:GET请求
    · 这是第一章的数据,按此方式查抄第二章、第三章的请求,分析url地点发现只有末了2072590这个数字差别,即第二章(2072590+1),第三章(2072590+2)...以此类推。因此,我们可以构建一个range(100)的For循环,就能天生100个与章节对应的url请求网址。
  • 接下来,查询该记录的请求头,看看要带哪些数据给请求网址才能获取到该信息。
    1.png
    必要带的数据似乎有点多。经测试发现我们只把末了一个UA数据带上就能获取到精确相应,大概这个网站没什么反Pa步调。。因此构建本次的headers只用传入UA信息
  • 分析工作完毕,接下来分几步敲码
    ·  使用for循环构建出差别的url请求地点;
    ·  使用urllib.request.Request()方法定制一个包含url和headers信息的请求对象;
    ·  对请求对象分别发送请求指令,获取response信息;
    ·  使用open()方法和编解码将每次相应返来的数据生存成新的html文件。
敲码时间

    import urllib.request    import urllib.parse        for data in range(100):        url = f'https://www.xingmen.cc/29/29928/{data+2072590}.html'        headers = {   # 通过刚才观察网页源码,发现request headers中的信息都是字典格式,因此要构建成字典        # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',        # 'Accept-Encoding': 'gzip, deflate, br',        # 'Accept-Language': 'zh-CN,zh;q=0.9',        # 'Cache-Control': 'max-age=0',        # 'Connection': 'keep-alive',        # 'Cookie': 'Hm_lvt_298d20c200aed9761d07ff247214636e=1673270466; Hm_lpvt_298d20c200aed9761d07ff247214636e=1673270466; bcolor=; font=; size=; fontcolor=; width=',        # 'Host': 'www.xingmen.cc',        # 'Referer': 'https://www.xingmen.cc/29/29928/',        # 'sec-ch-ua': '".Not/A)Brand";v="99", "Google Chrome";v="103", "Chromium";v="103"',        # 'sec-ch-ua-mobile': '?0',        # 'sec-ch-ua-platform': '"Windows"',        # 'Sec-Fetch-Dest': 'document',        # 'Sec-Fetch-Mode': 'navigate',        # 'Sec-Fetch-Site': 'same-origin',        # 'Sec-Fetch-User': '?1',        # 'Upgrade-Insecure-Requests': '1',        # 【经测试发现,注释掉这些参数也能得到精确的请求,只需将最关键的参数传给请求即可】        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',        }        request = urllib.request.Request(url=url, headers=headers)   # Request()方法定制请求对象,将url和headers打包进去        response = urllib.request.urlopen(request)   # 使用urlopen触发请求对象,该对象包含了请求地点url和请求头信息headers        content = response.read().decode('utf-8')    # read()获取相应效果,utf-8格式解码数据        with open(file=f'D:\PyCharm 2021.3.2\codefile\爬虫练习\第{data+1}章.html', mode='wt', encoding='utf-8')as f:            f.write(content)   # 使用wt写入模式创建新的html文件,将数据写入            print(f'已生存第 {data+1}章。')   # range(100)从零开始,因此章节名是 data+1效果如下


3.png 小结:

本次只获取了网页源码,还必要进一步提取数据的操纵。提取数据有多种方式诸如xpath、正则等,以后会再分享出来。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-22 09:13, Processed in 0.169453 second(s), 35 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表