Python怎么用requests模块实现动态网页爬虫
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!开发工具Python版本: 3.6.4相关模块:urllib模块
千家信息网最后更新 2025年01月21日Python怎么用requests模块实现动态网页爬虫
小编给大家分享一下Python怎么用requests模块实现动态网页爬虫,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
开发工具
Python版本: 3.6.4
相关模块:
urllib模块;
random模块;
requests模块;
traceback模块;
以及一些Python自带的模块。
环境搭建
安装Python并添加到环境变量,pip安装需要的相关模块即可。
那我们就开启爬虫的正确姿势吧,先用解析接口的方法来写爬虫。
首先,找到真实请求。右键检查,点击Network,选中XHR,刷新网页,选择Name列表中的jsp文件。没错,就这么简单,真实请求就藏在里面。
我们再仔细看看这个jsp,这简直是个宝啊。有真实请求url,有请求方法post,有Headers,还有Form Data,而From Data表示给url传递的参数,通过改变参数,咱们就可以获得数据!为了安全,给自个Cookie打了个马赛克
我们尝试点击翻页,发现只有pagesnum参数会变化。
1 from urllib.parse import urlencode2 import csv3 import random4 import requests5 import traceback6 from time import sleep7 from lxml import etree #lxml为第三方网页解析库,强大且速度快
1 base_url = 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search_content.jsp?' #这里要换成对应Ajax请求中的链接23 headers = {4 'Connection': 'keep-alive',5 'Accept': '*/*',6 'X-Requested-With': 'XMLHttpRequest',7 'User-Agent': '你的User-Agent',8 'Origin': 'http://www.hshfy.sh.cn',9 'Referer': 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search.jsp?zd=splc',10 'Accept-Language': 'zh-CN,zh;q=0.9',11 'Content-Type': 'application/x-www-form-urlencoded',12 'Cookie': '你的Cookie'13 }
构建get_page函数,自变量为page,也就是页数。以字典类型创建表单data,用post方式去请求网页数据。这里要注意要对返回的数据解码,编码为’gbk’,否则返回的数据会乱码!
1def get_page(page):2 n = 33 while True:4 try:5 sleep(random.uniform(1, 2)) # 随机出现1-2之间的数,包含小数6 data = {7 'yzm': 'yxAH',8 'ft':'',9 'ktrqks': '2020-05-22',10 'ktrqjs': '2020-06-22',11 'spc':'',12 'yg':'',13 'bg':'',14 'ah':'',15 'pagesnum': page16 }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 -= 130 if n == 0:31 print('请求3次均失败,放弃此url请求,检查请求条件')32 return33 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模块实现动态网页爬虫"有了一定的了解,如果想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!
模块
网页
数据
爬虫
函数
参数
页数
动态
乱码
信息
内容
方法
格式
环境
篇文章
检查
输出
强大
之间
也就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
招银网络技术达人
云服务器 smb
政法智能化网络安全体系不够健全
ui需要哪些软件开发
网络安全协调管理局
美国印度网络安全
求职软件开发工程师的简历
筑牢网络安全防线对照检查
服务器不稳定怎么才能弄好啊
多网口工控 网络安全
北京软件开发应届生工资水平
计算机网络技术有哪些职业学校
青少年网络安全项目书
上海 欧拉网络技术有限公司
ecs加载数据库
网络安全事件性别比例
质谱分析蛋白相互作用数据库
苏州大数据软件开发价格
广州飞旭软件开发公司
access数据库名称
辽宁纪录小康数据库
计算机网络技术17年自考
个人工作总结 网络安全
增城软件开发哪家信誉好
tft哪个服务器好玩
我的世界服务器退出主城
共享的分布式数据库技术
数据库管理员职务
菏泽开发区文兴网络技术
数据库更新触发事件