使用python爬取微信公众号文章

一、背景

 

有时候看到某一个微信公众号中的文章,觉得写的非常不错,有种当时就想把该公众号所有的文章都看完的冲动,但是使用手机看不是特别方便,就想把文章全部下载下来到电脑上面看。

二、爬虫实现步骤

使用python爬取微信公众号文章,总共分为如下几步:

第一步:获取微信公众号的文章地址和入参规则;

第二步:将爬取的文章标题和url保存到数据库;

第三步:针对微信公众号连续爬取超过60次会提示访问太频繁而拒绝响应(记录当前爬取到的页码及异常情况处理)【{'base_resp': {'err_msg': 'freq control', 'ret': 200013}}】

三、爬虫实现过程

第一步:需要有一个个人微信公众号,订阅号也是可以的。

第二步:进入微信公众平台,新建图文素材,在界面上方有一个“超链接”的按钮,点击进入。

第三步:输入公众号名称进行检索,按F12,如下图显示公众号的文章请求地址、cookie、user-agent、请求参数。

# -*- coding: utf-8 -*-
import requests
import time
import csv
import pandas as pd
import traceback
import mymysql
import uuid

# 目标url
url = "https://mp.weixin.qq.com/cgi-bin/appmsg"

# 使用Cookie,跳过登陆操作
headers = {
  "Cookie": "appmsglist_action_3202723363=card; pgv_pvid=532343460; ua_id=OlRastLitDwq627TAAAAAJzUEREVZq7JaMyyQMxMEIw=; wxuin=42623452127; mm_lang=zh_CN; uuid=2702030d23431cc966563362; rand_info=CAESIKyltjg5bkliwmXupK/rdnCAEv5Nymy4o9rKsv12DRqR; slave_bizuin=3202723363; data_bizuin=3202723363; bizuin=3204433363; data_ticket=3JEz+aeGoOMeIRs/DjEPhZnKfqzismwik5LzOk6uXt+Z7CBkXJ+taoQJdCFeb8bJ; slave_sid=Zk5zbFBjODBTT3ZHVGR4ZzRWSTRMZnlPY2tTN2pjVnI5MFdyZzRxX2NNWTRNVV9aUHFjdlZ4Y0xrallmQ2c0WmcxWWFoaGZJVGlPVUJzOTBRNzhWSGpKT216a2lOS2c1VHF4YkVVa0drR2R0VlRqR01tMEoyM2dLMXhIb2M5TGZNOHNJQXRPaTl0SGpZMzd2; slave_user=gh_968271d6ce85; xid=81ded7b144cd53195323432e6e776",
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36",
}

data = {
    "token": "474544364",
    "lang": "zh_CN",
    "f": "json",
    "ajax": "1",
    "action": "list_ex",
    "begin": "0",
    "count": "5",
    "query": "",
    "fakeid": "MzA5MzMA==",
    "type": "9",
}

#时间转日期格式
def timetoDate(timeStamp):
    #timeStamp = 1643275175
    timeArray = time.localtime(timeStamp)
    otherStyleTime = time.strftime("%Y-%m-%d", timeArray)
    return otherStyleTime

#抓取公众号文章
def grapArtile():
    # 计数器
    counter = 0
    # 页数
    page = 0
    content_list = []
    # for i in range(20):
    content_json = []
    # 查询最新的页码
    mysqlConn = mymysql.MYMYSQL()
    mysqlConn.query()
    page = mysqlConn.page_no
    try:
        while 1:
            data["begin"] = page*5
            # 使用get方法进行提交
            content_json = requests.get(url, headers=headers, params=data).json()
            msglen = len(content_json["app_msg_list"]);
            #如果没有文章了,退出
            if msglen == 0:
                break
            items = []
            # 返回了一个json,里面是每一页的数据
            for item in content_json["app_msg_list"]:
                # 提取每页文章的标题及对应的url
                wzid = uuid.uuid1().hex
                yz = (wzid, item["title"], item["link"], timetoDate(item["create_time"]))
                items.append(yz)
                counter += 1
                print("爬取第" + str(page + 1) + "页,第" + str(counter) + "条")
            mysqlConn.batchInsert(items)
            page = page + 1
            time.sleep(3)
    except:
        print("出现【KeyError】异常,文件保存,原因")
        print(content_json)
        traceback.print_exc()
        mysqlConn.update(page)
        time.sleep(30*60)
        grapArtile()
    else:
        print("出现【KeyError】异常,文件保存")
        print(content_json)
        #saveFile(content_list)
        mysqlConn.update(page)
        time.sleep(30*60)
        grapArtile()

grapArtile()

第五步:将文章标题和url保存到数据库

import pymysql
import traceback
import uuid
class MYMYSQL():
    def __init__(self,):
        # 打开数据库连接
        conn = pymysql.connect("127.0.0.1", "user", "password", "python_pc", charset='utf8')
        self.conn = conn

    # 查询
    def query(self):
        self.conn.select_db('python_pc')
        # 获取游标
        cur = self.conn.cursor()
        cur.execute("select * from t_record where sno=1")
        while 1:
            res = cur.fetchone()
            if res is None:
                # 表示已经取完结果集
                break
            print(res[1])
            self.page_no = res[1]
        cur.close()

    #更新
    def update(self,cur_no):
        self.conn.select_db('python_pc')
        # 获取游标
        cur = self.conn.cursor()
        nums = cur.execute("update t_record set page_no="+str(cur_no)+",update_time=now() where sno=1")
        print("更新的数据条数:"+str(nums))
        cur.close()
        self.conn.commit()

    def batchInsert(self, list):
        self.conn.select_db('python_pc')
        # 获取游标
        cur = self.conn.cursor()

        # 另一种插入数据的方式,通过字符串传入值
        sql = "insert into t_article values(%s,%s,%s,%s)"
        insert = cur.executemany(sql, list)
        cur.close()
        self.conn.commit()



if __name__ == "__main__":
    try:
        me = MYMYSQL()
        # me.query()
        # me.update(3)
        # me.query()

        # list = []
        # for i in range(0,5):
        #     wzid = uuid.uuid1().hex
        #     yz = (wzid,'111','222')
        #     list.append(yz)
        # print(list)
        # me.batchInsert(list)


    except:
        traceback.print_exc()

 参考资料:
https://blog.csdn.net/jingyoushui/article/details/100109164
--python操作mysql数据库
https://blog.csdn.net/kongsuhongbaby/article/details/84948205

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python可以用于爬取微信公众号文章。有几种方式可以实现这一目标,其中一种方式是通过登录微信公众号平台,在里面搜索要爬取的公众号,然后进行抓包。另外一种方式是使用安卓模拟器进行抓包。还可以使用搜狗的微信模块来获取数据。 在使用第一种方式时,首先需要拥有一个微信公众号的账号。然后,通过工具如pycharm和fiddler等,登录微信公众号平台,进入创作管理,选择图文素材,然后创建或编辑文章。最后,通过添加引用和查找公众号文章等步骤,进行数据的爬取和收集。 在实现这些步骤之前,你需要了解微信公众号平台的主要功能和界面布局。主面板可以划分为七大块,每个块都有不同的功能。在后续的操作中,你可以使用Python代码来模拟微信请求,并实现数据的爬取和分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [欢度国庆⭐️共享爬虫之美⭐️基于 Python 实现微信公众号爬虫Python无所不能爬)](https://blog.csdn.net/xiejiachao/article/details/120573509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [【爬虫python爬取微信公众号](https://blog.csdn.net/qq_36269293/article/details/109244944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值