首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Python爬取公号文章(上)

第一时间获取 Python 技术干货!

阅读文本大概需要 10 分钟。

01

抓取目标

场景:有时候我们想爬取某个大 V 的发布的全部的文章进行学习或者分析。

这个爬虫任务我们需要借助「Charles」这个抓包工具,设置好手机代理 IP 去请求某个页面,通过分析,模拟请求,获取到实际的数据。

我们要爬取文章的作者、文章标题、封面图、推送时间、文件内容、阅读量、点赞数、评论数、文章实际链接等数据,最后要把数据存储到「MongoDB」数据库中。

02

准备工作

首先,在 PC 上下载 Charles,并获取本地的 IP 地址。

然后,手机连上同一个网段,并手动设置代理 IP,端口号默认填 8888 。最后配置 PC 和手机上的证书及 SSL Proxying,保证能顺利地抓到 HTTPS 的请求。具体的方法可以参考下面的文章。

「https://www.jianshu.com/p/595e8b556a60?from=timeline&isappinstalled=0」

03

爬取思路

继续往下滚动页面,可以加载到下一页的数据,同样可以获取到请求和响应的数据。

爬取的数据最后要保存在 MongoDB 文档型数据库中,所以不需要建立数据模型,只需要安装软件和开启服务就可以了。MongoDB 的使用教程可以参考下面的链接:

「https://www.jianshu.com/p/4c5deb1b7e7c」

为了操作 MongoDB 数据库,这里使用「MongoEngine」这个类似于关系型数据库中的 ORM 框架来方便我们处理数据。

04

代码实现

从上面的分析中可以知道首页消息、更多页面消息的请求 URL 规律如下:

可以通过把offset设置为可变数据,请求所有页面的数据 URL可以写成下面的方式:

最后通过 requests 去模拟发送请求。

通过 Charles 返回的数据格式可以得知消息列表的数据存储在 general_msg_list 这个 Key 下面。因此可以需要拿到数据后进行解析操作。

has_next_page字段可以判断是否存在下一页的数据;如果有下一页的数据,可以继续爬取,否则终止爬虫程序。

ps:由于 Wx 反爬做的很完善,所以尽量降低爬取的速度。

由于获取到的列表数据是一个字符串,需要通过json库去解析,获取有用的数据。

最后一步是将数据保存保存到 MongoDB 数据库中。

首先要创建一个Model保存我们需要的数据。

使用命令行开启数据库服务,然后就可以往数据库写入数据了。

05

爬取结果

推荐使用工具 Robo3T 连接 MongoDB 数据库,可以查看到公号文章数据已经全部保存到数据库中。

如果你觉得文章还不错,请大家点赞分享下。你的肯定是我最大的鼓励和支持。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181228G0SHLU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券