分享一个我写的用 Python 批量下载微信公众号文章的开源项目 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
explorer123
V2EX    Python

分享一个我写的用 Python 批量下载微信公众号文章的开源项目

  •  
  •   explorer123 2019-08-12 20:55:00 +08:00 6230 次点击
    这是一个创建于 2326 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有的微信公众号文章很多,如果能批量下载下来会方便很多,我花时间做了些研究,有些小心得,想到可能有别的朋友也需要,就开源出来吧,我 python 水平一般,努力从小白的角度教大家怎么去理解和使用这个工具。
    第一次做开源项目,想通过这个项目多认识些朋友,请大家多提提意见,谢谢啦。
    https://github.com/LeLe86/vWeChatCrawl
    30 条回复    2019-08-14 12:40:48 +08:00
    hugee
        1
    hugee  
       2019-08-12 21:07:14 +08:00 via Android
    怎么处理反爬 验证码?
    explorer123
        2
    explorer123  
    OP
       2019-08-12 21:11:08 +08:00
    @hugee 此项目从头到尾不涉及验证码问题。
    omph
        3
    omph  
       2019-08-12 21:34:21 +08:00   1
    虽然主要靠手动操作,程序只做了分析功能,但能用,多谢!
    我研究过 mimproxy 的纯 python 方案,但好像证书出了问题,无法解析数据包
    lau52y
        4
    lau52y  
       2019-08-12 21:42:40 +08:00
    能全部历史文章么
    explorer123
        5
    explorer123  
    OP
       2019-08-12 21:46:25 +08:00
    @omph 客气了。我也考虑过既然是用 python 是否应该用 mitmproxy 而不用 Fiddler,研究了一下发现 mitmproxy 的设置比较繁琐,抓 Https 需要的设置步骤多,新手极易卡住,还是用 Fiddler 吧,虽然步骤多,但每一步都是点按钮而已,小白应该都能搞定。需要看我项目的应该新手居多,能用是第一位的。这是我暂时的想法哈,对不对的也可以和大家讨论下。
    explorer123
        6
    explorer123  
    OP
       2019-08-12 21:48:19 +08:00
    @lau52y 不能我都不好意思发出来
    lau52y
        7
    lau52y  
       2019-08-12 21:56:06 +08:00
    嗯,
    lau52y
        8
    lau52y  
       2019-08-12 21:59:40 +08:00
    可以考虑下换 IP 的
    explorer123
        9
    explorer123  
    OP
       2019-08-12 22:09:07 +08:00   1
    @lau52y 这个让用户自己考虑吧,不在我的主要考虑范围内。
    我做这个项目的原则是:如果你想学习怎么用 python 去下载想要的数据,或者想简单操作之后下些资料自己学习,那我可以帮你,对这些人来说慢一点没关系,不必考虑换 IP 的事,加上了反而影响他们对主线技术的理解。
    如果你想实现大规模很爽的甚至是肆无忌惮的下载,显然已经不是上面的 2 种范畴了,那自己去研究就好了。我最怕最怕的就是好不容易搞出一个很完备的方案却被一些不良分子直接拿这个去商用赚小白的钱,那我就成了给他人做嫁衣裳。
    lau52y
        10
    lau52y 
       2019-08-12 22:14:08 +08:00
    确实,核心已经分享了,后面怎么做看用户自己能力了
    yuanjunye
        11
    yuanjunye  
       2019-08-12 22:24:49 +08:00 via Android
    这种手动+自动的方式对我挺有用
    不是程序员,但能够看懂简单代码中的一些简单语句,能够做些简单的改动自用
    explorer123
        12
    explorer123  
    OP
       2019-08-12 22:36:04 +08:00
    @yuanjunye 嗯嗯,我最初想法就是让稍学过 python 的朋友能照着说明上手,先把结果跑出来了,他会更有兴趣和耐心去看源代码,而不是用高大上的讲解让新人看了想跑,哈哈。
    abcde51111
        13
    abcde51111  
       2019-08-12 22:44:44 +08:00 via Android
    mak 一下 最近在学 python 啃完视频再来研读代码 哈哈
    omph
        14
    omph  
       2019-08-13 08:25:06 +08:00
    @explorer123 mitmproxy 能像 Fiddler 一样解析出数据吗?我试过没有成功,装了证书也看不到 https 流量
    该怎么设置?
    qwjhb
        15
    qwjhb  
       2019-08-13 09:00:31 +08:00
    @omph 可以的啊

    而且其实不用这么麻烦的 fiddler 抓一个访问后拿到 header,复制过去,就可以用 python 造请求了。先爬一遍历史文章列表,然后设好 sleep 一条一条爬就行。 用 mitmproxy 更方便,开着程序拿微信客户端浏览任意一个公众号文章,后台获取到请求的 header,都不用复制粘贴 直接跑就行。
    joson1205
        16
    joson1205  
       2019-08-13 09:22:06 +08:00
    关键还是获取到后怎么用吧,不然没有意义.获取到的文章多数应该是转载吧,不知道有没有考虑文章排版的问题,超链接,图片,字体样式等等这些
    encro
        17
    encro  
       2019-08-13 09:22:45 +08:00
    anyproxy 很好用啊
    explorer123
        18
    explorer123  
    OP
       2019-08-13 10:00:29 +08:00
    @joson1205 排版不会乱,跟原文一样,公众号文章的 css 多数是内联的。
    explorer123
        19
    explorer123  
    OP
       2019-08-13 10:08:34 +08:00
    @qwjhb
    @encro
    Fiddler Anyproxy Mitmproxy 肯定都可以,但 Fiddler 可以按几下鼠标就搞定,不需要写代码,对新人最友好。
    抓 Header 模拟发送请求的方式确实对老手更友好效率更高。对新手的话,我想先放他们能理解的代码,让他们能看懂每一行代码。
    qwjhb
        20
    qwjhb  
       2019-08-13 10:50:17 +08:00
    @joson1205 获取到拿来卖=-=
    joson1205
        21
    joson1205  
       2019-08-13 11:04:02 +08:00
    @qwjhb 卖个鸡腿,尊重一下原创吧
    qwjhb
        22
    qwjhb  
       2019-08-13 11:26:15 +08:00
    @joson1205 所以我前几年打包公众号合集 mobi 的源码也没放 最多讲讲思路,然而在做这个生意的站好几个了=-=
    omph
        23
    omph  
       2019-08-13 13:11:49 +08:00
    @qwjhb 流程确实是这样,但用 Mitmproxy 抓不到 https 的流量,导致得不到 header
    但用 Fiddler 却没问题,目前怀疑是证书的问题
    omph
        24
    omph  
       2019-08-13 13:14:36 +08:00
    @qwjhb header 里的参数大概几分钟后就会失效,还要重新获取
    qwjhb
        25
    qwjhb  
       2019-08-13 13:45:06 +08:00   1
    @omph
    安装下证书

    sleep 不用太久 几秒一次这样爬 header 不会失效的。至少几个小时没问题。个人用本来也不是每时每刻都要爬。之前我基本月底扫一遍几个公众号订成合集看一遍。
    explorer123
        26
    explorer123  
    OP
       2019-08-13 17:51:27 +08:00   1
    @omph key 半小时失效,对于抓取文章列表时间足够了。
    fuckshit
        27
    fuckshit  
       2019-08-13 18:45:31 +08:00
    必须用代理吗? 我也也写了一个抓取微信文章的工具,不过原理不是这样的。 我是通过微信网页版 api 实现的微信机器人,关注公众号,然后公众号有新的文章推送的时候,微信机器人会收到消息,然后自动将文章采集下来。 详情可以看下这里: [https://mlog.club/topic/22]( https://mlog.club/topic/22) 我的也是开源的呢。
    explorer123
        28
    explorer123  
    OP
       2019-08-13 19:54:01 +08:00
    @fuckshit 你这个没法下载历史消息啊。另外你的源码在哪?找了一圈没找到。
    fuckshit
        29
    fuckshit  
       2019-08-14 09:51:49 +08:00
    @explorer123 项目地址: https://github.com/mlogclub/mlog-wxbot 我这个确实是没法下载历史的文章,微信公众号对于这个限制的很严格, 你的项目也是利用代理拦截才能取到历史数据。
    explorer123
        30
    explorer123  
    OP
       2019-08-14 12:40:48 +08:00
    @fuckshit 如果微信没啥限制人人都能下那我这个项目就没有必要存在了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5590 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 35ms UTC 03:10 PVG 11:10 LAX 19:10 JFK 22:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86