【Python爬虫实战】Python实现动态网页爬虫(requests模块)
前言
Python爬虫实战,requests模块,Python实现动态网页爬虫
让我们愉快地开始吧~
开发工具
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 urlencode
2 import csv
3 import random
4 import requests
5 import traceback
6 from time import sleep
7 from lxml import etree #lxml为第三方网页解析库,强大且速度快
1 base_url = 'http://www.hshfy.sh.cn/shfy/gweb2017/ktgg_search_content.jsp?' #这里要换成对应Ajax请求中的链接
2
3 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 = 3
3 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': 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 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
四、实战案例
五、面试资料
如果需要可以微信扫描下方CSDN官方认证二维码免费领取
【Python爬虫实战】Python实现动态网页爬虫(requests模块)相关推荐
- python(六)动态网页爬虫
python(六)动态网页爬虫 什么是动态网页爬虫 动态网页 在网站不重新加载的情况下(网页的url不发生改变),通过ajax技术动态更新网站中的局部数据. ajax 异步JavaScript和XML ...
- org.apache.poi Excel列与行都是动态生成的_网络爬虫:Python动态网页爬虫2种技术方式及示例...
作者:糖甜甜甜 https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug 这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动 ...
- Python爬虫4.2 — ajax(动态网页数据抓取)用法教程
Python爬虫4.2 - ajax[动态网页数据]用法教程 综述 AJAX 介绍 什么是AJAX 实例说明 请求分析 获取方式 实例说明 其他博文链接 综述 本系列文档用于对Python爬虫技术的学 ...
- Python动态网页爬虫技术
这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...
- python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫
一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...
- python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫
这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...
- Python十分适合用来开发网页爬虫
Python十分适合用来开发网页爬虫,理由如下: 1.抓取网页自身的接口 比较与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简练:比较其他动态脚本语言,如perl,sh ...
- python房地产爬虫_房产中介网站爬虫实战(Python BS4+多线程)(一)
本系列文章介绍了爬取链家和搜房网(房天下)数据的方法. 房产中介网站爬虫实战(Python BS4+多线程)(一) 房产中介网站爬虫实战(Python BS4+多线程)(二) 房地产市场向来是大数据分 ...
- python生产实战 python 闭包之庖丁解牛篇
python生产实战 python 闭包之庖丁解牛篇 python生产实战 从闭包到中间件 什么是闭包 计算机中的闭包 数学领域中的闭包 闭包使用场景 C/C++ 中的闭包思想 C 中类似闭包的结构 ...
- 实战|Python轻松实现动态网页爬虫(附详细源码)
用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...
最新文章
- 3dmax2020安装失败原因及解决方法_电伴热带安装维护,线路断路器跳闸的原因及解决方法...
- 计算机c1 c语言答题,全国计算机级考试二级C语言上机答题技巧.doc
- vue 解决跨域 调试_Electron-vue解决跨域
- Jenkins+.Net Core+Git集成发布 - SkyMallCore快速开发平台
- python hash
- 【云图】一键生成连锁店品牌地图
- neo4j安装和启动
- lora无线模块基于LoRaWAN网关技术在国家物联网应用
- JSON格式数据与数据组件
- byte比较_浅谈Byte-Level BPE
- Spring之IOC快速入门(一)
- 自己动手打印一寸/两寸证件照
- 每周分享第 37 期
- 【华为OD机试真题 JS】事件推送
- 关于C++中的随机数生成器
- 88.什么是受管制的代码?什么是托管代码?
- 如何将Word/PDF转成高质量XML
- allegro 标注坐标_allegro 格点设置,格点设置详解
- 交通安全与智能控制专业学计算机吗,交通安全与智能控制专业就业前景怎么样...
- 用Unity3D实现太阳系仿真
热门文章
- bing翻译api php,免费翻译接口
- 红外传感器型号和参数_深度解析红外传感器原理、分类、性能参数、应用及前景...
- 传感器原理及工程应用第4版
- 华为交换机导入配置_华为交换机配置教程 华为核心交换机配置
- linux下跑分软件下载,geekbench5下载-多平台综合性测试工具 v5.3.1 免费版 - 下载吧...
- Kali wifi字典 ssh字典 password usernam字典 全部字典
- wpsoffice 安装包_WPS office (安卓、ios) 企业版 软件介绍(附安装包)
- ABB机器人编程软件RobotStudio迅雷下载网盘下载
- Python在线编程网站
- 2022爱分析· 汽车行业数字化厂商全景报告