博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于python爬取异步ajax数据的一些见解
阅读量:4330 次
发布时间:2019-06-06

本文共 1753 字,大约阅读时间需要 5 分钟。

我们在利用python进行爬取数据的时候,一定会遇到这样的情况,在浏览器中打开能开到所有数据,但是利用requests去爬取源码得到的却是没有数据的页面框架。

出现这样情况,是因为别人网页使用了ajax异步加载,你的requests得到的只是页面框架而已。

遇到这样的情况有几种方法可以解决:

  1、分析(f12)network中的响应,从而获得ajax的请求接口,在通过这些接口去获得数据。

  2、使用selenium这个网页自动化测试工具,去获得源码。因为这个工具是等到页面加载完成采取获取的整个页面的代码,所以理论上是可以获得页面完整数据的。

我自己测试过一个页面,也是获取了完整数据的。有需要的朋友可以去自己测试。

 

下面,我们针对第二种方法,做一个实验:本地新建一个json.html前端文件和json.php后端脚本。web服务器我们使用apache(集成环境xampp)。

json.php

array( 'name' => 'panchao', 'age' => 18, 'tel' => '15928838350', 'addr' => 'test' ) ); echo json_encode($arr);?>

json.html

test

然后我们分别用python的request和selenium(webdriver.Chrome)来做实验。

request

import requestsr = requests.get("http://localhost:8080/json/json.html")r.encoding = 'utf-8'print(r.text)

selenium(webdriver.Chrome)至于selenium怎么使用我前面的文章中有提到

from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument("--headless")driver = webdriver.Chrome(executable_path=(r'C:\Users\0923\AppData\Local\Google\Chrome\Application\chromedriver.exe'), options=chrome_options)base_url = "http://localhost:8080/json/json.html"driver.get(base_url)print(driver.page_source)

我们来看结果:

第一种,利用python request请求的方法得到的页面数据为:

test

 第二种,利用selenium(webdriver.Chrome)方法得到的页面数据为:

test
panchao

我们可以看到以上两种结果,最主要的差异就是第二种方法(selenium(webdriver.Chrome))得到的web代码中包含了ajax异步加载的数据。

test
panchao

而第一种方法(python request)得到的web代码中没有包含ajax异步加载的数据。

test

根据以上结论,证明利用selenium(webdriver.Chrome)来获取页面数据,是可以获取到javascript脚本加载的数据的。

不知道大家有没有注意到利用selenium(webdriver.Chrome)来获取页面数据的方法还自动的给我们不全了html的标签

 

希望可以帮助到有需要的人。

转载于:https://www.cnblogs.com/573734817pc/p/11187308.html

你可能感兴趣的文章
在chrome中屏蔽百度推荐
查看>>
1083Moving Tables
查看>>
linux下yum安装redis以及使用
查看>>
assert()函数用法总结
查看>>
设置MySQL的字符编码
查看>>
个人冲刺09
查看>>
nodejs利用string-random生成指定的随机字符串
查看>>
UVA1025---A Spy in the Metro(DP)
查看>>
Java入门:基础算法之产生随机数
查看>>
poj3259 Wormholes【最短路-bellman-负环】
查看>>
CH5302 金字塔【区间DP】
查看>>
poj3585 Accumulation Degree【树形DP】【最大流】
查看>>
PAT甲1115 Counting Nodes in a BST【dfs】
查看>>
贝叶斯统计(Bayesian statistics) vs 频率统计(Frequentist statistics):marginal likelihood(边缘似然)...
查看>>
error LNK2001: 无法解析的外部符号 解决方法
查看>>
CRM INBOX 查询结果增强字段
查看>>
python面试题-20190319
查看>>
css 优先级
查看>>
Beta1
查看>>
【MFC】基于windows media player的音乐播放器
查看>>