• Python爬虫实战(七):某讯较真辟谣小程序爬虫


    追风赶月莫停留,平芜尽处是春山。


    大四考研狗没时间更新博客了,大家勿怪,等我有学上了,一天一更(可能/狗头

    一、准备工作

    1. 要保证你的PC端的微信版本要在3.6.0之前的版本
    2. 电脑安装配置好Fiddler安装与配置请移步这里

    二、目标分析

    在PC端微信打开某讯较真辟谣小程序
    在这里插入图片描述

    咱们今天要爬取的是热门专栏里的一条条数据
    打开Fiddler然后往下刷新新闻
    在这里插入图片描述
    会发现在Fiddler里面找到了这么一个请求
    在这里插入图片描述
    在这里插入图片描述
    在这里我们可以看到他的一个数据的来源

    二、接口分析

    在这里插入图片描述

    url分析

    https://vp.fact.qq.com/miniChannelArt?artnum=22&channelid=tuijian&sessionid=&token=U2FsdGVkX19mCQ2pQ3HfX81ioIxsRmeJV509bC%252B%252BZedWV9wOJA8qtuuuUOiAK0oj&_=1668050062035

    很明显,他有三个参数:

    1. artnum
      这个参数掌管页数
    2. token
      这个参数是一个令牌,暂时还没有破解生成的方法
    3. _
      这个参数代表时间戳

    如果你能掌管好这三个参数,那数据不就是手到擒来嘛!

    返回数据分析

    是get请求,返回数据格式是json格式
    在这里插入图片描述

    三、编写代码

    知道了url规则,以及返回数据的格式,那现在咱们的任务就是构造url然后请求数据

    url = "https://vp.fact.qq.com/miniChannelArt?artnum={}{}&channelid=tuijian&sessionid=&token=U2FsdGVkX19GKwNTxgwgTzYy78%252BCfE983Iy9p6QNratluvku5th95VzqQAbI6FB9&_={}".format(page, page, int(time.time()*1000))
    
    • 1

    那就直接上呗,直接请求他
    所以我们为了方便就把请求网页的代码写成了函数get_html(url),传入的参数是url返回的是请求到的内容。

    def get_html(url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat",
            "Host": "vp.fact.qq.com",
            "Referer": "https://servicewechat.com/wxd7bec290bace5e42/87/page-frame.html",
        }
        response = requests.get(url, headers=headers)
        return response.text
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    获取数据

    将获得的数据格式化为json格式的数据。

    def get_html(url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat",
            "Host": "vp.fact.qq.com",
            "Referer": "https://servicewechat.com/wxd7bec290bace5e42/87/page-frame.html",
        }
        response = requests.get(url, headers=headers)
        return response
    
    
    def get_data():
        for page in range(1, 11-----
    ):
            url = "https://vp.fact.qq.com/miniChannelArt?artnum={}{}&channelid=tuijian&sessionid=&token=U2FsdGVkX19GKwNTxgwgTzYy78%252BCfE983Iy9p6QNratluvku5th95VzqQAbI6FB9&_={}".format(page, page, int(time.time()*1000))
            data = get_html(url).json()
            data = data['content']
            for i in data:
                title = i['title']
                abstract = i['abstract']
                result = i['result']
                date = i['date']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    保存数据

    我们写一个save函数用来存放数据

    def save_data(title, abstract, result, date):
        with open('data.csv', 'a', encoding='utf-8-sig', newline="") as f:
            writer = csv.writer(f)
            writer.writerow([title, abstract, result, date])
    
    • 1
    • 2
    • 3
    • 4

    完整代码

    # -*- coding:utf-8 -*-
    # @time: 2022/11/10 17:30
    # @Author: 韩国麦当劳
    # @Environment: Python 3.7
    import requests
    import time
    import csv
    
    
    def get_html(url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36 MicroMessenger/7.0.9.501 NetType/WIFI MiniProgramEnv/Windows WindowsWechat",
            "Host": "vp.fact.qq.com",
            "Referer": "https://servicewechat.com/wxd7bec290bace5e42/87/page-frame.html",
        }
        response = requests.get(url, headers=headers)
        return response
    
    
    def save_data(title, abstract, result, date):
        with open('data.csv', 'a', encoding='utf-8-sig', newline="") as f:
            writer = csv.writer(f)
            writer.writerow([title, abstract, result, date])
    
    
    def get_data():
        for page in range(1, 11):
            url = "https://vp.fact.qq.com/miniChannelArt?artnum={}{}&channelid=tuijian&sessionid=&token=U2FsdGVkX19GKwNTxgwgTzYy78%252BCfE983Iy9p6QNratluvku5th95VzqQAbI6FB9&_={}".format(page, page, int(time.time()*1000))
            data = get_html(url).json()
            data = data['content']
            for i in data:
                title = i['title']
                abstract = i['abstract']
                result = i['result']
                date = i['date']
                save_data(title, abstract, result, date)
    
    
    if __name__ == '__main__':
        get_data()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    欢迎一键三连哦!
    还想看哪个网站的爬虫?欢迎留言,说不定下次要分析的就是你想要看的!

  • 相关阅读:
    Kotlin编程实战——与Java互操作(10)
    得物Java开发面试题
    嵌入式Linux 开发经验:编写用户态应用程序打开 misc 设备
    React Hook实现多列picker-view组件
    C++ Qt开发:如何使用信号与槽
    模型推理后处理C++代码优化案例
    linux卸载jdk方法
    【RTT驱动框架分析】-硬件定时器应用笔记和源码分析
    私营企业可以上市吗
    Hugging News #0626: 音频课程更新、在线体验 baichuan-7B 模型、ChatGLM2-6B 重磅发
  • 原文地址:https://blog.csdn.net/weixin_46089149/article/details/127782868