推广一波我用 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
Cheez
V2EX    Python

推广一波我用 Python 写的知乎爬虫(?)

  •  3
     
  •   Cheez
    PRO
    2018-08-19 00:12:23 +08:00 6473 次点击
    这是一个创建于 2616 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直混知乎,看了很多大神写的爬虫,手痒写了个相关的项目:ZhihuVAPI 既然是 Python 写的,那么第一要素就是优雅 这个项目的优雅体现在以下方面:

    • 调用时属于链式调用,因此你可以轻易写出这种代码:
    import ZhihuVAPI as zhihu print(zhihu.Article('https://zhuanlan.zhihu.com/p/42381257').column.author.name) 
    • 开箱即用,默认使用 Chrome 的 Cookies 你不需要任何设置和登录,引用后直接使用

    • 内容获取自由度高

    获取列表的所有项

    import ZhihuVAPI as zhihu self=zhihu.People('iCheez') for a in self.answers(): a:zhihu.Answer # 让 IDE 智能提示 print(a.excerpt) 

    获取列表的指定数量的项

    import ZhihuVAPI as zhihu self=zhihu.People('iCheez') for a in self.answers(5): a:zhihu.Answer # 让 IDE 智能提示 print(a.excerpt) 

    获取列表的从某处开始的指定数量的项

    import ZhihuVAPI as zhihu self=zhihu.People('iCheez') for a in self.answers(count=5,start=50): a:zhihu.Answer # 让 IDE 智能提示 print(a.excerpt) 

    获取列表的从某页开始的指定数量的项

    import ZhihuVAPI as zhihu self=zhihu.People('iCheez') for a in self.answers(count=5,page=2): a:zhihu.Answer # 让 IDE 智能提示 print(a.excerpt) 

    这些操作都只需要调整一两个参数就可以实现.

    而且,ZhihuVAPI 支持以下三种初始化:

    1. URL 初始化:zhihu.People('https://www.zhihu.com/people/iCheez/activities')
    2. ID 初始化:zhihu.People('e4f87c3476a926c1e2ef51b4fcd18fa3')
    3. URL_Token 初始化(仅对用户对象有效):zhihu.People('iCheez')

    如果你看了有兴趣的话可以去我的 Github 主页看一下: https://github.com/CheezOne/ZhihuVAPI

    32 条回复    2018-09-06 17:55:17 +08:00
    coffeSlider
        1
    coffeSlider  
       2018-08-19 00:22:17 +08:00 via Android   1
    提个小建议,这种小东西就别发布了哈。
    另外,据我所知,v2 一部人 (包括本人) 很嫌弃知乎的。
    batnss
        2
    batnss  
       2018-08-19 00:26:52 +08:00   5
    1L 给了-1 我给楼主加回来 逃~~
    diggerdu
        3
    diggerdu  
       2018-08-19 00:38:04 +08:00 via iPhone   1
    挺漂亮的
    mingyun
        4
    mingyun  
       2018-08-19 00:40:57 +08:00   1
    ps:ZhihuVAPI 这个命名方式有点怪
    Cheez
        5
    Cheez  
    OP
    PRO
       2018-08-19 01:49:09 +08:00 via Android
    @mingyun 咳咳,可能是因为好名字都被别人用了
    Trim21
        6
    Trim21  
       2018-08-19 01:56:10 +08:00 via Android
    看楼主问了不少问题,终于看到成果了…
    Trim21
        7
    Trim21  
       2018-08-19 02:02:46 +08:00 via Android
    最后智能提示的问题还没解决吗…
    eastrd
        8
    eastrd  
       2018-08-19 08:22:39 +08:00 via Android
    很支持楼主,但有个问题,这个爬虫的设计有多 robust ?
    另外代理和多线程方面有支持吗?
    ddzzhen
        9
    ddzzhen  
       2018-08-19 08:31:25 +08:00 via Android
    支持楼主,只要是原创的东西就挺好的
    easylee
        10
    easylee  
       2018-08-19 08:45:53 +08:00 via Android
    强!
    llllllLllll
        11
    llllllLllll  
       2018-08-19 08:46:08 +08:00   1
    支持楼主,我觉着分享不论大小
    yanzixuan
        12
    yanzixuan  
       2018-08-19 09:15:59 +08:00
    @coffeSlider 嫌弃+1, 但是知乎早期的一些回答还是不错的。
    Cheez
        13
    Cheez  
    OP
    PRO
       2018-08-19 09:51:58 +08:00 via Android
    @Trim21 上面代码有,直接标注:

    p:zhihu.People

    只能这样了
    Cheez
        14
    Cheez  
    OP
    PRO
       2018-08-19 09:52:41 +08:00 via Android
    @eastrd 啥都没有这只是初成品哈哈哈,未来也不知道不会完善地支持,所以我上面的爬虫加了个(?)
    Cheez
        15
    Cheez  
    OP
    PRO
       2018-08-19 10:16:59 +08:00 via Android
    挽尊
    Cheez
        16
    Cheez  
    OP
    PRO
       2018-08-19 10:51:23 +08:00 via Android
    挽尊*2
    agagega
        17
    agagega  
       2018-08-19 10:59:54 +08:00 via iPhone
    直接调从浏览器里摸索出来的知乎 API 是不是比查网页更容易被封?
    toarya
        18
    toarya  
       2018-08-19 11:39:00 +08:00
    可以的,能解密 chrome 的 cookie
    noneface
        19
    noneface  
       2018-08-19 12:37:08 +08:00
    pywin32? 只支持 Windows 吗?
    Cheez
        20
    Cheez  
    OP
    PRO
       2018-08-19 13:09:11 +08:00
    @agagega #17 被封是什么意思?意思是 API 地址变动吗?还是说爬太久被封?
    Cheez
        21
    Cheez  
    OP
    PRO
       2018-08-19 13:09:45 +08:00
    @noneface #19 咳咳,如果你要使用 Chrome 的 Cookies 的话,确实只支持 Windows
    Cheez
        22
    Cheez  
    OP
    PRO
       2018-08-19 13:20:00 +08:00
    @toarya #18 可惜只能在 Windows 平台
    agagega
        23
    agagega  
       2018-08-19 15:03:05 +08:00 via iPhone
    @Cheez 就是把爬虫的 IP 封掉
    Cheez
        24
    Cheez  
    OP
    PRO
       2018-08-19 15:34:59 +08:00 via Android
    @agagega 好像只有验证码吧
    lihongjie0209
        25
    lihongjie0209  
       2018-08-19 17:43:48 +08:00
    ```
    class Question(Container):
    """知乎的问题对象"""

    def __init__(self, id):
    super().__init__(id, '问题', 'question')
    if 2 == 1: # 单纯为了编辑器能智能提示
    self.question_type = ''
    self.created = ''
    self.updated_time = ''
    self.is_editable = ''
    self.is_reportable = ''
    self.allow_delete = ''
    self.admin_closed_comment = ''
    self.has_publishing_draft = ''
    self.answer_count = ''
    self.comment_count = ''
    self.follower_count = ''
    self.collapsed_answer_count = ''
    self.comment_permission = ''
    self.detail = ''
    self.editable_detail = ''
    self.status = ''
    self.relatiOnship= ''
    self.topics = ''
    self.author = ''
    self.can_comment = ''
    self.suggest_edit = ''
    self.thumbnail_info = ''
    self.review_info = ''
    self.mute_info = ''
    ```


    6666
    bpllzbh
        26
    bpllzbh  
       2018-08-19 17:52:18 +08:00   1
    顶一波吧 star 了
    Cheez
        27
    Cheez  
    OP
    PRO
       2018-08-19 18:39:17 +08:00
    @bpllzbh #26 谢谢!
    Cheez
        28
    Cheez  
    OP
    PRO
       2018-08-19 19:16:42 +08:00
    @lihongjie0209 没办法......只能这样了
    viho
        29
    viho  
       2018-08-19 19:49:27 +08:00
    大神,您好,我是萌新,我想问问您,有接触过用 python 爬取 app 数据么
    Cheez
        30
    Cheez  
    OP
    PRO
       2018-08-20 01:14:38 +08:00 via Android
    @viho 你直接下载个模拟器,开 fiddler 抓就行了
    mingyun
        31
    mingyun  
       2018-08-25 18:48:18 +08:00
    版本要求太高了吧 我 3.5
    zhihu.info(f'People 对象 {id} ({self})初始化')
    ^
    SyntaxError: invalid syntax
    jin6220
        32
    jin6220  
       2018-09-06 17:55:17 +08:00
    能导出一个人的所有回答么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     967 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:55 PVG 06:55 LAX 15:55 JFK 18:55
    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