抓取ajax动态网页java(网站内容由前端的动态生成,如何对网页进行爬city? )

优采云 发布时间: 2022-01-01 14:00

  抓取ajax动态网页java(网站内容由前端的动态生成,如何对网页进行爬city?

)

  网站的部分内容是前端JS动态生成的。由于网页呈现的内容是由JS生成的,我们可以在浏览器上看到,但是在HTML源代码中是找不到的。 例如,今天的头条新闻:

  浏览器渲染出来的网页是这样的:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  查看源代码,但看起来是这样的:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  网页上的新闻在HTML源代码中找不到,都是JS动态生成和加载的。

  在这种情况下,我们应该如何抓取网页?有两种方式:

  1、从网页响应中找到JS脚本返回的JSON数据; 2、使用Selenium模拟访问网页

  这里只介绍第一种方法。关于Selenium的使用有专门的文章。

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

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

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

  以今日头条为例说明:

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

  F12 打开网页调试工具

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  选择“网络”选项卡后,我们发现有很多响应。让我们过滤并只查看 XHR 响应。

  (XHR 是 Ajax 中的一个概念,意思是 XMLHTTPrequest)

  然后我们发现很多链接都没有了,随便点一个看看:

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

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  让我们再次点击打开它:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

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

  现在你应该明白如何找到JS请求的接口了吧?但是刚才没有找到想要的消息,所以再找一下:

  有一个焦点,我们点一下看看:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  首页图片新闻呈现的数据是一样的,所以数据应该是有的。

  查看其他链接:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  这应该是热搜关键词

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  这是照片新闻下的新闻。

  我们打开一个接口链接看看:/api/pc/focus/

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

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

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  有了对应的数据接口,我们就可以模仿前面的方法向数据接口请求并得到响应

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

  先上传完整代码:

  #!/usr/bin/env python

# 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'] if 'title' in n else 'no title'

# if 'title' in n : title = n['title']

# else : title = 'no title'

img_url = n['image_url'] if 'image_url' in n else 'no image_url'

url = n['media_url'] if 'media_url' in n else 'no media_url'

print(url,title,img_url)

  返回结果如下:

  

  Python网络爬虫:解析JSON,获取JS动态内容-抓取今日头条,抓取json内容

  像往常一样,稍微解释一下代码:

  代码分为四部分,

  第 1 部分:导入相关库

  # coding:utf-8

import requests

import json

  第 2 部分:向数据接口发出 http 请求

  url = 'http://www.toutiao.com/api/pc/focus/'

wbdata = requests.get(url).text

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线