微信爬取公众号评论

大家平常都喜欢看公众号的文章,但是仅仅是文章内容又不足以使我们更好的参与与作者的互动,于是我找了一篇公众号的最新文章评论进行爬取分析。
这是效果图:
词云图

结尾有彩蛋欧…

废话不多说,现在开始跟我来实现这个充满黑科技的词云图把!!!
源代码下载链接

环境

首先我利用的是Python的requests库来模拟请求,如果没有下载的同学就请打开cmd,如果你已经对Anaconda配置过环境变量了,就直接输入以下命令:
pip install requests
这里写图片描述
现在我们开始来准备编写代码
我们打开Jupyter Notebook
Ps:当然你也可以用Spyder,如何使用请看我上面的那篇Anaconda的安装博客

在你配置了Anaconda的环境变量的前提下,你打开cmd,在命令框中输入命令
jupyter notebook
就会运行如图所示:
jupyter notebook
然后就会自动打开一个浏览器页面,如图所示:
首页
每个人的默认工作路径是C盘的用户目录下
然后新建一个文件(点击右上角的New后选择Python3)
新建
创建成功后进入如图所示:
这里写图片描述
现在我们就开始码代码啦
首先我们要导入我们所需要用到的库
1
第二步就是通过抓包工具分析公众号评论的请求链接(url)和请求头(headers)
这里我使用的是Fiddler工具,具体安装使用请参考我的另一篇博客Fiddler的安装与使用

我们在配置好Fiddler后打开手机微信,找到你所想要的文章并打开,这里我显示的是我所分析的那一篇推文
然后你就首先根据Host查找到属于微信的mp.weixin.qq.com这个主机所对应的一系列请求
一个一个点开(因为第一次分析你也不知道哪个请求对应的是评论)然后思路是找到响应内容最多的那个。
经过漫长的寻找我们找到了这个请求(抓包是一个很繁琐的过程,因为你需要准确定位到你所需要查找的那个请求,所以大家在学习的过程中需要耐心一点)
抓包
还有如果你得到的响应内容是乱码,那么你需选中你找到的那个请求右键选择Decode…
decode
这样就解码成功啦
当然不要高兴的太早,在这里你还需要将这个请求的url和headers复制到粘贴板中,因为我们的代码需要它们。

首先我们来看一下requests库里面的get方法

requests.get(url, params=None, **kwargs)

从表达式这里看出url是必须要有的,还有其它的比较重要的参数例如headerstimeout
将我们粘贴板中的url和headers复制到代码中,如图
url
这里写图片描述
链接(url)直接复制上去赋值给url就行了,但是headers需要做一下进一步的处理,这里我就不解释里面各参数的含义了,经测试发现只有Cookie是需要加上去的,连User-Agent都不用,这里我解释一下为什么,因为这里我们其实访问的是一个评论接口,而接口一般对爬虫的UA是没有做反爬处理的,所以最后我们保留Cookie一行加进headers字典里面就行了。
这里写图片描述
然后第一个难点抓包(分析请求)搞定了,接下的难点来就是处理响应内容了。
当然首先我们向服务器发出请求
发出请求
最终我们得到了一个字典类型的数据,然后我们观察一下字典的结构
结构
得到大概结构以后我们来迭代输出每一行评论信息,并把评论内容存储到字符串里面(倒数第一行代码是在做结巴分词,后面那个参数5指的是返回切分后权重值最高的5个词组)

这里看起来是比较繁琐,其实就是根据列表字典结构的特性根据索引或者关键字来取值,这一步最关键的是要理清返回内容的结构结巴分词只是调用api而已。
解析
词组
看到了排列整齐的评论,你离成功只差个词云图,接下来就是词云图的制作,这里主要用了
词云库:wordcloud
画图的库:matplotlib.pyplot
如果你没有安装wordcloud库,建议去官网下载wordcloud的whl文件本地安装(踩过的坑,默默不说话)
代码如下:
词云
大概讲一下流程,先读取背景图片1.png,然后通过WordCloud来设置相应的参数。
这里注意一点,因为WordCloud里面默认的语言是英语,所以你需要往里面加载一个简体中文的字体,一般Windows10自带的有的,你文件搜索一下,改一下路径,如果没找到就去网上下载一个。

接着读取字符串Comments(已经分词过了),为了以后方便查看把图片存储下来。

最后就是画图了,其实你不画找到存好的文件打开也是可以的,但是程序员能这样吗!!!
不能,能用代码实现的我就不用其他方法。
这里我们用的是数据分析流行的画图库matplotlib
将wc传进去imshow方法,设定一下插值的参数为bilinear
设置off参数不显示难看的坐标轴
最后大功告成,你也做了一张充满黑科技感的词云图啦。
这里写图片描述
是不是在找彩蛋在哪,不要慌,就是下面那狗,皮一下。
巴扎黑

我的个人博客网站是:www.coderyyn.cn
上面会不定期分享有关爬虫、算法、环境搭建以及有趣的帖子
欢迎大家一起交流学习

转载请注明

### 如何使用Python爬虫抓取微信公众号文章的用户评论数据 为了实现这一目标,可以借鉴开源项目`weixin_crawler`的设计思路[^1]。该项目不仅涵盖了对微信公众号文章本身的信息采集,还涉及到了诸如阅读量、点赞量以及评论量等互动指标的数据收集。 #### 数据获取方式 由于直接从微信公众平台API获取公开接口较为困难,通常的做法是从第三方搜索引擎如搜狗微信搜索页面入手。值得注意的是,部分链接可能具备时效性,但通过特定技术手段仍能解析出永久有效的URL[^2]。对于评论区的内容提取,则需进一步处理HTML文档结构中的JavaScript动态加载部分。 #### 技术栈选择 考虑到项目的复杂度和技术挑战,在构建此类应用时推荐采用如下工具组合: - **Scrapy**: 作为核心爬虫框架负责发起HTTP请求并解析响应内容; - **Selenium/Playwright**: 针对抗JS渲染的问题,选用这类浏览器自动化库模拟真实用户的浏览行为来触发页面上的异步事件从而捕获完整的DOM树; - **BeautifulSoup/lxml**: 解析静态或经由上述方法转换后的HTML片段定位到具体的评论节点; ```python import scrapy from selenium import webdriver from bs4 import BeautifulSoup class WeChatSpider(scrapy.Spider): name = "wechat_comments" start_urls = ['https://example.com/article'] def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) options = webdriver.ChromeOptions() options.add_argument('--headless') # 设置无头模式 self.driver = webdriver.Chrome(options=options) def parse(self, response): self.driver.get(response.url) soup = BeautifulSoup(self.driver.page_source,'html.parser') comments_section = soup.find('div', class_='comments-section') for comment in comments_section.find_all('li'): yield { 'author': comment.select_one('.comment-author').text.strip(), 'content': comment.select_one('.comment-content').text.strip(), 'timestamp': comment.select_one('.comment-timestamp')['datetime'] } def closed(self, reason): self.driver.quit() # 关闭webdriver实例释放资源 ``` 此段代码展示了基于Scrapy与Selenium集成的方式来进行初步探索。需要注意的是,实际部署前还需考虑更多细节优化,比如异常处理机制、代理池配置防止IP封禁等问题。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值