推广 热搜: page  音视频  使用  个数  选择  搜索引擎  父亲  百度  企业  可以 

使用python爬取微信公众号文章

   日期:2024-12-20     作者:lh7hd    caijiyuan   评论:0    移动:http://ww.kub2b.com/mobile/news/8736.html
核心提示:突然开始关注爬虫,是因为喜欢上了一位作者,想要把他互联网上发表的所有文章和博文都收藏起来,方便自己阅读和分析,同时避免将
突然开始关注爬虫,是因为喜欢上了一位作者,想要把他互联网上发表的所有文章和博文都收藏起来,方便自己阅读和分析,同时避免将来哪一天因为不可抗力无法查看(最近很喜欢的一位作者被全网炸号了,所有文章都没了,好可惜),

所以本次爬虫的目标很简单:

1. 获取公众号所有文章的标题和正文

2. 获取所有文章的发表时间

3. 获取所有文章的链接

4. 获取文章的评论(可选)

5. 获取到的文章与原文一致,最好文章可编辑,文中图片正常,文内链接可跳转

6. 分析文章并重新排版(待定,目前还没准备好分析的要点)

想要实现的功能没有涉及数据分析,所以操作还是很简单的

1. 准备一个微信个人公众号

2. 电脑已安装python

3. 代码执行时,部分模块需要安装,安装语句:pip install 包名

  • wechatsogou    抓取公众号文章库,安装这个包会把oupsieve, beautifulsoup4, Pillow, lxml, future, bs4包也安装了
  • Werkzeug    WSGI⼯具库, 如Client类,EnvironBuilder类,debugg工具,这个库默认存在的,但是1.0.1版本的werkzeug.contrib已经被移除了,所以我们要卸载原版本,并安装更高的版本

            步骤:pip3 uninstall Werkzeug
               pip3 install Werkzeug==0.11.15 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

  • pdfkit            用于Node和浏览器的PDF文档生成库
  • wkhtmltopdf  可以将html文件转化成pdf文件,需要先下载wkhtmltopdf命令行工具,根据自己的电脑型号下载,下载地址:https://wkhtmltopdf.org/downloads.html

          下载后解压并安装,记录下安装路径

原因

由于我们查看的微信公众号的文章链接都是随机生成的,如果在前端想要获取往期推送的所有文章,就需要手动点开一个个复制,非常麻烦,所以我们用一个网上常规的方法,准备一个个人公众号,后台获取长期链接

获取步骤:

1)登录个人公众号,点击草稿箱》新的创作》写新图文》点击超链接

2)选择需要抓取的公众号,按F12获取一个开头为“appmsg”开头的url

3)解析该url

https://mp.weixin.qq.com/cgi-bin/appmsg 请求的基础部分

?action=list_ex 常用于动态网站,实现不同的参数值而生成不同的页面或者返回不同的结果

&begin=0&count=5&fakeid=MzIwMTIzNDMwNA==&type=9&query=&token=318406675&lang=zh_CN&f=json&ajax=1 设置参数

4)设置url

count:一次请求返回的个数

begin:当前请求的页数,当begin为0时,请求后返回最新的5篇文章

只有url是无法访问的,因为我们获取url时是登录了个人公众号的,直接用python访问是未登录的,所以我们还得获取请求头。

1)新建一个yaml文件,存入我们公众号的标识符以及参数

 2)解析yaml文件

接口访问需要的内容我们准备好了,接下来我们先试下单个接口抓取公众号最新文章,看下准备的数据是否正确,同时看下接口的返回值,找出我们需要的内容

操作步骤:

1)进入cmd页面,输入python进入python编译器

2)  导入requests 模块,执行gel接口,接口里的cookie和agent信息是上面步骤1.2获取的,需要自己手动填入,下图可以看出我们抓取成功了

解析json返回值

下图是接口的返回信息,可以看出对我们有用的信息有:文章id,文章创建时间,文章链接,文章标题

现在我们已经准备好接口了,开始抓取公众号所有文章,由于不知道公众号具体有多少文章,所以采用循环的方式抓取,直到所有文章抓取完成。同时代码还实现了跳过之前已抓取部分,但是仍有很多不合理的地方,比如在公众号发了新文后,就会有少量重复数据,以及之前抓取过的话,会导致最新文章抓不到,等等。因为这个写的比较简易,大家可以自行优化。

附上代码:

从前面步骤2.1可以知道,接口的返回结果中,我们有用的只有文章id,文章标题,文章创建时间,文章链接,我们可以把步骤2.2的代码优化下,将接口返回的这些数据提取出来,写入csv文件中。

附上代码:

可将如下代码插叙步骤2.2的代码中

 

输出结果如下图:

到这里,我们现在就还差正文信息了,而这才是我最想要的内容,但是使用python直接访问url的话获取到的内容并不是我们想要的文章内容,而是html文件,所以在这一步我试了几种方法去实现,一开始想的是存储文章的图片到csv中,方便查看,但是最终放弃了,使用了下方的第4种。

1)第一种:使用正则。通过正则在html中筛选出自己要的内容,这个太麻烦了,还得自己对文章排版,直接pass了

2)  第二种:使用BeautifulSoup库。 BeautifulSoup库的解析数据功能强大,可以通过直接获取文本,这个我用了后发现它提取出了很多页面的多余字符,比如点赞,收藏等,而且只有文本,要想插入其他信息还得根据标签提取,太麻烦了。写了段简单的代码测试功能,这个用来处理纯文本还是很方便的。所以该方案也被pass了

 

想要学习该方法的可以看下这个链接:https://blog.csdn.net/weixin_54852327/article/details/115916146

 

3)第三种:使用selenium截图搭配PIL处理图片。selenium截取图片很方便,这种方式可以原生态的保留文章信息,缺点是无法编辑。顺便处理了下长文章截图不全问题,属于我的备选方案。

附上代码:

 

4)第四种:使用pdfkit。直接将url处理成pdf文档,该方法简单方便,转换的pdf文档内容与原文章排版一致,文档内容可以自行加批注,文内链接也可点击,还可以自己设置标题和正文,推荐使用。

使用该方法的时候,我发现如果直接用的话,会显示不了文章中的图片,所以优化了下代码。

附上代码:

 

到了这里,我们整个流程就结束了,还剩下一些优化,比如pdf合并,pdf文档排版优化,日志打印,以及代码模块化等等,大家可以自行优化。

 

本文地址:http://ww.kub2b.com/news/8736.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新文章
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新文章
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号