【爬虫军火库】Chrome F12使用Network分析异步请求

昨天在知乎收到一条邀答(https://www.zhihu.com/question/263298910):

我想做一个web scrape,用requests和beautifulSoup, 代码如下:

url_to_scrape = 'http://finance.sina.com.cn/data/index.html#stock-schq-hsgs-xlhy'
r = requests.get(url_to_scrape,'html.parser')
r.encoding = 'gb2312'
soup = BeautifulSoup(r.content,'html.parser')

我想抓取该页面下“新浪行业板块”表格的数据,可是上面的代码print(soup)看不到该表格内容。我查了一下,好像是javascript的表格,需要点击“新浪行业板块”这个按钮才能获得该内容,请问该怎么用代码实现啊?我搜了下,有的说用selenium,有的说打开浏览器看“network”下点击该按钮后的请求过程。不太明白怎么弄,请大侠指点下,谢谢。

今天就来讲讲 打开浏览器看“network”下点击该按钮后的请求过程

大家都知道,写爬虫无非是请求、解析、存取几步。相应地,我们就需要首先能够找到一个正确的入口(URL),成功请求到数据(避开一些反爬限制,比如UA、IP访问频率),弄懂对方的页面结构(parse HTML结构),提取出目标数据并保存(extract&save)。

也有一句话叫做,理论上讲,只要我们能从浏览器里看到的,都是可以抓取的数据。这也就导致,很多人一接到爬虫任务,想也不想就去浏览器右键-查看网页源代码,一顿分析以后就直接请求数据,一顿正则(或者BeautifulSoup)以后发现匹配为None……最后一看,目标数据根本不在返回值里。

这样就是今天的朋友遇到的这个问题了。浏览器查看到的网页源代码,是完成了所有的请求、执行完相应JavaScript脚本的结果,而我们的目标数据,不一定都在对URL的那次请求里。

说白了!爬虫的第一步不应该是查看页面源代码,而是应该去查看Network请求过程,只有这样,才能获取到正确的入口,而非缘木求鱼。

需要说明的是,有些时候,异步请求数据对爬虫而言不一定是坏事,很可能会直接获取到数据结构更简洁的API。

Network从哪儿看?有些人喜欢用Firefox的Friebug插件,有些人喜欢用Chrome自带的开发者工具,其实都是一个意思。

栗子1:今天遇到的新浪财经

F12-点击Network-重新请求页面

可以看到49个请求,如果你直接请求URL的话,其实只能拿到index.html这一个请求的返回值,而这边的Response里…是没有我们的目标数据的。

于是挨着往下排查。(小技巧,可以点击XHR或者JS,缩小范围)

http://money.finance.sina.com.cn/d/api/openapi_proxy.php/?__s=[[%22bkshy%22,%22%22,0]]&callback=FDC_DC.theTableData

可以看到这是一个查询API,带有两个参数,一个是__s=[[“bkshy”,””,0]],另一个是callback=FDC_DC.theTableData。

我们可以把callback参数去掉,就得到一个纯JSON文件。

到这一步就十分清晰明了了,之后就是构造请求,然后解析JSON(显然是要比解析杂乱的HTML方便一万倍的) 不再赘述。

栗子2:Bilibili抓用户个人信息

步骤类似,一图流,不再赘述。

不一样的地方在于,前面的请求方式是GET,而这里是POST,需要使用POST方法提交数据。但是只要找对了入口,接下来的工作都不复杂了。

当然了,Chrome开发者工具的功能远不止这些,爬虫确定请求入口的办法也不止一种,以后遇到合适的例子再写吧。

原文发布于微信公众号 - 不二小段(rose-fun)

原文发表时间:2017-11-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯移动品质中心TMQ的专栏

Windows开机过程和测试方法探索

用户会经常抱怨自从安装自己的应用后,电脑开机变慢,到底是系统的原因还是应用的原因,为了了解这里的问题,探秘了下windows的开机过程和测试方法。 一、开机过...

25410
来自专栏性能与架构

通过负载均衡实现应用服务器可伸缩

应用服务器部署核心业务逻辑,主要处理用户请求的服务器 应用通常设计成无状态结构,即应用本身不记录用户请求的上下文信息,这样设计的好处是任何用户的任何一次请求都...

3544
来自专栏finleyMa

(转) 网站统计中的数据收集原理及实现

原文地址:http://blog.codinglabs.org/articles/how-web-analytics-data-collection-syste...

1791
来自专栏Youngxj

[面板分享]传奇域名bt.cn公司的传奇面板程序“宝塔”

2692
来自专栏Java面试笔试题

使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?

要提升读取数据的性能,可以指定通过结果集(ResultSet)对象的setFetchSize()方法指定每次抓取的记录数(典型的空间换时间策略);要提升更新数据...

901
来自专栏微信音视频小程序

动手搭建第一个小程序音视频Demo

腾讯云提供了全套技术文档和源码来帮助您快速构建一个音视频小程序,但是再好的源码和文档也有学习成本,为了尽快的能调试起来,我们还提供了一个免费的一键部署服务:您只...

3.9K12
来自专栏bboysoul

本地搭建ios测试包上传下载安装环境(类似蒲公英)

昨天ios开发这小子说公司网很慢每次测试包上传到蒲公英上都要好久,但是公司这网很垃圾是个事实,为了提高他们的效率,我就本地搭建了一个可以上传安装ios测试包的环...

1152
来自专栏Golang语言社区

Golang协程与通道整理

协程goroutine 不由OS调度,而是用户层自行释放CPU,从而在执行体之间切换。Go在底层进行协助实现 涉及系统调用的地方由Go标准库...

3607
来自专栏文渊之博

PowerBI通过gateway连接多维数据库

简介 Microsoft Power BI 是由微软推出的商业智能的专业分析工具,给用户提供简单且丰富的数据可视化及分析功能。个人非常喜欢,有免费版和Pro的...

4256
来自专栏魏艾斯博客www.vpsss.net

Avada 主题导入 improt failed 和 wp_remote_get 怎么解决?

群友搭建 avada 主题的企业站点,导入主题发生以下错误:import failed,演示服务器无法访问,请检查系统状态页面上的 wp_remote_get。

1281

扫码关注云+社区