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

优采云 发布时间: 2022-03-20 05:06

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

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

  

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

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

  

  查看源码,其实是这样的:

  

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

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

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

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

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

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

  以今日头条为例进行演示:

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

  F12打开网页调试工具

  

  选择“Network”选项卡后,我发现有很多响应,所以让我们过滤并仅查看 XHR 响应。

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

  然后我们发现了很多缺失的链接,随便点一个看:

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

  

  让我们再次点击查看:

  

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

  现在你大概明白如何找到JS请求的接口了吧?但是刚才没有找到我们想要的消息,我们再找找吧:

  有一个焦点,我们点击查看:

  

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

  查看其他链接:

  

  这应该是热搜关键词

  

  这是图片新闻下的新闻。

  我们打开一个界面链接看看:

  

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

  

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

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

  先完整代码:#coding:utf-8

  导入请求

  导入json

  url='#39;

  wbdata=requests.get(url).text

  data=json.loads(wbdata)

  news=data['data']['pc_feed_focus']

  福宁新闻:

  title=n['title']

  img_url=n['image_url']

  url=n['media_url']

  打印(网址,标题,img_url)

  返回结果如下:

  

  代码分为四部分

  第 1 部分:介绍相关库#coding: utf-8

  导入请求

  导入json

  第二部分:http请求到数据接口url='#39;

  wbdata=requests.get(url).text

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线