背景说明

感觉微信公众号算得是比较难爬的平台之一,不过一番折腾之后还是小有收获的。没有用Scrapy(估计爬太快也有反爬限制),但后面会开始整理写一些实战出来。简单介绍下本次的开发环境:

python3

requests

psycopg2 (操作postgres数据库)

抓包分析

前一篇文章介绍过抓包前要做的准备,这里不再做相关说明。本次实战对抓取的公众号没有限制,但不同公众号每次抓取之前都要进行分析。打开Fiddler,将手机配置好相关代理,为避免干扰过多,这里给Fiddler加个过滤规则,只需要指定微信域名mp.weixin.qq.com就好:

平时关注的公众号也比较多,本次实战以“36氪”公众号为例,继续往下看:

在公众号主页,右上角有三个实心圆点,点击进入消息界面,下滑找到并点击“全部消息”,往下请求加载几次历史文章,然后回到Fiddler界面,不出意外的话应该可以看到这几次请求,可以看到返回的数据是json格式的,同时文章数据是以json字符串的形式定义在general_msg_list字段中:

分析文章列表接口

把请求URL和Cookie贴上来进行分析:

https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz=MzI2NDk5NzA0Mw==&f=json&offset=10&count=10&is_ok=1&scene=126&uin=777&key=777&pass_ticket=QhOypNwH5dAr5w6UgMjyBrTSOdMEUT86vWc73GANoziWFl8xJd1hIMbMZ82KgCpN&wxtoken=&appmsg_token=971_LwY7Z%252BFBoaEv5z8k_dFWfJkdySbNkMR4OmFxNw~~&x5=1&f=json

Cookie: pgv_pvid=2027337976; pgv_info=ssid=s3015512850; rewardsn=; wxtokenkey=777; wxuin=2089823341; devicetype=android-26; version=26070237; lang=zh_CN;pass_ticket=NDndxxaZ7p6Z9PYulWpLqMbI0i3ULFeCPIHBFu1sf5pX2IhkGfyxZ6b9JieSYRUy;wap_sid2=CO3YwOQHEogBQnN4VTNhNmxQWmc3UHI2U3kteWhUeVExZHFVMnN0QXlsbzVJRUJKc1pkdVFUU2Y5UzhSVEtOZmt1VVlYTkR4SEllQ2huejlTTThJWndMQzZfYUw2SldLVGVMQUthUjc3QWdVMUdoaGN0Nml2SU05cXR1dTN2RkhRUVd1V2Y3SFJ5d01BQUF+fjCB1pLcBTgNQJVO

下面把重要的参数说明一下,没提到的说明就不那么重要了:

__biz:相当于是当前公众号的id(唯一固定标志)

offset:文章数据接口请求偏移量标志(从0开始),每次返回的json数据中会有下一次请求的offset,注意这里并不是按某些规则递增的

count:每次请求的数据量(亲测最多可以是10)

pass_ticket:可以理解是请求票据,而且隔一段时间后(大概几个小时)就会过期,这也是为什么微信公众号比较难按固定规则进行抓取的原因

appmsg_token:同样理解为非固定有过期策略的票据

Cookie:使用的时候可以把整段贴上去,但最少仅需要wap_sid2这部分

是不是感觉有点麻烦,毕竟不是要搞大规模专业的爬虫,所以单就一个公众号这么分析下来,还是可以往下继续的,贴上截取的一段json数据,用于设计文章数据表:

{

"ret": 0,

"errmsg": "ok",

"msg_count": 10,

"can_msg_continue": 1,

"general_msg_list": "{\"list\":[{\"comm_msg_info\":{\"id\":1000005700,\"type\":49,\"datetime\":1535100943,\"fakeid\":\"3264997043\",\"status\":2,\"content\":\"\"},\"app_msg_ext_info\":{\"title\":\"金融危机又十年:钱荒之下,二手基金迎来高光时刻\",\"digest\":\"退出永远是基金的主旋律。\",\"content\":\"\",\"fileid\":100034824,\"content_url\":\"http:\\/\\/mp.weixin.qq.com\\/s?__biz=MzI2NDk5NzA0Mw==&mid=2247518479&idx=1&sn=124ab52f7478c1069a6b4592cdf3c5f5&chksm=eaa6d8d3ddd151c5bb95a7ae118de6d080023246aa0a419e1d53bfe48a8d9a77e52b752d9b80&scene=27#wechat_redirect\",\"source_url\":\"\",\"cover\":\"http:\\/\\/mmbiz.qpic.cn\\/mmbiz_jpg\\/QicyPhNHD5vYgdpprkibtnWCAN7l4ZaqibKvopNyCWWLQAwX7QpzWicnQSVfcBZmPrR5YuHS45JIUzVjb0dZTiaLPyA\\/0?wx_fmt=jpeg\",\"subtype\":9,\"is_multi\":0,\"multi_app_msg_item_list\":[],\"author\":\"石亚琼\",\"copyright_stat\":11,\"duration\":0,\"del_flag\":1,\"item_show_type\":0,\"audio_fileid\":0,\"play_url\":\"\",\"malicious_title_reason_id\":0,\"malicious_content_type\":0}}]}",

"next_offset": 20,

"video_count": 1,

"use_video_tab": 1,

"real_type": 0

}

可以简单抽取想要的数据,这里将文章表结构定义如下,顺便贴上建表的SQL语句:

-- ----------------------------

-- Table structure for tb_article

-- ----------------------------

DROP TABLE IF EXISTS "public"."tb_article";

CREATE TABLE "public"."tb_article" (

"id" serial4 PRIMARY KEY,

"msg_id" int8 NOT NULL,

"title" varchar(200) COLLATE "pg_catalog"."default" NOT NULL,

"author" varchar(20) COLLATE "pg_catalog"."default",

"cover" varchar(500) COLLATE "pg_catalog"."default",

"digest" varchar(200) COLLATE "pg_catalog"."default",

"source_url" varchar(800) COLLATE "pg_catalog"."default",

"content_url" varchar(600) COLLATE "pg_catalog"."default" NOT NULL,

"post_time" timestamp(6),

"create_time" timestamp(6) NOT NULL

)

;

COMMENT ON COLUMN "public"."tb_article"."id" IS '自增主键';

COMMENT ON COLUMN "public"."tb_article"."msg_id" IS '消息id (唯一)';

COMMENT ON COLUMN "public"."tb_article"."title" IS '标题';

COMMENT ON COLUMN "public"."tb_article"."author" IS '作者';

COMMENT ON COLUMN "public"."tb_article"."cover" IS '封面图';

COMMENT ON COLUMN "public"."tb_article"."digest" IS '关键字';

pgslq表的字段类型_Python 爬取微信公众号文章和评论 (基于 Fiddler 抓包分析)相关推荐

  1. Python 爬取微信公众号文章和评论 (有源码)

    关注我,一个仍存梦想的屌丝程序员,每天为你分享高质量编程博客. follow us for dream 关注我回复 "微信爬虫" 获取源代码 背景说明 感觉微信公众号算得是比较难爬 ...

  2. 【Python爬虫】爬取微信公众号文章信息准备工作

    有一天发现我关注了好多微信公众号,那时就想有没有什么办法能够将微信公众号的文章弄下来,而且还想将一些文章的精彩评论一起搞下来.参考了一些文章,通过几天的研究基本上实现了自己的要求,现在记录一下自己的一 ...

  3. 使用代理爬去微信公众号_Python3网络爬虫开发实战之使用代理爬取微信公众号文章...

    本节目标 我们的主要目标是利用代理爬取微信公众号的文章,提取正文.发表日期.公众号等内容,爬取来源是搜狗微信,其链接为 http://weixin.sogou.com/,然后把爬取结果保存到 MySQ ...

  4. 使用代理爬去微信公众号_Python3WebSpider/9.5-使用代理爬取微信公众号文章.md at master · Lainton/Python3WebSpider · GitHub...

    9.5 使用代理爬取微信公众号文章 前面讲解了代理池的维护和付费代理的相关使用方法,接下来我们进行一下实战演练,利用代理来爬取微信公众号的文章. 1. 本节目标 我们的主要目标是利用代理爬取微信公众号 ...

  5. python爬取正确但不出文件_使用Python爬取微信公众号文章并保存为PDF文件(解决图片不显示的问题)...

    前言 第一次写博客,主要内容是爬取微信公众号的文章,将文章以PDF格式保存在本地. 爬取微信公众号文章(使用wechatsogou) 1.安装 pip install wechatsogou --up ...

  6. python爬虫能爬取微信密码吗_爬虫如何爬取微信公众号文章

    下篇文章:python爬虫如何爬取微信公众号文章(二) 下下篇连接python爬虫如何实现每天爬取微信公众号的推送文章 因为最近在法院实习,需要一些公众号的数据,然后做成网页展示出来便于查看,之前我倒 ...

  7. Python爬取微信公众号文章、点赞数

    代码还是热乎的,只要你细心一步步的慢慢调试,绝壁没问题 前期准备 订阅号: Python: Fiddler: 微信账号: 流程 使用用微信公众号生成cookie 使用Fiddler抓取微信公众号数据, ...

  8. python 爬取微信公众号文章(selenium+webdriver)

    """通过搜狗搜索中的微信搜索入口爬取微信公众号文章(selenium) """ import re import os import js ...

  9. python爬取微信公众号文章

    爬取微信公众号文章 获取微信公众号的url 获取每一篇文章的url ​ 选择一个公众号进入,选择一个目录进入后点复制链接,然后去浏览器打开.按F12打开检查的模式,在Console中输入$x('标签路 ...

最新文章

  1. 《The Coaching Booster》问与答
  2. python pandas rename_使用Pandas重命名文件
  3. [Linux]Shell的运算符和特殊变量
  4. OpenLDAP实战指南上市发售
  5. python爬虫吧-python爬虫-爬取百度贴吧帖子加图片
  6. 超好用的简单的jquery tab选项卡切换代码(点击切换和导航栏滑过)
  7. 欧拉函数的一道练习题(附加容斥做法)
  8. python采用哪种编码方式_Python编码格式的指定方式
  9. 整个行业都缺Web前端工程师,你还在问Web前端工作好找吗?
  10. Character Studio
  11. 线性代数的相关计算(numpy)
  12. jQuery鼠标悬停文字渐隐渐现动画效果
  13. shell 执行多个python脚本
  14. 涂抹Oracle—三思笔记之一步一步学Oracle
  15. linux关闭urlhelper服务,ASP.NET MVC UrlHelper.GenerateUrl异常:“无法使用导航..退出顶部目录”...
  16. 浅谈扩展欧几里得算法
  17. Microhard P900 900MHz跳频电台核心模块
  18. 计算机网络专业以后装网线,安装了1000M宽带后,您就不必再上网了吗?千兆宽带有多快?...
  19. vue路由变化时使用axios取消所有请求
  20. 狗头人与地下世界冒险模式通关记录 [20171224]

热门文章

  1. 加快Vue项目的开发速度
  2. OpenCV中 IplImage 与 Mat的区别
  3. 使用VS2010+OpenCV2.4.9简单图像水印代码
  4. 用单张2D图像重构3D场景
  5. 7-4 求下一天 (30 分)
  6. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)
  7. 求链表的倒数第m个元素
  8. jmu-Java-02基本语法-06-枚举 (3分)
  9. 用c语言计算2的n次方,计算2的N次方........有什么错吗?
  10. java ajax 更改头像_ajax+node实现头像更改