前言

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模块)相关推荐

  1. python(六)动态网页爬虫

    python(六)动态网页爬虫 什么是动态网页爬虫 动态网页 在网站不重新加载的情况下(网页的url不发生改变),通过ajax技术动态更新网站中的局部数据. ajax 异步JavaScript和XML ...

  2. org.apache.poi Excel列与行都是动态生成的_网络爬虫:Python动态网页爬虫2种技术方式及示例...

    作者:糖甜甜甜 https://mp.weixin.qq.com/s/5Dwh5cbfjpDfm_FRcpw1Ug 这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动 ...

  3. Python爬虫4.2 — ajax(动态网页数据抓取)用法教程

    Python爬虫4.2 - ajax[动态网页数据]用法教程 综述 AJAX 介绍 什么是AJAX 实例说明 请求分析 获取方式 实例说明 其他博文链接 综述 本系列文档用于对Python爬虫技术的学 ...

  4. Python动态网页爬虫技术

    这一讲,我将会为大家讲解稍微复杂一点的爬虫,即动态网页的爬虫. 动态网页技术介绍 动态网页爬虫技术一之API请求法 动态网页爬虫技术二之模拟浏览器法 安装selenium模块下载 Google Chr ...

  5. python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统——动态网页爬虫

    一.关于phantomjs 1.介绍 PhantomJS是一个为自动化而生的利器,它本质上是一个基于webkit内核的无界面浏览器,并可使用JavaScript或CoffeeScript进行编程.由于 ...

  6. python+selenium+Chrome(无头版)爬取国家地表水水质自动监测实时数据发布系统(修改版)——动态网页爬虫

    这是一篇动态网页的爬虫教程,新手可以操作一下,简单实用. 一.前言 这篇blog跟python+selenium+phantomJS爬取国家地表水水质自动监测实时数据发布系统--动态网页爬虫的爬虫思路 ...

  7. Python十分适合用来开发网页爬虫

    Python十分适合用来开发网页爬虫,理由如下: 1.抓取网页自身的接口 比较与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简练:比较其他动态脚本语言,如perl,sh ...

  8. python房地产爬虫_房产中介网站爬虫实战(Python BS4+多线程)(一)

    本系列文章介绍了爬取链家和搜房网(房天下)数据的方法. 房产中介网站爬虫实战(Python BS4+多线程)(一) 房产中介网站爬虫实战(Python BS4+多线程)(二) 房地产市场向来是大数据分 ...

  9. python生产实战 python 闭包之庖丁解牛篇

    python生产实战 python 闭包之庖丁解牛篇 python生产实战 从闭包到中间件 什么是闭包 计算机中的闭包 数学领域中的闭包 闭包使用场景 C/C++ 中的闭包思想 C 中类似闭包的结构 ...

  10. 实战|Python轻松实现动态网页爬虫(附详细源码)

    用浅显易懂的语言分享爬虫.数据分析及可视化等干货,希望人人都能学到新知识. 项目背景 事情是这样的,前几天我公众号写了篇爬虫入门的实战文章,叫做<实战|手把手教你用Python爬虫(附详细源码) ...

最新文章

  1. Angular http跨域
  2. LeetCode 876——链表的中间结点
  3. 利用 test 命令的测试功能
  4. mysql双主数据一致性_mysql双主复制的主备数据一致性知多少
  5. MySQL-在线处理大表数据 在线修改大表的表结构
  6. Spring注解开发-属性依赖注入
  7. vscode 智能打印_vscode智能提示
  8. 他说:越成熟,越觉得自己平庸
  9. HDU3507-Print Article-斜率dp入门题
  10. Docker使用概览图
  11. python-code-11
  12. Cocos2d-js-v3.2 在 mac 上配置环境以及编译到 Andorid 的注意事项(转)
  13. OpenSearch自定义分词服务
  14. 移动硬盘坏点测试软件,移动硬盘坏道检测修复
  15. GT-suite v2016的下载和安装
  16. 服务器ubuntu系统调节亮度,ubuntu 设置显示器的亮度
  17. OGG FOR BIGDATA 安装(修正)
  18. pwr | 谁说样本量计算是个老大难问题!?(二)(独立样本均值篇)
  19. 基于JAVA项目任务跟踪系统计算机毕业设计源码+数据库+lw文档+系统+部署
  20. 【JAVASE】HashMap与TreeMap的排序与存储对象的区别

热门文章

  1. JAVA中Unicode输出_java输出全部unicode字符
  2. 创建一个简单的ASP.NET Web应用程序
  3. vc6怎么新建一个c++程序?
  4. javascript函数传参方式
  5. APP扫码登录WEB系统
  6. 2022-2028全球食品和饮料行业热转印设备行业调研及趋势分析报告
  7. 中控考勤软件sqlserver数据库建立办法
  8. Centos7安装SCIP with AMPL
  9. 打造升级GsonFormat驼峰命名规则
  10. java怎么设置_java环境配置怎么设置?Java基础教程