js抓取网页内容(什么是HTML源码中的JS动态生成?(一))

优采云 发布时间: 2021-12-06 07:08

  js抓取网页内容(什么是HTML源码中的JS动态生成?(一))

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

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

  浏览器渲染出来的网页如下图所示:

  查看源码,却是如下图:

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

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

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

  使用 Selenium 模拟对网页的访问

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

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

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

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

  以今日头条为例来说明:

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

  F12打开网页调试工具

  网页调试工具

  选择“网络”选项卡后,我们发现有很多响应。让我们过滤它们,只查看 XHR 响应。(XHR 是 Ajax 中的一个概念,意思是 XMLHTTPrequest)

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

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

  我们再次点击打开:

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

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

  有一个焦点,我们打开看看:

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

  查看其他链接:

  这个应该是热搜关键词

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

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

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

  先上传完整代码:

  # 编码:utf-8

  *敏*感*词*请求

  导入json

  网址 ='#39;

  wbdata = requests.get(url).text

  数据 = json.loads(wbdata)

  新闻 = 数据['数据']['pc_feed_focus']

  对于新闻中的 n:

  标题 = n['标题']

  img_url = n['image_url']

  url = n['media_url']

  打印(网址,标题,img_url)

  返回结果如下:

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

  代码分为四部分,

  第一部分:相关库介绍

  # 编码:utf-8

  *敏*感*词*请求

  导入json

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

  网址 ='#39;

  wbdata = requests.get(url).text

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线