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项目–使用Tkinter的日历GUI应用程序

    首先,我们需要安装Python和Tkinter库,安装过程可以参考官方文档。 接下来,我们开始创建日历GUI应用程序。以下是完整的攻略: 1. 需求分析 日历是我们生活中常用的工具,我们要开发一个日历GUI应用程序,需满足以下要求: 根据用户选择的年份和月份,显示该月份的日历; 能够显示农历信息; 支持用户点击日期,显示该日期的详细信息。 2. 设计思路 为…

    python 2023年6月3日
    00
  • 详解python读取image

    下面我将为你详细讲解如何使用Python读取image文件。 什么是Image文件 Image文件指的是各种图片格式的文件。常见的图片格式包括jpg、png、bmp等。 Python读取Image文件的库 Python中有很多第三方库可以用来读取Image文件,比如Pillow、OpenCV、matplotlib等。 其中Pillow的用法比较简单,且易于使…

    python 2023年5月18日
    00
  • 基于python实现计算且附带进度条代码实例

    下面是基于 Python 实现计算且附带进度条的完整攻略。 1. 文字说明 1.1 功能简介 本攻略将通过 Python 代码实现计算的功能,并添加进度条以改善用户体验。 1.2 实现思路 首先,我们需要安装进度条库 tqdm,可以通过以下命令在命令行中安装: pip install tqdm 然后,我们需要使用 Python 的循环语句进行计算,并在循环语…

    python 2023年6月3日
    00
  • 3种适用于Python的疯狂秘密武器及原因解析

    3种适用于Python的疯狂秘密武器及原因解析 Python 作为当下最流行的编程语言之一,提供了很多标准库和第三方库来帮助开发者更加高效地编写程序。然而,除了这些基础的库之外,还有一些不太被人们熟知的库,它们在某些特定的应用场景下会成为Python程序员的疯狂秘密武器。本文就来讲解一下这些库及它们的应用场景。 1. Numba Numba 是一款用于Pyt…

    python 2023年6月5日
    00
  • python+pygame简单画板实现代码实例

    下面是详细讲解“python+pygame简单画板实现代码实例”的完整攻略。 一、准备工作 1.1 安装pygame库 pip install pygame 二、代码实现 2.1 导入必要的库和常量 import pygame from pygame.locals import * BLACK = ( 0, 0, 0) WHITE = ( 255, 255,…

    python 2023年5月19日
    00
  • python–pip–安装超时的解决方案

    Python 是目前最流行的编程语言之一,它在数据科学、Web 开发和自动化测试等领域都有着重要的应用。pip 是 Python 的包管理器,它用于安装、升级和管理 Python 的各类库、框架等资源。然而,由于 pip 下载资源的过程经常会出现网络不稳定,甚至安装超时的问题,这就需要我们采取一些解决方案来解决这个问题。 问题描述 如果你使用 pip 安装 …

    python 2023年5月14日
    00
  • python3 实现除法结果为整数

    要让Python3实现除法结果为整数,有以下两种方法: 方法一:整除符号 // 当两个整数相除时,使用整除符号 // 可以得到整除的结果。 示例1:求 $10$ 除以 $3$ 的结果(整除)。 result = 10 // 3 print(result) 输出结果为: 3 示例2:求 $4$ 除以 $2$ 的结果(整除)。 result = 4 // 2 p…

    python 2023年6月5日
    00
  • Python argv用法详解

    Python argv用法详解 在Python中,可以使用sys.argv模块接受命令行传递的参数。这个模块在一个Python程序中非常有用,因为可以轻松地将参数传递给脚本,并在脚本中使用这些参数。 简介 sys.argv是一个包含命令行参数的列表。命令行参数包括传递给程序的参数以及程序本身的名称。注意,这个列表的第一个元素是脚本的名称。 用法 下面是一个简…

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