社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

视频下载器你知道吧?那你听说过文章下载器吗?Python来实现!

Python学习交流 • 5 年前 • 450 次点击  


进群:548377875   即可获取数十套PDF哦!还有源码呢!

工具需求:

输入:给定公众号ID,和用户需要获取的公众号文章目录页码数(小于已发布最大收录页数)

( 输出Ⅰ:每个公众号历史文章信息csv文件(链接+标题)

输出Ⅱ: wkhtmltopdf和pdfkit将html转换成PDF文件或者图片文件(初稿)

现有方案

之前在网上也搜索了些爬取微信公众号的资料,大概有如下几种

selenium爬取流程

  1. 安装python selenium自动模块,通过selenium中的webdriver驱动浏览器获取Cookie登录微信公众号后台;

  2. 使用webdriver功能需要安装对应浏览器的驱动插件

  3. 注意:谷歌浏览器版本和chromedriver需要对应,否则会导致启动时报错。

  4. 微信公众号登陆地址:https://mp.weixin.qq.com/

  5. 微信公众号文章接口地址可以在微信公众号后台中新建图文消息,超链接功能中获取:

  6. 搜索公众号名称

  7. 获取要爬取的公众号的fakeid

  8. 选定要爬取的公众号,获取文章接口地址

  9. 文章列表翻页及内容获取

AnyProxy代理批量采集


Fiddler设置代理和抓包

通过对多个账号进行抓包分析,可以确定:

  • _biz:这个14位的字符串是每个公众号的“id”,搜狗的微信平台可以获得

  • uin:与访问者有关,微信号id

  • key:和所访问的公众号有关

步骤:

1,写按键精灵脚本,在手机上自动点击公号文章列表页,也就是“查看历史消息”;

2,使用fiddler代理劫持手机端的访问,将网址转发到本地用php写的网页;

3,在php网页上将接收到的网址备份到数据库;

4,用python从数据库取出网址,然后进行正常的爬取。

可能存在的问题:

如果只是想爬取文章内容,似乎并没有访问频率限制,但如果想抓取阅读数、点赞数,超过一定频率后,返回就会变为空值。

付费平台

例如清博 新榜,如果只是想看数据的话,直接看每天的榜单就可以了,还不用花钱,如果需要接入自己的系统的话,他们也提供api接口

3项目步骤

3.1基本原理

目标爬取网站收录了微信平台大部分的优质微信公众号文章,会定期更新,经测试发现对爬虫较为友好。

1、网站页面布局排版规律,不同公众号通过http://chuansong.me/account/almosthuman2014链接中的account区分

2、一个公众号合集下的文章翻页也有规律:id号每翻一页+12

所以流程思路就是

  • 获取预查询微信公众号ID(不是直接显示的名称,而是信息名片里的ID号,一般由数字字母组成)

  • 请求html页面,判断是否已经收录改公众号

  • 如果没有收录,则页面显示结果为:404该页面不存在,所以直接使用正则表达式来匹配该提示信息即可

  • 正则匹配,找到目标公众号最大收录文章页数

  • 解析请求页面,提取文章链接和标题文字

  • 保存信息提取的结果

  • 调用pdfkit和wkhtmltopdf转换网页



3.5自动跳转页面

以下代码通过循环递增赋值,改变url中的页码参数


3.8生成的PDF结果


4结果展示








5 完整代码

由于考虑到转pdf的稳定性,我在发布版的代码中没有加转PDF的函数。预留了一个粗糙的py源文件,如果感兴趣,读者可以在此基础上自行调整修改。

源码就单独私信,我一个个给你们发!



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/HcpXaabJ8V
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/23845
 
450 次点击