千家信息网

Python中怎么爬取微信公众号文章

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,今天就跟大家聊聊有关Python中怎么爬取微信公众号文章,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Selenium介绍Selenium是一
千家信息网最后更新 2025年12月02日Python中怎么爬取微信公众号文章

今天就跟大家聊聊有关Python中怎么爬取微信公众号文章,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

Selenium介绍

Selenium是一个用于web应用程序自动化测试的工具,直接运行在浏览器当中,可以通过代码控制与页面上元素进行交互,并获取对应的信息。Selenium很大的一个优点是:不需要复杂地构造请求,访问参数跟使用浏览器的正常用户一模一样,访问行为也相对更像正常用户,不容易被反爬虫策略命中,所见即所得。而且在抓取的过程中,必要时还可人工干预(比如登录、输入验证码等)。

Selenium常常是面对一个严格反爬网站无从入手时的保留武器。当然也有缺点:操作均需要等待页面加载完毕后才可以继续进行,所以速度要慢,效率不高(某些情况下使用headless和无图模式会提高一点效率)。

需求分析和代码实现

需求很明确:获取一个公众号全部推文的标题日期链接。微信自身的推文功能只能通过其App查看,对App的抓取比较复杂。有一个很方便的替代途径就是通过搜狗微信检索。不过如果直接使用Requests等库直接请求,会涉及的反爬措施有cookie设置,js加密等等,所以今天就利用Selenium大法!

首先导入所需的库和实例化浏览器对象:

from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWait# 导入第2-4行是为了马上会提到的 显式等待import timeimport datetimedriver = webdriver.Chrome()driver.get('https://weixin.sogou.com/')

上述的代码就可以实现打开搜狗微信搜索的操作,接下来需要往搜索框里输入文字,并且点击"搜文章"(不直接点搜公众号是因为已经取消通过公众号直接获取相应文章的功能)

wait = WebDriverWait(driver, 10)input = wait.until(EC.presence_of_element_located((By.NAME, 'query')))input.send_keys('早起Python')driver.find_element_by_xpath("//input[@class='swz']").click()

逻辑是设定最长等待时间,在10s内发现了输入框已经加载出来后就输入公众号名称,这里我们以"早起Python"为例,并且根据"搜文章"按钮的xpath获取该位置并点击,这里就用到了显式等待。Selenium请求网页等待响应受到网速牵制,如果元素未加载全而代码执行过快就会意外报错而终止,解决方式是等待

隐式等待是在尝试发现某个元素的时候,如果没能立刻发现,就等待固定长度的时间driver.implicitly_wait(10),显示等待明确了等待条件,只有该条件触发,才执行后续代码,如这里我用到的代码,当然也可以用time模块之间设定睡眠时间,睡完了再运行后续代码。

另外只能获取前10页100条的结果,查看后续页面需要微信扫码登录:

因此从这里开始,代码的执行逻辑为:

  • 第10页遍历完成后自动点击登录,此时需要人工介入,扫码完成登录

  • 代码检测登录是否完成(可以简化为识别"下一页"按钮是否出现),如果登录完成则继续从11页遍历到最后一页(没有"下一页"按钮)

由于涉及两次遍历则可以将解析信息包装成函数:

num = 0def get_news():    global num # 放全局变量是为了给符合条件的文章记序    time.sleep(1)    news_lst = driver.find_elements_by_xpath("//li[contains(@id,'sogou_vr_11002601_box')]")    for news in news_lst:        # 获取公众号来源        source = news.find_elements_by_xpath('div[2]/div/a')[0].text        if '早起' not in source:            continue        num += 1        # 获取文章标题        title = news.find_elements_by_xpath('div[2]/h4/a')[0].text        # 获取文章发表日期        date = news.find_elements_by_xpath('div[2]/div/span')[0].text        # 文章发表的日期如果较近可能会显示"1天前" "12小时前" "30分钟前"        # 这里可以用`datetime`模块根据时间差求出具体时间        # 然后解析为`YYYY-MM-DD`格式        if '前' in date:            today = datetime.datetime.today()            if '天' in date:                delta = datetime.timedelta(days=int(date[0]))            elif '小时' in date:                delta = datetime.timedelta(hours=int(date.replace('小时前', ' ')))            else:                delta = datetime.timedelta(minutes=int(date.replace('分钟前', ' ')))            date = str((today - delta).strftime('%Y-%m-%d'))        date = datetime.datetime.strptime(date, '%Y-%m-%d').strftime('%Y-%m-%d')        # 获取url        url = news.find_elements_by_xpath('div[2]/h4/a')[0].get_attribute('href')        print(num, title, date)        print(url)        print('-' * 10)for i in range(10):    get_news()    if i == 9:        # 如果遍历到第十页则跳出循环不需要点击"下一页"        break    driver.find_element_by_id("sogou_next").click()

接下来就是点击"登录",然后人工完成扫码,可以利用while True检测登录是否成功,是否出现了下一页按钮,如果出现则跳出循环,点击"下一页"按钮并继续后面的代码,否则睡3秒后重复检测:

driver.find_element_by_name('top_login').click()while True:    try:        next_page = driver.find_element_by_id("sogou_next")        break    except:        time.sleep(3)next_page.click()

效果如图:

然后就是重新遍历文章了,由于不知道最后一页是第几页可以使用while循环反复调用解析页面的函数半点击"下一页",如果不存在下一页则结束循环:

while True:    get_news()    try:        driver.find_element_by_id("sogou_next").click()    except:        break# 最后退出浏览器即可driver.quit()

看完上述内容,你们对Python中怎么爬取微信公众号文章有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。

文章 代码 登录 公众 按钮 时间 浏览器 页面 循环 浏览 输入 人工 元素 内容 小时 就是 日期 条件 检测 复杂 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 男爵领域的服务器在哪里 惠山区品牌软件开发系统 示范区网络安全攻防 数据库一般在哪里设计最好 御龙在天手游服务器更新 去哪儿搜索酒店 服务器错误 IMS的新数据库DDD分级 电脑服务器开机时间 查看数据库表容量大小 杭州快门网络技术有限公 亚信网络安全产业技术研究院 软件开发实训室效果图 云南提供软件开发零售价格 汕头自主可控软件开发优化价格 网站服务器过期了怎么解决 指定数据库中的表插入数据 新型网络安全市场报告 电脑显示无法查看服务器属性 高级网络技术华为练习题答案 数据库 存储过程是什么 小学生网络安全主题班会串词 梦幻之都服务器 装数据库提示账户 网络安全判断题及答案解析 互联网与科技融合的应用 培训机构的软件开发费用 联运服务器 公众号怎么调用本地数据库 数据库技术事务日志 苏州誉美网络技术有限公司
0