2025 年可用的Python抓取微信公众号文章方法

目的

        目的是抓取指定公众号的文章和评论,希望程序能跨平台,尽量不实用依赖 mac 和 win 这种本地库的 python 代码。

方案

        这篇文章写作于2025 年

        微信已经反爬很多年了,可能的方案如下

❌ 1. 搜狗那套早就不更新了 

❌ 2. 直接 request 接口,微信各种认证,一开始就搞不定

❌ 3. 基于 selenium 的各种浏览器自动化,如何拿到http接口呢?

❌ 4. 基于 https 代理,比如 mitmproxy 的方案,微信的文章内容和评论不走 https 了,根本抓不到包(基于 mitmproxy 我确实没看到微信流量,如果有这种方法,欢迎留言告知,微信也行 j@ckflit@替换为 a)

✅ 5. RPA 方案,比如 pyautogui,模拟用户操作,抓取文字,理论上万能,实际也只能这样

✅6. 高级 RPA 方案,基于系统依赖的底层 API,找到窗口,辅助访问等接口,有方案 5 搞不定又必须得再考虑这个,或者确定用某个平台也可以 

流程

pg(pyautogui的简称)搜索指定公众号,打开公众号文章列表

列表页根据文章 item 的左上角图像,找到位置,然后判断是否重复,合理,如果合理,则抓取文章页

文章页抓取文章标题,内容,评论,链接(链接可以用于排重,浏览器可以打开,但是只有内容,没有评论,评论只能在微信内部看)

难点

1. 定位位置用locateOnScreen,这个函数,相关参数是基于物理分辨率的,比如 mac,可能物理分辨率是 3000,逻辑分辨率是 1500,这里要注意。比如 mac 下,这个函数的返回值要除以 2,输入的图像是基于物理分辨率的,坐标也是要 X2,请注意系统默认的截图快捷键截取的就是基于物理分辨率的截图,pg 的 screenshot 返回的可能是基于逻辑分辨率的,这块需要先做好测试,理解好。

2. locateOnScreen 的返回值,可能是错的,可能有一点偏差,这种细节要处理,实在不放心,自己手搓一个函数

3. 文章页,评论啥的要兼容各种情况,评论里有多层,需要点开

4. pg 的 scroll,press,hotkey 得仔细测试,可能有各种跟你预想不一样的情况,需要自己摸索

### 使用Python实现微信公众号内容的网络爬虫 为了构建一个能够抓取微信公众号内容的网络爬虫,可以采用多种方法和技术栈组合。考虑到目标网站可能具有复杂的JavaScript渲染机制,`Selenium`是一个不错的选择[^3]。 #### 导入必要的库 首先安装并导入所需的库: ```bash pip install selenium requests lxml beautifulsoup4 webdriver_manager ``` 接着,在脚本中引入这些模块: ```python from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.service import Service as ChromeService from webdriver_manager.chrome import ChromeDriverManager import time ``` #### 初始化浏览器实例 创建一个函数用于初始化Chrome WebDriver实例,并设置一些基本参数: ```python def init_driver(): options = webdriver.ChromeOptions() options.add_argument('--headless') # 设置无头模式运行 driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()), options=options) return driver ``` #### 访问页面并获取数据 定义另一个函数负责访问指定URL以及提取所需的数据: ```python def fetch_wechat_articles(driver, public_account_name): base_url = "https://weixin.sogou.com/weixin" params = { 'query': public_account_name, '_sug_type_': '', 'sut': '', 'lkt': '', 'page': 1, 'ie': 'utf8', 'type': 1 } search_query = f"{base_url}?{urllib.parse.urlencode(params)}" driver.get(search_query) try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, "news-list")) ) articles = [] items = element.find_elements(By.CSS_SELECTOR, ".txt-box h3 a") for item in items[:5]: # 只取前五篇文章链接为例 title = item.text.strip() link = item.get_attribute('href') articles.append({"title": title, "link": link}) return articles except Exception as e: print(f"Error occurred while fetching articles: {e}") return None ``` 此部分代码通过模拟搜索引擎查询特定公众号名称的方式找到对应的文章列表页,并从中解析出每篇推文的具体链接地址。 #### 处理HTML实体字符转义问题 当处理从网页上抓取下来的文本时,可能会遇到HTML实体编码的问题。对于这个问题,建议使用`html`标准库中的unescape方法替代已经过时的方法[^4]: ```python import html escaped_text = "<p>This is an example.</p>" unescaped_text = html.unescape(escaped_text) print(unescaped_text) # 输出:<p>This is an example.</p> ``` 以上就是利用Python编写的简单版微信公众号文章抓取器的主要组成部分。需要注意的是实际开发过程中还需要考虑更多细节如异常处理、反爬策略应对等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值