前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用Python抓取某大V的公众号文章

用Python抓取某大V的公众号文章

作者头像
龙哥
发布2018-10-22 14:07:12
2.3K0
发布2018-10-22 14:07:12
举报
文章被收录于专栏:Python绿色通道Python绿色通道

我之前用Charles来抓取了得到App的音频资料 抓取得到App音频数据,于是又收到有读者要我抓取公众号文章,于是就有了这一篇文章. 不知道爬谁的文章好,想了想找了比较接地气的公众号大V[匿名一下,省得被认为蹭流量],于是在微信上征得他同意后,开始干活了!

抓取的效果图如下:

打开Charles抓包工具,打开微信客户端,我是直接用微信PC版上查看公众号文章的,其实这与手机上的道理是一样的。

分析:

找到目标公众号,然后进入历史文章列表,刷新,发现变黄的选项后观察变化,这里需要注意一下我们的请求数据,我们多次发起请求发现请求中,只是url的偏移量发生了变化.于是我们就找出了规律.

下面两张图我们可以看到只是偏移量发生了变化

然后再看Headers中的cookie,这里的cookie一定要注意,每个公众号对应的cookie是不一样的,

总结说明两点:爬取公众号的文章主要就是注意url与cookie的变化,其它都是相似的。另外每个公众号的url与cookie必须匹配,才能获取到文章列表, 下面可以开始写代码了!

小提示:在你正式爬取文章的时候请关掉Charles软件,因为这里占用了一个443端口,导致你抓取文章出错,切记!

完整代码:

代码语言:javascript
复制
import requests

import time
import json
import os



class mp_spider(object):

    def request_data(self):
        try:
            response = requests.get(self.base_url.format(self.offset), headers=self.headers)
            print(self.base_url.format(self.offset))
            if 200 == response.status_code:
               self.parse_data(response.text)
        except Exception as e:
            print(e)
            time.sleep(2)
            pass

    def parse_data(self, responseData):

            all_datas = json.loads(responseData)

            if 0== all_datas['ret']:

                summy_datas = all_datas['general_msg_list']
                datas = json.loads(summy_datas)['list']
                for data in datas:
                    try:
                        title = data['app_msg_ext_info']['title']
                        title_child = data['app_msg_ext_info']['digest']
                        article_url = data['app_msg_ext_info']['content_url']
                        cover = data['app_msg_ext_info']['cover']
                        print(title,title_child,article_url,cover)
                    except Exception as e:
                        print(e)
                        continue


                print('----------------------------------------')
                time.sleep(3)
                self.offset = self.offset+10
                self.request_data()
            else:
                print('抓取数据出错!')



if __name__ == '__main__':
    d = mp_spider()
    d.request_data()

注意:上面代码中的headers与url代码我已经删除了,公众号不让我添加这些东西,没有办法 完整代码见:https://github.com/pythonchannel/spider_project/tree/pythonchannel-dev/mp_spider

当然我这里只是获取公众号文章列表,也没有考虑过多的东西,下一章我进一步优化,获取公众号内容里面的详细东西,持续关注即可!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分析:
  • 完整代码:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档