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

基于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. 初始化函数
    def __init__(self):
        self.url = "https://forum.cocos.org/top.json?ascending=false&order=default&page={}&per_page=50"  # url地址

  1. 请求获取响应内容html
    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内容函数
    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. 程序入口函数
    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、完整代码

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、实现效果

在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

禾戊之昂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值