js 抓取网页内容(HTML源码中的内容由前端的动态生成,我们应该如何对网页进行模拟访问 )

优采云 发布时间: 2021-09-27 18:09

  js 抓取网页内容(HTML源码中的内容由前端的动态生成,我们应该如何对网页进行模拟访问

)

  我们以前爬网的大多数网页都是静态生成的HTML内容。我们可以直接从HTML源代码中找到数据和内容。然而,并不是所有的网页都是这样的

  

  网站的某些内容由前端JS动态生成。因为网页上显示的内容是由JS生成的,所以我们可以在浏览器中看到它,但在HTML源代码中找不到它。例如,今天的标题:

  浏览器呈现的网页如下所示:

  

  请看源代码,但它是这样的:

  

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

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

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

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

  即使web页面内容是由JS动态生成和加载的,JS也需要调用一个接口,并根据接口返回的JSON数据进行加载和呈现

  因此,我们可以找到JS调用的数据接口,并从数据接口中找到最终显示在web页面中的数据

  以今天的头条新闻为例:

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

  F12开放式web调试工具

  

  选择“网络”选项卡后,我们发现有许多响应。让我们进行筛选,只看XHR响应

  (XHR是Ajax中的一个概念,代表XMLHttpRequest)

  然后我们发现有很多链接丢失了。单击打开一个:

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

  

  让我们再次打开它:

  

  结果是一张城市名单。应该使用它来加载区域新闻

  现在您可能知道如何找到JS请求的接口了吧?但是我们没有找到我们刚才想要的消息。再看一看,

  有一个焦点。让我们点击查看:

  

  主页上图片新闻显示的数据是相同的,所以数据应该在这里

  请参阅其他链接:

  这应该是热搜索关键词

  

  这是图片新闻下面的新闻

  让我们打开一个接口链接以查看:

  

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

  

  通过相应的数据接口,我们可以按照前面的方法请求并获取数据接口的响应

  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 = 'http://www.toutiao.com/api/pc/focus/'

wbdata = requests.get(url).text

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线