python3简单实现微信爬虫

yizhihongxing

Python3简单实现微信爬虫

本篇文章将介绍如何使用Python3实现微信爬虫,并简单介绍一些爬虫的基础知识。

什么是微信爬虫

微信爬虫是指通过程序自动爬取微信公众号的文章、阅读量、点赞数等数据的技术。目前,微信不允许普通用户通过API或其他方式来获取公众号的文章数据,但是可以通过模拟登陆和数据抓取的方式实现爬取公众号的目的。

实现步骤

步骤一:模拟登陆

模拟登陆指的是用程序来模拟用户在微信网页版上登陆的过程,获取授权cookie,以达到后续爬取的目的。可以通过Selenium、Requests等库来实现模拟登陆。

下面是一个使用Requests库来模拟登陆的实例:

import requests

email = 'xxxxx'
pwd = 'xxxx'

def login():
    url = 'https://mp.weixin.qq.com/'
    headers = {
        'Referer': 'https://mp.weixin.qq.com/',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
    s = requests.Session()
    s.headers.update(headers)
    res = s.get(url)
    token = res.url.split('token=')[1]
    data = {
        'username': email,
        'pwd': pwd,
        'imgcode': '',
        'f': 'json',
        'token': token
    }
    post_url = 'https://mp.weixin.qq.com/cgi-bin/bizlogin?action=startlogin'
    res = s.post(post_url, data=data)
    ret = eval(res.content)
    status = ret.get('base_resp').get('ret')
    if status == 0:
        print('login success!')
        return s
    else:
        print('login error:', ret.get('base_resp').get('err_msg'))

步骤二:获取文章列表

微信公众号文章列表是通过Ajax动态加载的,我们可以模拟发送Ajax请求获取文章列表。

下面是一个使用Requests库来获取文章列表的实例:

import json

def get_page(s, begin=0):
    query_id = '1000000015'
    query_key = 'cbb36e512133a67f06a2600056f1fabd26d7494a03fcc3cbe7d5851a98ae7d44a851084658a471d44cf07078d43b4ca0ebedd2608bbd'
    url = 'https://mp.weixin.qq.com/cgi-bin/appmsg?'
    params = {
        'action': 'list_ex',
        'begin': begin,
        'count': '5',
        'fakeid': 'xxxx',
        'type': '9',
        'query': '',
        'token': '',
        'lang': 'zh_CN',
        'f': 'jsonp',
        'ajax': '1',
        'random': '0.7587945353390255',
        'query_id': query_id,
        'query_key': query_key,
    }
    res = s.get(url, params=params)
    content = res.content.decode('utf-8')
    content = content.replace('..\/', '')
    content = content.replace('amp;', '')
    content = content.replace('jsonpcallback', '')
    content = content.replace('(', '')
    content = content.replace(')', '')
    content = content.strip()
    data = json.loads(content)
    return data.get('app_msg_list'), data.get('base_resp').get('total_count')

步骤三:获取文章信息

获取文章列表之后,我们需要对每篇文章进行遍历,并抓取相应的信息。我们可以抓取的信息包括:

  • 文章标题
  • 文章链接
  • 阅读数
  • 点赞数
  • 发布时间
  • 文章作者
  • 文章摘要

下面是一个实现获取文章信息的示例:

import time

def get_article_info(s):
    offset = 0
    articles = []
    while True:
        article_list, count = get_page(s, offset)
        if not article_list:
            break
        for article in article_list:
            title = article.get('title')
            link = article.get('link')
            read_num = article.get('read_num')
            like_num = article.get('like_num')
            timestamp = article.get('create_time')
            date_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))
            summary = article.get('digest')
            author = article.get('author')
            articles.append({
                'title': title,
                'link': link,
                'read_num': read_num,
                'like_num': like_num,
                'datetime': date_time,
                'summary': summary,
                'author': author,
            })
        offset += len(article_list)
    return articles

示例

示例一

以下代码展示了如何使用Python实现微信文章的阅读数和点赞数的爬取:

import requests
import re


def get_read_num_and_like_num(link):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36',
    }
    url = link + '&ascene=1&uin=MTU5NTAxODEyMA%3D%3D&devicetype=Windows+10+x64&version=62090076&nettype=WIFI&abtest_cookie=BQABAAoACwASABMAFQAFACOXHgBZ5keAKaZHgA%2Fmh4AP2seAAAA&lang=zh_CN&exportkey=AcMHPxzd4%2BbL4AUsP1KWA3U%3D&pass_ticket=4EB0ug846XCemllS3ZyV3z1WAy%2Fj4PvBhVf5XTcNBfw%3D&wx_header=1'
    res = requests.get(url, headers=headers)
    content = res.text
    read_num = re.search(r'read_num":(\d+)', content).group(1)
    like_num = re.search(r'like_num":(\d+)', content).group(1)
    return read_num, like_num

link = 'https://mp.weixin.qq.com/s?src=11&timestamp=1593587669&ver=2427&signature=ZSs7l1LdhH-pTJ1jiewJbN75fJmwdmCk1Nwzd4CVMDU20vi4lHRhCqmDYv-qXBFZ-DDghvRD*MZ7JZ3PnrG1vymN4Uc1f5-iiKkRCcy0Iy97eSU-Zdn678Uxh7k9-cly&new=1'

read_num, like_num = get_read_num_and_like_num(link)
print('阅读数:', read_num, '\t点赞数:', like_num)

示例二

以下代码展示了如何使用Python定时执行微信公众号爬取,并把数据存储到MySQL数据库中:

import time
import pymysql
from apscheduler.schedulers.blocking import BlockingScheduler

# 配置数据库连接信息
conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', db='weixin', charset='utf8mb4')
cursor = conn.cursor()

# 获取微信公众号列表
def get_gongzhonghao_list():
    sql = "SELECT name, weixin_id FROM gongzhonghao;"
    cursor.execute(sql)
    rows = cursor.fetchall()
    return rows

# 获取微信公众号文章列表
def get_article_list(s):
    # TODO: 获取文章列表
    pass

# 把文章列表存储到数据库中
def save_article_info(article_list, gzh_name):
    for article in article_list:
        sql = "INSERT INTO article (title, link, read_num, like_num, datetime, summary, author, gongzhonghao) VALUES (%s, %s, %s, %s, %s, %s, %s, %s);"
        params = (article.get('title'), article.get('link'), article.get('read_num'), article.get('like_num'), article.get('datetime'), article.get('summary'), article.get('author'), gzh_name)
        cursor.execute(sql, params)
        conn.commit()

# 定时执行微信公众号爬取任务
def run():
    s = check_login()
    gzh_list = get_gongzhonghao_list()
    for gzh in gzh_list:
        gzh_name, weixin_id = gzh
        article_list = get_article_list(s, weixin_id)
        save_article_info(article_list, gzh_name)


if __name__ == '__main__':
    scheduler = BlockingScheduler()
    scheduler.add_job(run, 'interval', minutes=30) # 每隔30分钟执行一次爬取任务
    scheduler.start()

总结

本文介绍了微信爬虫的实现步骤,包括模拟登陆、获取文章列表和获取文章信息等。同时,也给出了一些实际应用案例,希望对读者有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3简单实现微信爬虫 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python彻底删除文件夹及其子文件方式

    对于如何彻底删除Python中的文件夹及其子文件,我们可以采用标准库中的os模块。以下是我们的攻略步骤: 步骤一:导入模块 首先我们需要导入Python标准库中的os模块,用于文件系统相关的操作。 import os 步骤二:定义删除函数 接下来,我们可以定义一个函数delete_folder,该函数将递归地删除目标文件夹及其子文件夹和子文件。 def de…

    python 2023年6月5日
    00
  • Python-嵌套列表list的全面解析

    Python-嵌套列表list的全面解析 在Python中,列表(List)是一种常用的数据类型,它可以存储多个元素,并且这些元素可以是不同的数据类型。而嵌套列表(List)则是指在一个列表中嵌套了另一个列表,也就是说,列表中的元素是列表。本文将全面解析Python中嵌套列表(List)的使用方法,包括创建、访问、添加、删除等操作。 创建嵌套列表(List)…

    python 2023年5月12日
    00
  • Python+Xlwings 删除Excel的行和列

    下面是详细的讲解。 Python+Xlwings删除Excel的行和列 Python是一种功能强大的语言,可以帮助用户自动化许多重复性的工作,而 Excel 是广泛使用的办公软件,它提供了一个基于工作簿和工作表的视图,可以帮助您分析和呈现数据。有时我们需要在 Excel 中删除一些行和列,这时候我们可以使用 Python 和 xlwings 库来实现。 st…

    python 2023年5月13日
    00
  • python实现浪漫的烟花秀

    Python 实现浪漫的烟花秀攻略 近年来,Python 逐渐流行起来,并被应用于各种领域。其中,Python 也可以用来制作浪漫的烟花秀特效。下面是 Python 实现浪漫的烟花秀的完整攻略: 引用必要的库 在终端中输入以下命令,下载需要的库: pip3 install pygame pip3 install random 其中,pygame 是 Pyth…

    python 2023年6月3日
    00
  • 爬虫要具备的准则:

      不能犯法:       一定要遵循Robots协议:         Robots协议(爬虫协议)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。该协议是国际互联网界通行的道德规范,虽然没有写入法律,但是每一个爬虫都应该遵守这项协议。下面以淘宝网的…

    爬虫 2023年4月11日
    00
  • Python3写入文件常用方法实例分析

    Python3写入文件常用方法实例分析 在Python中,写入文件是一个非常常见的操作。我们可以使用Python内置的open()函数来打开文件,然后使用不同的方法将数据写入到文件中。在本文中,我将为大家介绍Python3写入文件的常用方法,并提供实例分析来加深对这些方法的理解。 方法一:write()函数 write()函数是Python内置的基本函数之一…

    python 2023年6月5日
    00
  • python网络爬虫 Scrapy中selenium用法详解

    Python网络爬虫Scrapy中Selenium用法详解 在进行网站爬取时,Selenium是一种常见但也非常有用的工具。本文将详细介绍如何在Scrapy中使用Selenium进行网站爬取。我们将从Selenium安装开始,一步一步向您展示如何在Scrapy项目中使用Selenium。 安装Selenium 要使用Selenium,我们首先需要安装它。使用…

    python 2023年6月7日
    00
  • python 使用turtule绘制递归图形(螺旋、二叉树、谢尔宾斯基三角形)

    Python中的turtle模块提供了一种非常有趣的方式来绘制图形。在本文中,我们将介绍如何使用turtle模块绘制三种递归图形:螺旋、二叉树和谢尔宾斯基三角形。 准备工作 在开始之前,我们需要安装turtle模块,安装方法可以通过以下命令完成: pip install turtle 在安装完成之后,我们就可以开始使用turtle模块绘制图形了。 绘制螺旋 …

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部