大家好,本文主要讲的是Python实现带有请求模块的动态网络爬虫。有兴趣的同学过来看看,如果对你有帮助记得收藏。
目录
开发工具环境建设前言摘要
前言
Python爬虫实战,请求模块,动态网络爬虫的Python实现
开心的开始吧~
开发工具
Python版本:3.6.4
相关模块:
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“用户代理”:“您的用户代理”,
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虽然正确:
4尝试:
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“啊”:“,
15 'pagesnum ':第页
16 }
17 url=base_url urlencode(数据)
18打印(url)
19尝试:
20 response=requests . request(' POST ',url,headers=headers)
21 #打印(响应)
22如果响应.状态_代码==200:
23 re=response . content . decode(' gbk ')
24 #打印(重新)
2返回re #解析内容
26项请求除外。ConnectionError as e:
2Print ('error ',e.args) #输出异常信息
28 except (TimeoutError,Exception):
29 n -=1
30如果n==0:
3print('请求失败3次,放弃此url请求,检查请求条件')
32返回
33其他:
3打印(“请求失败,再次请求”)
35继续
构建parse_page函数,解析返回的网页数据,用Xpath提取所有字段内容,保存为csv格式。
1def parse_page(html):
2尝试:
3 parse=etree。HTML(html) #解析网页
4 items=parse . XPath('//*[@ id=' report ']/tbody/tr ')
5对于项目[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”:“”联接(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 '我:' ' join(item.xpath(' ./td[9]/text()').条状()
16 }
17 #打印(项目)
18尝试:
19开('。/law.csv ',' a ',编码='utf_8_sig ',newline=' ')作为fp:
20 # 'a '为追加模式(添加)
21 # utf_8_sig格式导出战斗支援车不乱码
22个字段名=['a ',' b ',' c ',' d ',' e ',' f ',' g ',' h ',' i']
23作家=csv .字典编写器(fp,字段名)
24 writer.writerow(项目)
25除了例外:
26打印(追溯。print _ exc())#代替打印e来输出详细的异常信息
27除了例外:
28 print(traceback.print_exc())
遍历一下页数,调用一下函数
对于范围(1,5)中的页面为1:#这里设置想要爬取的页数
2 html=get_page(页面)
3 #打印(html)
四打印('第'字符串(页面) '页提取完成)
效果:
总结
到此这篇关于计算机编程语言用要求模块实现动态网页爬虫的文章就介绍到这了,更多相关计算机编程语言请求内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。