python 爬取微信文章

下面我来为你详细讲解“Python爬取微信文章”的攻略。

本文主要借助Python第三方库beautifulsoup4和requests实现微信公众号文章的爬取。

步骤一:获取微信公众号的历史消息链接

要想爬取微信公众号的文章,首先需要获取该公众号最新或历史消息链接,可以在微信公众平台上手动获取,或者使用第三方API获取。

步骤二:获取每篇文章的链接

通过历史消息链接可以获取公众号中已经发布的所有文章,具体可以使用beautifulsoup4解析历史消息页面,获取所有的文章链接。

import requests
from bs4 import BeautifulSoup

url = "历史消息链接"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
items = soup.find_all(class_="news-list-item")

urls = []
for item in items:
    urls.append(item.find("a")["href"])

步骤三:爬取每篇文章的内容

获取每篇文章链接后,就可以通过requests获取文章的html源代码,然后使用beautifulsoup4解析文章页面,获取文章标题、作者、发布时间、阅读量、点赞量、评论数等信息。另外,由于微信公众号的文章内容大多经过了加密处理,可以通过正则表达式匹配方式解密文章内容。

import re

url = "文章链接"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")

# 获取文章标题
title = soup.find("h2", class_="rich_media_title").get_text().strip()

# 获取文章作者和发布时间
meta_content = soup.find("div", class_="rich_media_meta_list").get_text().strip()
pattern = re.compile(r"(.*)\s+(.*)")
result = re.match(pattern, meta_content)
author = result.group(1)
publish_time = result.group(2)

# 获取文章阅读量、点赞量、评论数等信息
read_num = soup.find("span", class_="read_num").get_text().strip()
like_num = soup.find("span", class_="like_num").get_text().strip()
comment_num = soup.find("span", class_="comment_num").get_text().strip()

# 获取文章内容(解密)
content = soup.find("div", class_="rich_media_content").get_text()
pattern = re.compile(r"var\s*sg\:\s*\'(.*?)\';")
result = re.search(pattern, response.text)
if result:
    sg_data = result.group(1)
    content = decode_article(sg_data, content)

print(title, author, publish_time, read_num, like_num, comment_num, content)

其中,decode_article函数可以使用如下代码实现:

def decode_article(sg_data, encrypted_data):
    """
    解密文章内容
    :param sg_data: sg参数
    :param encrypted_data: 加密的文章内容
    :return: 解密后的文章内容
    """
    key = hashlib.md5(sg_data.encode("utf-8")).hexdigest()
    length = len(encrypted_data)
    dec = ''
    for i in range(length):
        key_c = key[i % 32]
        dec_c = chr(ord(key_c) ^ ord(encrypted_data[i]))
        dec += dec_c
    return dec

示例1:爬取“Python之禅”公众号的最新10篇文章

代码如下:

import requests
from bs4 import BeautifulSoup
import re
import hashlib

def decode_article(sg_data, encrypted_data):
    """
    解密文章内容
    :param sg_data: sg参数
    :param encrypted_data: 加密的文章内容
    :return: 解密后的文章内容
    """
    key = hashlib.md5(sg_data.encode("utf-8")).hexdigest()
    length = len(encrypted_data)
    dec = ''
    for i in range(length):
        key_c = key[i % 32]
        dec_c = chr(ord(key_c) ^ ord(encrypted_data[i]))
        dec += dec_c
    return dec

url = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzUxNjQzMTEzMg==&scene=124&#wechat_redirect"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
items = soup.find_all(class_="weui-msg")

urls = []
for item in items:
    urls.append(item.find("a")["href"])

url_prefix = "https://mp.weixin.qq.com"
articles = []
for i in range(10):
    article = {}
    url = url_prefix + urls[i]
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")

    article["title"] = soup.find("h2", class_="rich_media_title").get_text().strip()

    meta_content = soup.find("div", class_="rich_media_meta_list").get_text().strip()
    pattern = re.compile(r"(.*)\s+(.*)")
    result = re.match(pattern, meta_content)
    article["author"] = result.group(1)
    article["pub_time"] = result.group(2)

    article["read_num"] = soup.find("span", class_="read_num").get_text().strip()
    article["like_num"] = soup.find("span", class_="like_num").get_text().strip()
    article["comment_num"] = soup.find("span", class_="comment_num").get_text().strip()

    content = soup.find("div", class_="rich_media_content").get_text()
    pattern = re.compile(r"var\s*sg\:\s*\'(.*?)\';")
    result = re.search(pattern, response.text)
    if result:
        sg_data = result.group(1)
        content = decode_article(sg_data, content)

    article["content"] = content.strip()

    articles.append(article)

for article in articles:
    print(article)

示例2:爬取“骚操作 Python 课”的所有文章

代码如下:

import requests
from bs4 import BeautifulSoup
import re
import hashlib

def decode_article(sg_data, encrypted_data):
    """
    解密文章内容
    :param sg_data: sg参数
    :param encrypted_data: 加密的文章内容
    :return: 解密后的文章内容
    """
    key = hashlib.md5(sg_data.encode("utf-8")).hexdigest()
    length = len(encrypted_data)
    dec = ''
    for i in range(length):
        key_c = key[i % 32]
        dec_c = chr(ord(key_c) ^ ord(encrypted_data[i]))
        dec += dec_c
    return dec

url = "https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzA3OTk1MjU0Mw==&scene=124&#wechat_redirect"
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
items = soup.find_all(class_="weui-msg")

urls = []
for item in items:
    urls.append(item.find("a")["href"])

url_prefix = "https://mp.weixin.qq.com"
articles = []
for i in range(len(urls)):
    article = {}
    url = url_prefix + urls[i]
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")

    article["title"] = soup.find("h2", class_="rich_media_title").get_text().strip()

    meta_content = soup.find("div", class_="rich_media_meta_list").get_text().strip()
    pattern = re.compile(r"(.*)\s+(.*)")
    result = re.match(pattern, meta_content)
    article["author"] = result.group(1)
    article["pub_time"] = result.group(2)

    article["read_num"] = soup.find("span", class_="read_num").get_text().strip()
    article["like_num"] = soup.find("span", class_="like_num").get_text().strip()
    article["comment_num"] = soup.find("span", class_="comment_num").get_text().strip()

    content = soup.find("div", class_="rich_media_content").get_text()
    pattern = re.compile(r"var\s*sg\:\s*\'(.*?)\';")
    result = re.search(pattern, response.text)
    if result:
        sg_data = result.group(1)
        content = decode_article(sg_data, content)

    article["content"] = content.strip()

    articles.append(article)

for article in articles:
    print(article)

以上就是“Python爬取微信文章”的完整攻略,希望能够对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 爬取微信文章 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)

    下面是对 “Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)” 这篇文章的详细讲解。 标题 标题应该明确地说明文章的主题,因此建议使用以下标题: Python破解BiliBili滑块验证码的思路详解(完美避开人机识别) 概述 文章主要讲解如何使用 Python 破解 BiliBili 网站的滑动验证码。BiliBili 是一个流行的视…

    python 2023年6月6日
    00
  • 如何使用Python连接和操作Oracle数据库?

    在Python中,可以使用cx_Oracle模块连接和操作Oracle数据库。以下是Python使用cx_Oracle模块连接和操作Oracle数据库的完整攻略,包括连接Oracle数据库、表、插入数据、查询数据、更新数据、删除数据等操作。 连接Oracle数据库 在Python中,可以使用cx_Oracle模块连接Oracle数据库。以下是连接Oracle…

    python 2023年5月12日
    00
  • 如何使用Python连接和操作SQL Server数据库?

    在Python中,可以使用pyodbc模块连接和操作SQL Server数据库。以下是Python使用pyodbc模块连接和操作SQL Server数据库的完整攻略,包括连接SQL Server数据库、表、插入数据、查询数据更新数据、删除数据等操作。 连接SQL Server数据库 在Python中,可以使用pyodbc模块连接SQL Server数据库。以…

    python 2023年5月12日
    00
  • Python爬取视频时长场景实践示例

    Python爬取视频时长场景实践示例 在进行视频相关业务开发的过程中,有时候需要获取到视频的时长信息。而在爬取网络中的视频时长信息时,常常需要使用Python。本文将从实践角度出发,分享爬取视频时长的一些方式,在最后还附带几条相关的技巧。 方式一:使用FFmpeg获取时长 FFmpeg是一款跨平台的音视频处理工具,可以从视频文件中提取出视频时长信息。在Pyt…

    python 2023年6月2日
    00
  • 如何在python中写hive脚本

    当在 Python 中进行大数据处理时,经常需要和Hive交互,执行查询和操作。以下是在 Python 中写 Hive 脚本的步骤和示例: 1. 安装PyHive库 PyHive是Apache Hive的Python库,提供了Python连接到Hive的驱动, 安装PyHive之前需要先安装好Thrift 运行以下命令在终端中安装PyHive: pip in…

    python 2023年6月3日
    00
  • python pygame实现打砖块游戏

    让我们来详细讲解一下“Python Pygame实现打砖块游戏”的完整攻略。 准备工作 安装Python和Pygame模块。需要Python 3.x版本和相应的Pygame模块,可以通过在终端中输入”pip install pygame”安装Pygame模块。 下载打砖块素材,包括游戏背景、砖块、挡板、球等。 游戏实现 导入必要的模块。在程序代码的头部,导入…

    python 2023年6月3日
    00
  • Python 正则表达式基础知识点及实例

    Python 正则表达式基础知识点及实例 什么是正则表达式 正则表达式,也称为 regex 或 regexp,是一种用于匹配文本模式的工具,它提供了一种强大、灵活、通用的方式来查找文本中的特定模式。Python 中的正则表达式是通过 re 模块实现的。 re 模块常用函数 1. re.search() re.search() 方法用于在文本中查找匹配的子串,…

    python 2023年6月3日
    00
  • 详解Python的Twisted框架中reactor事件管理器的用法

    详解Python的Twisted框架中reactor事件管理器的用法 一、Twisted Reactor事件管理器简介 Twisted是一个开源Python网络编程框架,它使用事件驱动的方式实现异步I/O,允许程序员通过异步编程模型来处理多个并发操作,它提供了多条并发流程,常用协议的实现以及支持标准进程通信。 Twisted框架中,reactor是一个事件管…

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