动态网页爬虫

动态网页爬虫网页加载数据的另一种方式——通过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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • currentstyle 织梦_织梦导航高亮标签currentstyle调用自定义字段的方法

    currentstyle 织梦_织梦导航高亮标签currentstyle调用自定义字段的方法用织梦仿站时候,经常会使用currentstyle标签高亮当前的栏目,具体代码为:currentstyle=’~typename~’但是在实际建站操作中经常调用自定义字段,大家会发现在用currentstyle的时候读取不出自定义字段的内容了。这时候,我们就需要对织梦进行二次开发,以满足我们的需要。1、我们打开/include/taglib/channel.lib.php文件,在136行找到:$r…

    2022年7月14日
    24
  • java开发常用四大框架_大牛经验!常用的5款Java框架汇总[通俗易懂]

    java开发常用四大框架_大牛经验!常用的5款Java框架汇总[通俗易懂]Java框架在Java开发中的作用是毋庸置疑的。那么Java常用框架有哪些?大概包括:Hibernate、Spring、Struts、jQuery、Redis五种。这些框架有什么用呢?Java常用框架提供了一些现成的机制,在团队开发中简化开发难度。下面就来具体介绍一下Java常用的五大框架。1、HibernateHIbernate是一个优秀的持久化框架,负责简化将对象数据保存到数据库中,或从数据库…

    2022年7月7日
    25
  • 配置Trunk接口

    配置Trunk接口1、Trunk接口1.1什么是TrunkTrunk接口属于干道,主干链路,通常用于交换机和交换机之间,通过一个接口传输多个vlan的数据包。当Trunk端口收到数据帧时,如果该帧不包含802.1

    2022年7月1日
    22
  • mybatis 原理[通俗易懂]

    mybatis 原理[通俗易懂]问题:mybatis是基于mapper接口开发的,mapper接口是执行SQL语句的呢?mybatis对mapper代码的包装主要包含了4个类。1.首先mapper需要将接口进行注册,并且需要获得mapper代理工厂(mapperregistry)mapperregistry类将mapper接口进行注册,并获取mapper代理工厂的工具类(mapperproxyfactory)2.加载mapp…

    2025年6月23日
    3
  • hpe服务器安装操作系统_hp 服务器 电话

    hpe服务器安装操作系统_hp 服务器 电话服务器安装操作系统才能对服务器进行很好的操作,但是新购买的服务器要如何安装操作系统呢?其实服务器系统安装通常有两种方法:用服务器引导光盘引导安装(HPProliant系列服务器100系列设备随机光盘SupportCD没有引导安装操作系统的功能)、用操作系统光盘加载阵列卡驱动引导安装。  用操作系统光盘直接安装操作系统  通常情况下重新安装操作系统,数据盘的重要数据需要保

    2022年10月4日
    3
  • PotPlayer 无损截取视频片段

    PotPlayer 无损截取视频片段PotPlayer无损截取视频片段

    2022年7月12日
    48

发表回复

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

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