requests库爬虫,用requests获取网页源代码 python
大家好,本文主要讲的是Python实现带有请求模块的动态网络爬虫。有兴趣的同学过来看看,如果对你有帮助记得收藏。
00-1010构建开发工具环境的前言摘要
目录
Python爬虫实战,请求模块,动态网络爬虫的Python实现
开心的开始吧~
前言
Python版本:
相关模块:
Urllib模块;
随机模块;
请求模块;
追溯模块;
以及Python自带的一些模块。
开发工具
安装Python并将其添加到环境变量中。pip可以安装所需的相关模块。
下面开始爬虫的正确姿势。首先,通过分析接口来写爬虫。
首先,找到真正的要求。右键单击,单击网络,选择XHR,刷新网页,并在名称列表中选择jsp文件。是的,就这么简单。真正的要求就藏在里面。
让我们仔细看看这个jsp。这是个宝藏。有真实的请求url、请求方法post、头和表单数据,而From数据表示传递给url的参数。通过改变参数,我们可以得到数据!为了安全起见,我给我的饼干做了个马赛克。
我们尝试点击翻页,发现只有pagesnum参数会改变。
1从urllib.parse导入urlencode
2导入csv
3随机导入
4项进口申请
5导入追溯
6从时间导入睡眠
7从lxml导入etree #lxml是第三方网页分析库,功能强大,速度快。
1 base _ URL= http://www . hshfy . sh.cn/shfy/gweb 2017/ktgg _ search _ content . JSP?#在这里,切换到相应Ajax请求中的链接。
2
3个标题={
4 连接 : 保持活动,
5 接受 : */* ,
6 X-Requested-With : XMLHttpRequest ,
7 用户代理 3360 您用户代理,
8 产地 : http://www.hshfy.sh.cn ,
9 Referer : http://www . hshfy . sh.cn/shfy/gweb 2017/ktgg _ search . JSP?zd=splc ,
10 接受-语言 : zh-CN,zh;q=0.9 ,
11 内容类型 : 应用程序/x-www-form-urlencoded ,
12 饼干 : 你饼干
13 }
构建get_page函数,自变量为page,即页数。以字典类型创建表单数据,并以post模式请求网页数据。这里注意解码返回的数据,编码为‘gbk’,否则返回的数据会乱码!
1def get_page(第:页)
2 n=3
3 while True:
4 try:
5 sleep(random.uniform(1,2))# 1到2之间的随机数,包括小数。
6数据={
7 yzm: yxAH :
8英尺 :英尺,
9 ktrqks: 2020-05-22 ,
10 ktrqjs: 2020-06-22 ,
11 spc: ,
12 yg: ,
13 bg: ,
14 ah:,
15 pagesnum: page
16 }
17 url = base_url + urlencode(data)
18 print(url)
19 try:
20 response = requests.request("POST",url, headers = headers)
21 #print(response)
22 if response.status_code == 200:
23 re = response.content.decode(gbk)
24 # print(re)
25 return re # 解析内容
26 except requests.ConnectionError as e:
27 print(Error, e.args) # 输出异常信息
28 except (TimeoutError, Exception):
29 n -= 1
30 if n == 0:
31 print(请求3次均失败,放弃此url请求,检查请求条件)
32 return
33 else:
34 print(请求失败,重新请求)
35 continue
构建parse_page函数,对返回的网页数据进行解析,用Xpath提取所有字段内容,保存为csv格式。
1def parse_page(html):2 try:
3 parse = etree.HTML(html) # 解析网页
4 items = parse.xpath(//*[@id="report"]/tbody/tr)
5 for item in items[1:]:
6 item = {
7 a: .join(item.xpath(./td[1]/font/text())).strip(),
8 b: .join(item.xpath(./td[2]/font/text())).strip(),
9 c: .join(item.xpath(./td[3]/text())).strip(),
10 d: .join(item.xpath(./td[4]/text())).strip(),
11 e: .join(item.xpath(./td[5]/text())).strip(),
12 f: .join(item.xpath(./td[6]/div/text())).strip(),
13 g: .join(item.xpath(./td[7]/div/text())).strip(),
14 h: .join(item.xpath(./td[8]/text())).strip(),
15 i: .join(item.xpath(./td[9]/text())).strip()
16 }
17 #print(item)
18 try:
19 with open(./law.csv, a, encoding=utf_8_sig, newline=) as fp:
20 # a为追加模式(添加)
21 # utf_8_sig格式导出csv不乱码
22 fieldnames = [a, b, c, d, e,f,g,h,i]
23 writer = csv.DictWriter(fp,fieldnames)
24 writer.writerow(item)
25 except Exception:
26 print(traceback.print_exc()) #代替print e 来输出详细的异常信息
27 except Exception:
28 print(traceback.print_exc())
遍历一下页数,调用一下函数
1 for page in range(1,5): #这里设置想要爬取的页数2 html = get_page(page)
3 #print(html)
4 print("第" + str(page) + "页提取完成")
效果:
总结
到此这篇关于Python用requests模块实现动态网页爬虫的文章就介绍到这了,更多相关Python requests内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。