【Python_requests学习笔记(七)】基于requests模块 实现动态加载数据的爬取

news/2024/7/19 8:37:47 标签: python, requests, 爬虫

requests__2">基于requests模块 实现动态加载数据的爬取

前言

此篇文章中介绍基于requests模块 实现动态加载数据的爬取,并以 抓取Cocos中文社区中:热门主题下的帖子名称及id数据 为例进行讲解。

正文

1、需求梳理

抓取Cocos中文社区中:热门主题下的帖子名称及id数据
在这里插入图片描述

2、动态加载网站

在写爬虫思路之前先介绍下 数据动态加载网站
动态加载网站:其源码页中没有出现想要爬取的数据,只有JS 代码,这样的网站为动态加载网站。
其主要特点为:

  1. 右键、查看网页源码中没有具体数据;
  2. 滚动鼠标滑轮或其他动作时数据才会加载;
  3. 页面局部刷新时数据加载。

3、爬虫思路

  1. F12打开控制台,执行页面动作开始抓取网络数据包

  2. 抓取返回 XHR:异步加载的网络数据包 下的 json文件的网络数据包
    在这里插入图片描述

  3. General->Request URL:返回JSON数据的URL地址
    在这里插入图片描述

  4. QueryStringParameters(查询参数)-观察规律
    在这里插入图片描述

  5. 通过分析请求的url规律,获取对应的数据连接
    即:https://forum.cocos.org/top.json?page={}&per_page=50

  6. 通过得到的url地址,查看数据格式,确定想要爬取的数据真实存在
    在这里插入图片描述
    所需数据 “id和title” 在 “topic_list” 下的 “topics” 下存在。

  7. 编写程序框架、完善程序,详情见: 4、程序实现

4、程序实现

  1. 初始化函数
python">    def __init__(self):
        self.url = "https://forum.cocos.org/top.json?ascending=false&order=default&page={}&per_page=50"  # url地址

  1. 请求获取响应内容html
python">    def get_html(self, url):
        """
        function:  请求获取响应内容html
              in:  url:url地址
             out:  None
          return:  int >0 ok, <0 some wrong
          others:  Get Response Html Func
        """
        headers = {"User-Agent": UserAgent().random}  # 构造随机请求头
        html = requests.get(url=url, headers=headers).json()  # 此处使用.json(),直接获取python数据类型
        self.parse_html(html)  # 调用 提取解析html内容函数
  1. 提取解析html内容函数
python">    def parse_html(self, html):
        """
        function:  提取解析html内容函数
              in:  html:响应内容
             out:  None
          return:  None
          others:  Extract & Parse Html  Func
        """
        item = {}  # 定义一个空字典
        for dic in html["topic_list"]["topics"]:
            item["id"] = dic["id"]
            item["名称"] = dic["title"]
            print(item)
  1. 程序入口函数
python">    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        for page in range(3):  # 爬取1-3页的内容
            url = self.url.format(page)  # url地址拼接
            self.get_html(url)  # 调用 获取响应内容方法
            time.sleep(random.randint(1, 2))  # 随机休眠1-2s

5、完整代码

python">import time
import random
import requests
from fake_useragent import UserAgent

class CocosSpider:
    """
    抓取Cocos中文社区中:热门主题下的帖子名称及id数据
    """

    def __init__(self):
        self.url = "https://forum.cocos.org/top.json?ascending=false&order=default&page={}&per_page=50"  # url地址

    def get_html(self, url):
        """
        function:  请求获取响应内容html
              in:  url:url地址
             out:  None
          return:  int >0 ok, <0 some wrong
          others:  Get Response Html Func
        """
        headers = {"User-Agent": UserAgent().random}  # 构造随机请求头
        html = requests.get(url=url, headers=headers).json()  # 此处使用.json(),直接获取python数据类型
        self.parse_html(html)  # 调用 提取解析html内容函数

    def parse_html(self, html):
        """
        function:  提取解析html内容函数
              in:  html:响应内容
             out:  None
          return:  None
          others:  Extract & Parse Html  Func
        """
        item = {}  # 定义一个空字典
        for dic in html["topic_list"]["topics"]:
            item["id"] = dic["id"]
            item["名称"] = dic["title"]
            print(item)

    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        for page in range(3):  # 爬取1-3页的内容
            url = self.url.format(page)  # url地址拼接
            self.get_html(url)  # 调用 获取响应内容方法
            time.sleep(random.randint(1, 2))  # 随机休眠1-2s


if __name__ == '__main__':
    spider = CocosSpider()
    spider.run()

6、实现效果

在这里插入图片描述


http://www.niftyadmin.cn/n/176234.html

相关文章

出水芙蓉k线图详解

K线技术分析在现货黄金交易中得到广泛的应用&#xff0c;均线系统又是技术分析中最常用的技术指标之一&#xff0c;它能有效地帮助投资者确认趋势和发现趋势&#xff0c;小编接下来为大家介绍的经典K线图详解&#xff0c;正正是K线与均线系统的完美结合。 现货黄金日K线图出水芙…

uniapp 微信、安卓预览文件

uniapp 下载文件官网 uni-app官网 问题 wx.downloadFile 微信小程序wx.downloadFile苹果手机失败显示 file data is empty的解决方案 Android和微信开发者工具使用downloadFile正常&#xff0c;但ios系统上却失败了。经过多次测试&#xff0c;发现原来是上传的文件里面内容…

二进制补码详解

微处理器用二进制补码系统表示有符号整数&#xff0c;因为它可以将减法运算转换为对减数的补数的加法运算。 1.什么是二进制补码运算 我们先引入补数的概念&#xff1a; 补数&#xff1a;一个数与它的补数之和是一个常数。例如一个一位的十进制数与它的补数之和总是9&#xff…

Android音频子系统(十)------MTK Audio录音流程代码解析

你好&#xff01;这里是风筝的博客&#xff0c; 欢迎和我一起交流。 Android framework中的代码每个平台基本都是大同小异&#xff0c;只有Hal上代码才是厂商特制&#xff0c;每个平台都不相同&#xff0c;这里以MTK平台为例&#xff0c;记录下MTK平台Hal audio音频录音代码流…

NDK FFmpeg音视频播放器二

NDK前期基础知识终于学完了&#xff0c;现在开始进入项目实战学习&#xff0c;通过FFmpeg实现一个简单的音视频播放器。本文主要内容如下&#xff1a;阻塞式队列SafeQueue。音视频BaseChannel基础通道。音视频压缩包加入队列。视频解码与播放。ANativeWindow渲染用到的ffmpeg、…

免费空间主机是什么?怎么申请免费空间主机

随着网络的普及&#xff0c;越来越多的人开始使用免费空间。这种新的商业模式也让一些商家得以获利。 1&#xff1a;免费空间的概念 免费空间是指允许您自由使用的网络服务。这意味着它可以被任何人用来创建、编辑和发布网站内容或应用程序&#xff0c;而无需考虑任何付费业务协…

离线安装ffmpeg

linux离线安装ffmpeg 获取安装包&#xff1a;[ffmpeg-release](Index of /releases (ffmpeg.org)) 下载最新版本&#xff0c;ffmpeg-4.4.tar.gz 然后传送到服务器上&#xff0c;解压安装 # 解压 tar -zxvf ffmpeg-4.4.tar.gz# 安装 cd ffmpeg-4.4 ./configure --enable-sha…

【人工智能】— CSP约束满足问题、回溯搜索、启发式

【人工智能】— 约束满足问题约束满足问题 CSP示例&#xff1a;地图着色约束图CSP的种类约束类型举例:密码算法现实世界的CSP标准搜索公式回溯搜索改进回溯搜索的效率最少剩余值启发式度启发式最少约束值启发式Forward checking—前向检验Constraint propagation — 约束传播约…