动态网页爬虫

动态网页爬虫网页加载数据的另一种方式——通过API(ApplicationProgrammingInterface,应用程序编程接口)加载数据网页通过API获取数据,实时更新内容,它规定了网页与服务

大家好,又见面了,我是你们的朋友全栈君。

网页加载数据的另一种方式——通过 API(Application Programming Interface,应用程序编程接口)加载数据

网页通过 API 获取数据,实时更新内容, 它规定了网页与服务器之间可以交互什么数据、通过什么样的方式进行交互。

Network

Network 记录的是从打开浏览器的开发者工具到网页加载完毕之间的所有请求。如果你在网页加载完毕后打开,里面可能就是空的,我们开着开发者工具刷新一下网页即可

<span role="heading" aria-level="2">动态网页爬虫

 

爬虫中常用的请求类型有 All、XHR、Img 和 Media,剩下的了解一下即可:

<span role="heading" aria-level="2">动态网页爬虫

 

 常用的请求信息,比如请求的名称、状态码、类型、数据大小和耗时等。这些都比较简单,我们只要能看懂,知道是什么意思就行。

<span role="heading" aria-level="2">动态网页爬虫

  

 在所有请求类型中,有一类非常重要的类型叫做 XHR。提前告诉你,完整的影评就在其中。那么 XHR 到底是什么呢?

  •  

    XHR 全称 XMLHttpRequest,是浏览器内置的对象。浏览器想要在不刷新网页前提下加载、更新局部内容时,必须通过 XHR 向存放数据的服务器发送请求。

    反过来说,XHR 类型请求里,就藏着我们需要的搜索结果。

 <span role="heading" aria-level="2">动态网页爬虫

 

 找到了获取评论数据的真正链接,以及相关的请求头参数,接下来我们就可以试着通过爬虫来爬取数据了

 

import requests

headers = {
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
  'referer': 'http://movie.mtime.com/'
}
res = requests.get('http://front-gateway.mtime.com/library/movie/comment.api?tt=1641893701852&movieId=251525&pageIndex=2&pageSize=20&orderType=1', headers=headers)
print(res.text)

 

由于查询字符串较长,requests.get() 方法提供了 params 参数,能让我们以字典的形式传递链接的查询字符串参数,使代码看上去更加的整洁明了
 

<span role="heading" aria-level="2">动态网页爬虫

也就是说,链接中的 tt=1641893701852&movieId=251525&pageIndex=2&pageSize=20&orderType=1,可以拆分成一个字典:

params = {
  "tt": "1641893701852",
  "movieId": "251525",
  "pageIndex": "2",
  "pageSize": "20",
  "orderType": "1"
}

res = requests.get(
  'http://front-gateway.mtime.com/library/movie/comment.api',
  params=params,
  headers=headers
)

<span role="heading" aria-level="2">动态网页爬虫
<span role="heading" aria-level="2">动态网页爬虫

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    'referer': 'http://movie.mtime.com/'
}

params = {
    "tt": "1646731402452",
    "movieId": "251525",
    "pageIndex": "1",
    "pageSize": "20",
    "orderType": "1"
}

res = requests.get(
    'http://front-gateway.mtime.com/library/movie/comment.api',
    params=params,
    headers=headers
)

print(res.text)
print(type(res.text))

爬取评论所在内容

 

res.text 并不是多层级的字典,只是长得像字典的字符串罢了.

 

 这种长得像字典的字符串,是一种名为 JSON 的数据格式。我们需要将其转换成真正的 字典/列表,才能从中提取出评论数据。所以,接下来我们学习 JSON 来将其转换成字典/列表。

 

什么是 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。 易于人阅读和编写,同时也易于机器解析和生成。

JSON 建构于两种结构:键值对的集合 和 值的有序列表,分别对应 Python 里的字典和列表,这些都是常见的数据结构。大部分现代计算机语言都支持 JSON,所以 JSON 是在编程语言之间通用的数据格式。

JSON 本质上就是一个字符串,只是该字符串符合特定的格式要求。也就是说,我们将字典、列表等用字符串的形式写出来就是 JSON,就像下面这样:

 1 # 字典
 2 dict = {'price': 233}
 3 
 4 # JSON
 5 json = '{"price": 233}'
 6 
 7 # 列表
 8 list = ['x', 'y', 'z']
 9 
10 # JSON
11 json = '["x", "y", "z"]'

  Tips:Python 字符串使用单引号或双引号没有区别,但 JSON 中,字符串必须使用英文的双引号来包裹。

 

如何解析 JSON

print(type(res.json()))
# 输出:<class 'dict'>

res.json() 方法的返回的是真正 dict(字典),这样我们就能从中提取数据了

 

获取前 5 页的评论为例,看一下如何实现:

import requests

headers = {
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    'referer': 'http://movie.mtime.com/'
}

for num in range(1, 6):
    params = {
        "tt": "1646731402452",
        "movieId": "251525",
        "pageIndex": "{}".format(num),
        "pageSize": "20",
        "orderType": "1"
    }

    res = requests.get(
        'http://front-gateway.mtime.com/library/movie/comment.api',
        params=params,
        headers=headers
    )
    rest = res.json()

    comment_list = rest['data']['list']
    for i in comment_list:
        print('昵称: '+i['nickname'])
        print('评论内容: '+i['content'])

 

 

 

 

 

 

 

 

 

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154594.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用 PyCharm 远程调试 Django 程序「建议收藏」

    使用 PyCharm 远程调试 Django 程序「建议收藏」这阵子组内流行使用Django写管理端程序。大家习惯了在Windows上使用PyCharm等IDE快速方便地进行开发,但是由于管理端使用了一些公司的公共组件,而这些组件又只提供了Linux上的Python接口,因此必须在Linux上运行Django程序。值得庆幸的是,大多数的IDE都提供了远程调试功能,PyCharm也可以经过简单配置进行远程调试。场

    2022年8月28日
    4
  • MPEG4 MP4和AVC H264 MP4有什么不同

    MPEG4 MP4和AVC H264 MP4有什么不同H264  一、H.264与其他标准的比较  1.1在画质上  H.264概述随着市场的需求,在尽可能低的存储情况下获得好的图像质量和低带宽图像快速传输已成为视频压缩的两大难题。为此IEO/IEC/和ITU-T两大国际标准化组织联手制定了新一代视频压缩标准H.264。  MPEG4H.264标准LOGO1.2在编码上  H.264和以前的标准一样,也是DPCM加变换编码

    2022年10月17日
    3
  • django官方入门教程_DJango

    django官方入门教程_DJangoDjango入门教程Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,模板T和视图V。其最大特点自带一个后台管理系统,可以让只要少量代码就能实现后台管理,尤其适合内容管理网站(如博客,新闻,公司首页等信息类网站),适合中小型web网站。Django基本介绍Django安装HelloDjango开发工具

    2025年10月1日
    4
  • android 防止多次点击提交

    android 防止多次点击提交

    2022年1月9日
    56
  • shiro、jwt、redis整合

    shiro、jwt、redis整合

    2021年11月12日
    44
  • linux服务器负载均衡配置_分布式系统如何负载均衡

    linux服务器负载均衡配置_分布式系统如何负载均衡因项目需要最近研究了下Linux红帽6.5下实现Apache负载均衡的问题。从干净的环境说起。   1、安装JDK环境       首先下载linux版本的JDK,我使用的是jdk-6u24-linux-x64-rpm.bin,并将该文件上传至服务器的指定目录。       chmod777jdk-6u24-linux-x64-rpm.bin修改文件的操作权限;   

    2025年10月12日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号