Python爬虫实战入门五:获取JS动态内容—爬取今日头条

获取JS动态内容—爬取今日头条

之前我们爬取的网页,多是HTML静态生成的内容,直接从HTML源码中就能找到看到的数据和内容,然而并不是所有的网页都是这样的。 有一些网站的内容由前端的JS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了。比如今日头条: 浏览器呈现的网页是这样的:

查看源码,却是这样的:

网页的新闻在HTML源码中一条都找不到,全是由JS动态生成加载。 遇到这种情况,我们应该如何对网页进行爬取呢?有两种方法: 1、从网页响应中找到JS脚本返回的JSON数据;2、使用Selenium对网页进行模拟访问 在此只对第一种方法作介绍,关于Selenium的使用,后面有专门的一篇。

从网页响应中找到JS脚本返回的JSON数据

即使网页内容是由JS动态生成加载的,JS也需要对某个接口进行调用,并根据接口返回的JSON数据再进行加载和渲染。

所以我们可以找到JS调用的数据接口,从数据接口中找到网页中最后呈现的数据。

就以今日头条为例来演示:

1、从找到JS请求的数据接口

F12打开网页调试工具:

选择“网络”选项卡后,发现有很多响应,我们筛选一下,只看XHR响应。

(XHR是Ajax中的概念,表示XMLHTTPrequest)

然后我们发现少了很多链接,随便点开一个看看:

我们选择city,预览中有一串json数据:

我们再点开看看:

原来全都是城市的列表,应该是加载地区新闻之用的。

现在大概了解了怎么找JS请求的接口的吧?但是刚刚我们并没有发现想要的新闻,再找找看:

有一个focus,我们点开看看:

与首页的图片新闻呈现的数据是一样的,那么数据应该就在这里面了。 看看其他的链接:

这应该是热搜关键词

这个就是图片新闻下面的新闻了。 我们打开一个接口链接看看:http://www.toutiao.com/api/pc/focus/

返回一串乱码,但从响应中查看的是正常的编码数据:

有了对应的数据接口,我们就可以仿照之前的方法对数据接口进行请求和获取响应了

2、请求和解析数据接口数据

先上完整代码:

# coding:utf-8
import requests
import json

url = 'http://www.toutiao.com/api/pc/focus/'
wbdata = requests.get(url).text

data = json.loads(wbdata)
news = data['data']['pc_feed_focus']

for n in news:    
  title = n['title']    
  img_url = n['image_url']    
  url = n['media_url']    
  print(url,title,img_url)

返回出来的结果如下:

照例,稍微讲解一下代码: 代码分为四部分, 第一部分:引入相关的库

# coding:utf-8
import requests
import json

第二部分:对数据接口进行http请求

url = ' 
wbdata = requests.get(url).text

第三部分:对HTTP响应的数据JSON化,并索引到新闻数据的位置

data = json.loads(wbdata)
news = data['data']['pc_feed_focus']

第四部分:对索引出来的JSON数据进行遍历和提取

for n in news:    
  title = n['title']    
  img_url = n['image_url']    
  url = n['media_url']    
  print(url,title,img_url)

如此,就完成了从JS网页中爬取数据。

原文发布于微信公众号 - 州的先生(zmister2016)

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏逍遥剑客的游戏开发

游戏配置序列化

2694
来自专栏张善友的专栏

在你的网站集成Wiki系统 WikiPlex

Wikiplex 是一种在 .NET Framework 上所开发,具有处理 Wiki 编辑宏功能的小型函式库组件,它提供了数种编辑样式的格式,以让使用者可以类...

2028
来自专栏FreeBuf

利用HTTP参数污染方式绕过谷歌reCAPTCHA验证机制

今年初,我上报了一个谷歌reCAPTCHA验证码绕过漏洞,该漏洞在于能用一种HTTP参数污染的不安全方式,让Web页面上的reCAPTCHA构造一个针对 /re...

1293
来自专栏知晓程序

开发微信小程序,看这篇文章就够了 | 官方文档解读

1163
来自专栏程序生活

Python爬虫系列(四)(简单)Dota排行榜爬取,并存入Excel表格

在编写Python程序的时候,有很多库供我们选择,如urllib、requests,BeautifulSoup,lxml,正则表达式等等,使得我们在获取网页源代...

3255
来自专栏Netkiller

Mototrbo TMS 协议分析(数字电台短信协议分析)

Mototrbo TMS 协议分析 作者:BG7NYT 三年前我就分析出了Mototrbo TMS协议,一直动笔写这篇文章,最近比较闲,就想起了这事。 起初只是...

3845
来自专栏安恒信息

当心,Kaskitya木马伪装成“京卡-互助服务卡”欺骗用户!

最近,我们关注到一起APT攻击事件,攻击者通过钓鱼邮件的方式投递含有恶意代码的附件,此附件包含一个名叫“Kaskitya”的木马。

822
来自专栏Python中文社区

Python写ARP局域网主机存活扫描与ARP欺骗工具

專 欄 ❈exploit,Python中文社区专栏作者,入坑Python一年。希望与作者交流或者对文章有任何疑问的可以与作者联系: QQ:1585173691...

2595
来自专栏黑白安全

Ubuntu kernel eBPF 0day分析

0x01 背景 中国武术博大精深,其中太极作为不以拙力胜人的功夫备受推崇。同样如果从攻击的角度窥视漏洞领域,也不难看出攻防之间的博弈不乏“太极”的身影,轻巧稳定...

521
来自专栏菩提树下的杨过

纯html的table打印注意事项

1. 在firefox下,每页均会打印重复thead(表头),tfoot(表尾)的内容;IE8下无效(其它IE版本未测试)

782

扫码关注云+社区