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 · 5608 次点击
    这是一个创建于 1964 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有的微信公众号文章很多,如果能批量下载下来会方便很多,我花时间做了些研究,有些小心得,想到可能有别的朋友也需要,就开源出来吧,我 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
    虽然主要靠手动操作,程序只做了分析功能,但能用,多谢!
    我研究过 mitmproxy 的纯 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   ·   实用小工具   ·   924 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 22:18 · PVG 06:18 · LAX 14:18 · JFK 17:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.