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 · 2018-08-19 00:12:23 +08:00 · 6088 次点击
    这是一个创建于 2318 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直混知乎,看了很多大神写的爬虫,手痒写了个相关的项目: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
       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
       2018-08-19 09:51:58 +08:00 via Android
    @Trim21 上面👆代码有,直接标注:

    p:zhihu.People

    只能这样了
    Cheez
        14
    Cheez  
    OP
       2018-08-19 09:52:41 +08:00 via Android
    @eastrd 啥都没有这只是初成品哈哈哈,未来也不知道会不会完善地支持,所以我上面的爬虫加了个(?)
    Cheez
        15
    Cheez  
    OP
       2018-08-19 10:16:59 +08:00 via Android
    挽尊
    Cheez
        16
    Cheez  
    OP
       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
       2018-08-19 13:09:11 +08:00
    @agagega #17 被封是什么意思?意思是 API 地址变动吗?还是说爬太久被封?
    Cheez
        21
    Cheez  
    OP
       2018-08-19 13:09:45 +08:00
    @noneface #19 咳咳,如果你要使用 Chrome 的 Cookies 的话,确实只支持 Windows
    Cheez
        22
    Cheez  
    OP
       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
       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
       2018-08-19 18:39:17 +08:00
    @bpllzbh #26 谢谢!
    Cheez
        28
    Cheez  
    OP
       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
       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   ·   实用小工具   ·   1021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 18:25 · PVG 02:25 · LAX 10:25 · JFK 13:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.