Python 爬虫之微信公众号

Python 爬虫之微信公众号

源代码放在文末。

本次爬虫需要的工具如下:

在 2017 年 6 月左右,微信官方发布一篇文章 https://mp.weixin.qq.com/s/67sk-uKz9Ct4niT-f4u1KA,大致意思就是以后发布文章的时候可以插入其他公众号的文章。由此,我们即可获得采集文章的接口。

一、登陆微信公众号

在这里,我们使用 selenium + chromedriver(chrome 的 webdriver) 的方式来获取登陆的 cookie,这样,以后爬取文章时只需要载入 cookie 即可登陆。首先我们打开微信公众平台进行账号登陆:
1
我们用 insepect 检查获取登陆的账号、密码元素所在位置,来实现自动化登陆的目的 。

2

转化成代码如下:

# 用webdriver启动谷歌浏览器
print("启动浏览器,打开微信公众号登录界面")
driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver') 
# 此处 webdriver 根据自己的环境更改
# 打开微信公众号登录页面
driver.get('https://mp.weixin.qq.com/')
# 等待5秒钟
time.sleep(5)
print("正在输入微信公众号登录账号和密码......")

#清空账号框中的内容
driver.find_element_by_name("account").clear()
#自动填入登录用户名
driver.find_element_by_name("account").send_keys("输入你的公众号账号")
#清空密码框中的内容
driver.find_element_by_name("password").clear()
#自动填入登录密码
driver.find_element_by_name("password").send_keys("输入公众号密码")

# 在自动输完密码之后需要手动点一下记住我
print("请在登录界面点击:记住账号")
time.sleep(5)
#自动点击登录按钮进行登录
driver.find_element_by_class_name("btn_login").click()
# 拿手机扫二维码!
print("请拿手机扫码二维码登录公众号")
time.sleep(20)
print("登录成功")

之后,我们需要重新登陆一次,保存 cookie,以后则载入 cookie 即可,不需要再扫码登陆。代码如下:

# 定义一个空的字典,存放cookies内容
post = {
    
    }

driver.get('https://mp.weixin.qq.com/')
# 获取cookies
cookie_items = driver.get_cookies()

# 获取到的cookies是列表形式,将cookies转成json形式并存入本地名为cookie的文本中
for cookie_item in cookie_items:
	post[cookie_item['name']] = cookie_item['value']
cookie_str = json.dumps(post)
with open('cookie.txt', 'w+', encoding='utf-8') as f:
	f.write(cookie_str)
print("cookies信息已保存到本地")   

之后我们开始文章的爬取。

二、爬取文章

根据官方描述,接口应该藏在新建图文素材中的插入超链接中,和之前爬取币乎一样,我们用 F12-Network-XHR 来跟踪这几个页面来获取我们需要配置的请求:
3

4

5

接下来,我们来配置请求参数:

#公众号主页
url = 'https://mp.weixin.qq.com'
#设置headers
header = {
    
    
    "HOST": "mp.weixin.qq.com",
    "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:53.0) Gecko/20100101 Firefox/53.0"
}

#读取上一步获取到的cookies
with 
### 使用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编写的简单版微信公众号文章抓取器的主要组成部分。需要注意的是实际开发过程中还需要考虑更多细节如异常处理、反爬策略应对等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值