Python爬虫4.2 — ajax[动态网页数据]用法教程

  • 综述
  • AJAX 介绍
    • 什么是AJAX
    • 实例说明
    • 请求分析
    • 获取方式
  • 实例说明
  • 其他博文链接

综述

本系列文档用于对Python爬虫技术的学习进行简单的教程讲解,巩固自己技术知识的同时,万一一不小心又正好对你有用那就更好了。
Python 版本是3.7.4

有时候我们在用requests抓取页面的时候,得到的结果可能和在浏览器中看到的不一样。在浏览器中可以看到正常显示的页面数据,但是使用requests得到的结果并没有。这是因为requests获取的都是原始的HTML文档,而浏览器中的页面则是经过JavaScript处理数据后生成的结果,这些数据的来源有多种,可能是通过Ajax加载的,可能是包含在HTML文档中的,也可能是经过JavaScript和特定算法计算后生成的。

所以如果遇到这样的页面,直接利用requests等库来抓取原始页面,是无法获取到有效数据的,这时需要分析网页后台向接口发送的Ajax请求,如果可以用requests来模拟Ajax请求,那么就可以成功抓取了。

所以,本篇我们的主要了解什么是Ajax以及如何去分析和抓取Ajax请求。

AJAX 介绍

什么是AJAX

AJAX(Asynchronous JavaScript And XML)异步JavaScript和XML。通过在后台与服务器进行商量的数据交换,Ajax可以是网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用Ajax)如果需要更新内容,必须重载整个网页页面,因为传统的在传输数据格式方面,使用的是XML语法,因此叫做Ajax。其实限制数据交互基本上都是使用JSON,使用Ajax加载的数据,即使使用了JS,将数据渲染到了浏览器中,在查看网页源码还是不能看到通过Ajax加载的数据,只能看到使用这个url加载的HTML代码。

实例说明

浏览网页的时候,我们会发现很多网页都有下滑查看更多的选项。例如微博、今日头条等,还有一些是根据鼠标下拉自动加载更多,这些其实就是Ajax加载的过程。我们可以看到页面并没有整个刷新,也就意味着页面的链接没有变法,但是网页中却多了新内容,着就是通过Ajax获取新数据并呈现的过程。

请求分析

使用Chrome开发者工具的筛选功能筛选出所有的Ajax请求,在这里对此就不再进行详细讲解。

使用Fiddler抓包工具也可进行抓包分析。Fiddler工具的使用方法在这里也不在进行讲解,大家可在网上进行搜索查看。

Ajax的响应结果一般都是json数据格式。

获取方式

  1. 直接分析Ajax掉用的接口,然后通过代码请求这个接口获取数据(下面实例就是此种凡是)。
  2. 使用Selenium + Chromedriver模拟浏览器行为获取数据(后面文章继续讲述)。
方式 优点 缺点
分析接口 直接可以请求到数据,不需要做一些解析工作,代码量少,性能高。 分析接口比较复杂,特别一些通过js混淆的接口,要有一定的js知识,容易被发现时爬虫。
Selenium 直接模拟浏览器的行为,浏览器能请求到的,使用selenium也能请求到,爬虫更稳定。 代码量多,性能低。

实例说明

下面我们就做一个实例,爬取知乎下问题“当一个颜值很高的程序员是怎样一番体验?”的所有答案。实例代码如下:

# 引入所需库
import json
import requests# 声明定义请求头
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) ''AppleWebKit/537.36 (KHTML, ''like Gecko) Chrome/67.0.3396.99 ''Safari/537.36','Host': "www.zhihu.com",'Referer': "https://www.zhihu.com/question/37787176"
}def answer(url_):"""获取问题答案:param url_: :return: """r = requests.get(url_, headers=header)data = r.textjsonobj = json.loads(data)return jsonobj# 问题答案接口地址
url = "https://www.zhihu.com/api/v4/questions/37787176/answers?include=data%5B%2A%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_labeled%2Cis_recognized%2Cpaid_info%3Bdata%5B%2A%5D.mark_infos%5B%2A%5D.url%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%2A%5D.topics&limit=5&offset=0&platform=desktop&sort_by=default"# 获取回答总数
answer_total = int(answer(url)['paging']['totals'])
offset = 0
while offset < answer_total:url = "https://www.zhihu.com/api/v4/questions/37787176/answers?include=data%5B%2A%5D.is_normal%2Cadmin_closed_comment%2Creward_info%2Cis_collapsed%2Cannotation_action%2Cannotation_detail%2Ccollapse_reason%2Cis_sticky%2Ccollapsed_by%2Csuggest_edit%2Ccomment_count%2Ccan_comment%2Ccontent%2Ceditable_content%2Cvoteup_count%2Creshipment_settings%2Ccomment_permission%2Ccreated_time%2Cupdated_time%2Creview_info%2Crelevant_info%2Cquestion%2Cexcerpt%2Crelationship.is_authorized%2Cis_author%2Cvoting%2Cis_thanked%2Cis_nothelp%2Cis_labeled%2Cis_recognized%2Cpaid_info%3Bdata%5B%2A%5D.mark_infos%5B%2A%5D.url%3Bdata%5B%2A%5D.author.follower_count%2Cbadge%5B%2A%5D.topics&limit=5&offset=" + str(offset) + "&platform=desktop&sort_by=default"offset += 5print(offset)answer_row = answer(url)data = answer_row['data']print(data)

其他博文链接

  • Python爬虫1.1 — urllib基础用法教程
  • Python爬虫1.2 — urllib高级用法教程
  • Python爬虫1.3 — requests基础用法教程
  • Python爬虫1.4 — requests高级用法教程
  • Python爬虫2.1 — BeautifulSoup用法教程
  • Python爬虫2.2 — xpath用法教程
  • Python爬虫3.1 — json用法教程
  • Python爬虫3.2 — csv用法教程
  • Python爬虫3.3 — txt用法教程
  • Python爬虫4.1 — threading(多线程)用法教程

Python爬虫4.2 — ajax(动态网页数据抓取)用法教程相关推荐

  1. crawler:AJAX动态网页数据抓取、Selenium使用

    什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新.这意 ...

  2. Python爬虫入门实战之猫眼电影数据抓取(理论篇)

    前言 本文可能篇幅较长,但是绝对干货满满,提供了大量的学习资源和途径.达到让读者独立自主的编写基础网络爬虫的目标,这也是本文的主旨,输出有价值能够真正帮助到读者的知识,即授人以鱼不如授人以渔,让我们直 ...

  3. Python爬虫入门实战之猫眼电影数据抓取(实战篇)

    项目实战 静态网页实战 本节我们将为大家展现一个完整爬虫的大致过程,此次项目内容为提取猫眼电影TOP100榜中的所有电影信息并存储至CSV文件中,其首页地址为http://maoyan.com/boa ...

  4. 爬虫.之登陆及动态网页的抓取

    分布式爬虫 Xpath 正则表达式 动态网页 Headless的浏览器:phantomJS 浏览器的驱动:Selenium 1.Xpath 基本语法: 表达式:nodename(节点名) 选取此节点的 ...

  5. 网络爬虫--23.动态网页数据抓取

    文章目录 一. Ajax 二. 获取Ajax数据的方式 三. selenium+chromedriver获取动态数据 四. selenium基本操作 一. Ajax 二. 获取Ajax数据的方式 三. ...

  6. java抓取网页数据_Golang丨Java丨Python爬虫实战—Boss直聘网站数据抓取

    我们分别通过Golang.Python.Java三门语言,分别实现对Boss直聘网站的招聘数据进行爬取. 首先打开Boss直聘网站: 然后我们在职位类型中输入Go或者Golang关键字: 然后我们可以 ...

  7. python 爬虫实例 电影-Python爬虫入门实战之猫眼电影数据抓取(实战篇)

    电影名 上映信息 综合票房 票房占比 累计票房

  8. python爬虫抓取动态网页数据_python网络爬虫抓取ajax动态网页数据:以抓取KFC门店地址为例...

    一,尝试用BeautifulSoup抓取 先打开KFC网站门店列表页面:http://www.kfc.com.cn/kfccda/storelist/index.aspx 可以看到门店列表如下图: 打 ...

  9. 如何用python抓取文献_浅谈Python爬虫技术的网页数据抓取与分析

    浅谈 Python 爬虫技术的网页数据抓取与分析 吴永聪 [期刊名称] <计算机时代> [年 ( 卷 ), 期] 2019(000)008 [摘要] 近年来 , 随着互联网的发展 , 如何 ...

最新文章

  1. mysql数据库的字符串表示什么意思_MySQL数据库的字符串类型详解(01)
  2. python socket编程步骤_python-socket编程(入门,网络基础)
  3. 串匹配算法——BF算法
  4. workunit 的指的工作单元是什么_分频器是做什么用的?
  5. 关于 CKEditor 3.6以后不兼容ie6的问题解决方案
  6. 阿里云开源编程马拉松入围项目
  7. python读取数据库中指定内容_python如何用正则表达式读取对应字段写入数据库中?...
  8. sql自定义函数学习思路_学习SQL:用户定义的函数
  9. 金志文机器人歌叫什么_MIR发布《移动机器人部署安全指南》白皮书
  10. DSP using MATlAB 示例Example2.10
  11. 复习JS事件及DOM
  12. 十问组态软件:开源的组态软件
  13. css span 右端对齐_span右对齐
  14. excel合并两列内容_excel新手问题:怎么把两列数据合并到一起?用这个公式
  15. 安装Pillow指定版本出错
  16. 在线制图:腾讯云架构在线绘制
  17. 使用po模型进行自动化测试
  18. 惠普linux系统改装win7,惠普EliteDesk800 G3台式机预装win10改win7教程
  19. 如何写网络舆情数据分析报告的技巧及注意事项详解
  20. 1163: [Baltic2008]Mafia

热门文章

  1. 16QAM调制解调系统误码率和星座图的matlab仿真
  2. python读取word文件并替换部分文字_python批量替换
  3. 怎么才能写出好的代码
  4. win10计算机睡眠 隔几分钟就唤醒,Win10电脑睡眠时经常被自动唤醒如何解决
  5. 使用inet_aton报错
  6. 使用VM安装安卓虚拟机
  7. c++中随机生成实数
  8. Windows中telnet不是内部或外部命令解决方法
  9. 判断元素是否为负无穷大numpy.isneginf()
  10. addEventListener()使用方法