IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 使用python爬取微信公众号文章 -> 正文阅读

[Python知识库]使用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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 23:02:34  更:2022-01-29 23:03:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 1:50:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码