V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
samzhangjy
V2EX  ›  分享创造

BaiduSpider:一个爬取百度的利器

  •  1
     
  •   samzhangjy ·
    samzhangjy · 2021-03-19 19:02:38 +08:00 · 4808 次点击
    这是一个创建于 1349 天前的主题,其中的信息可能已经有所发展或是发生改变。

    BaiduSpider

    BaiduSpider


    BaiduSpider,一个爬取百度的利器


    简体中文 | English

    made-with-python GitHub GitHub Repo stars GitHub forks PyPI version downloads

    BaiduSpider 是一个爬取百度搜索结果的 Python 爬虫,目前支持百度网页搜索,百度图片搜索,百度知道搜索,百度视频搜索,百度资讯搜索,百度文库搜索,百度经验搜索和百度百科搜索。


    免责声明


    此项目仅作为学习用途,不可商用或爬取百度大量数据。此外,本项目已经更新为GPL-V3版权协议,意味着涉及(使用)此项目的任何其它项目必须开源且注明出处。特此说明,违者后果自负。


    安装


    BaiduSpider 现已发布 PyPI 包,可以使用pip安装:

    $ pip install baiduspider
    

    或者从 GitHub 直接 clone:

    $ git clone https://github.com/BaiduSpider/BaiduSpider.git
    
    # ...
    
    $ python setup.py install
    

    提示

    BaiduSpider 目前仅支持 Python 3.6+,暂不支持 Python 2.x


    快速上手


    BaiduSpider 提供简易的,人性化的 API,可通过实例化BaiduSpider对象后调用。例如,我想要使用网页搜索函数查询有关Python的信息:

    # 导入 BaiduSpider
    from baiduspider import BaiduSpider
    from pprint import pprint
    
    # 实例化 BaiduSpider
    spider = BaiduSpider()
    
    # 搜索网页
    pprint(spider.search_web(query='Python'))
    

    获得的搜索结果将类似下面的这个 Python 字典结果:

    {'results': [{'result': 100000000, 'type': 'total'},
                 {'results': ['0 基础学 python 有多难',
                              'python 自学行吗',
                              '学 python 要多久',
                              'python 手机版',
                              'python 有什么用',
                              '财务有必要学 python 吗',
                              'python 为什么叫爬虫',
                              'python 处理 excel 的优势',
                              'python 自学免费教程'],
                  'type': 'related'},
                 {'result': {'cover': None,
                             'cover-type': None,
                             'des': 'Python 是一种跨平台的计算机程序设计语言。 '
                                    '是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。',
                             'title': 'Python(计算机程序设计语言) - 百度百科',
                             'url': 'http://www.baidu.com/link?url=2z_Q_urbKikP4py4Y9tlMImyT090fjjaKi1gi4Z6bjvk1lU8MqYHewJTumd9YEpC5Jusis_8nqlTKsJgEMcRUa'},
                  'type': 'baike'},
                 {'des': 'The official home of the Python Programming Language... '
                         '# Python 3: Simple output (with Unicode) >>> '
                         'print("Hello, I\'m Python!") Hello, I\'m Python!',
                  'origin': 'www.python.org/',
                  'time': None,
                  'title': 'Welcome to Python.org',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=NC7GXkMtnZ9t8csmbawkvfp2QbDaaMHleael-qkCOtlSy_kfPsT8ARljUiIVOH2L'},
                 {'des': 'The official home of the Python Programming Language',
                  'origin': 'www.python.org/getit',
                  'time': None,
                  'title': 'Download Python | Python.org',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=AKBkNZv2L7600dOvqeylKK0fSRJJboDgjf7xGPuZfx2giBnXAiukP5ch7Tb619zC'},
                 {'des': 'Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), '
                         '是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于 1989 年发明,第...',
                  'origin': '知乎',
                  'time': None,
                  'title': 'Python - 知乎',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=xxKNKxpUHwEvoPt7OlqXceI0jTqTgvkJr0cncYDUPVNpYB397k-mbLlMOrw4IhNa'},
                 {'des': 'Python 基础教程 Python 是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python 由 '
                         'Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991...',
                  'origin': 'www.runoob.com/python/python-t...',
                  'time': '2020 年 1 月 1 日',
                  'title': 'Python 基础教程 | 菜鸟教程',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=ShmleIIBtIEfujCO1Wqh3PrOab_VrP87gN9GkEDGwQSj9OJ27Hst5NRomZtDRaxI7-WWSGLJ0-olY7Gt5merVK'},
                 {'des': '在 Python 中,* 和 ** 具有语法多义性,具体来说是有三类用法。1. 算数运算* 代表乘法** '
                         '代表乘方>>> 2 * 510>>> 2 ** 5322...',
                  'origin': 'CSDN 技术社区',
                  'time': '2018 年 6 月 5 日',
                  'title': 'Python3 * 和 ** 运算符_极客点儿-CSDN 博客',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=Wo6dq8qZ24BrXjb6ZO5Ft20HEUmtEvGn7zTArPFe6IGnYYID3jjhQK_iwtP2G_rawgQLa52_68YRCVWzYjfPyptYEJmoGu-kDlTsmNoJ26S'},
                 {'des': '首先上一首 Python 之禅:我从 2015 年 3 月第一次接触 Python 这门语言(之前一直写 '
                         'PHP),就对其简洁…',
                  'origin': '知乎',
                  'time': '2019 年 3 月 28 日',
                  'title': '你都用 Python 来做什么? - 知乎',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=9Yve5ybsv1wP2WlxkOqO0z7wa_DaY__D1bTMLOaxT_UAqayv9RVWNHOjo68Hj1GycG5KSNutW6ofYdO4pYsjrTBz3Pe4hl-yQRxMtOfiWES'},
                 {'des': 'Python 是由创始人贵铎·范·罗萨姆(Guido van '
                         'Rossum)在阿姆斯特丹于 1989 年圣诞节期间,为了打发圣诞节的无趣,开发的一个新的解释型脚本语言。',
                  'origin': 'www.yunweipai.com/python',
                  'time': '2019 年 4 月 25 日',
                  'title': 'Python 教程 - 运维派',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=px_zi74_EXc23TEOILqPGQfW49CRQv448R7MXLXGQiV-HQNiuxW8sYGRhasJSOVp'},
                 {'des': '这套 Python 基础教程通俗易懂,深入浅出,旨在帮助大家快速入门。这套 Python 教程虽然学习门槛低,但是知识体系很丰富,并且包含了大量实例,让大家学以致用。',
                  'origin': 'c.biancheng.net/python',
                  'time': None,
                  'title': 'Python 基础教程,Python 入门教程(非常详细)_C 语言中文网',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=etpIrqd8bVpZzDq54FotETIfGChVtHeVAjLjdVHgdFSyN-jvo421D01Tdjt7FsJ9'},
                 {'des': 'Python 100 例 以下实例在 Python2.7 下测试通过: Python 练习实例 1 Python '
                         '练习实例 2 Python 练习实例 3 Python 练习实例 4 Python 练习实例 5 Python '
                         '练习实例 6 Python...',
                  'origin': 'www.runoob.com/python/python-1...',
                  'time': None,
                  'title': 'Python 100 例 | 菜鸟教程',
                  'type': 'result',
                  'url': 'http://www.baidu.com/link?url=pMlhzHAsK3rai-RLPA0nY_s1nahEjH5nrkPw23lbXbCUWeV0moA3vvMfa0wTSSpJ0FUjizbPCEq0d_lIFiGiHK'}],
     'total': 10}
    

    更详细的新手教程可在文档中找到。


    开发人员


    samzhangjy    samzhangjy , 现任 OIer,业余 Python Coder 。BaiduSpider 作者,主要代码贡献者。

    陈绍坤    陈绍坤 , Web 开发者,编程爱好者,12 岁,擅长 Flask 。BaiduSpider 代码贡献者。



    维护 BaiduSpider


    如果你想要参与 BaiduSpider 的维护工作,我将十分感激!维护的方式多种多样,可以通过提交新的 issue,可以为新手解答 issue,甚至提交一个 PR


    关于速度


    本项目的执行速度很大情况下取决于你所在地区的网速。本项目的解析时间约为 0.3 ~ 0.4 秒,若将exclude设为['all'],即仅解析普通结果,解析时间约为 0.2 秒。如果你想要测试解析速度,可以将执行BaiduSpider.parse_web的时间记录下来。详细使用请见注释,由于是内部函数,将不会出现在文档中。


    特别致谢


    • 感谢requests提供爬虫的 HTTP 获取网页的支持

    • 感谢MkDocsMaterial for MkDocs提供的精致的文档框架

    • 感谢Vue这个强大的前端框架,为 BaiduSpider 的前端提供了强有力的支持

    • 感谢所有对 BaiduSpider 提交错误报告,解答 issue,和提交 PR 的你们!

    23 条回复    2021-03-31 13:44:01 +08:00
    tikazyq
        1
    tikazyq  
       2021-03-19 19:05:54 +08:00
    给大佬倒波波茶
    samzhangjy
        2
    samzhangjy  
    OP
       2021-03-19 19:08:46 +08:00
    @tikazyq 不是大佬……(其实我才六年级,还请多关照……
    yuhangch
        3
    yuhangch  
       2021-03-19 19:44:51 +08:00
    @samzhangjy 给弟弟倒杯茶哈哈
    supersu
        4
    supersu  
       2021-03-19 20:10:32 +08:00 via Android
    资瓷一个
    tousfun
        5
    tousfun  
       2021-03-20 00:29:17 +08:00 via iPhone
    后生可畏
    hlwjia
        6
    hlwjia  
       2021-03-20 00:33:26 +08:00
    12 岁??? 我 12 岁的时候估计还不懂事
    eason1874
        7
    eason1874  
       2021-03-20 00:57:41 +08:00
    12 岁???我 12 岁的时候在装扮 QQ 空间,拖拽功能模块对页面进行排版,四舍五入跟会 python 的楼主差不多吧(不是

    很少用百度,回复以表敬意。
    webshe11
        8
    webshe11  
       2021-03-20 01:28:34 +08:00   ❤️ 6
    大概看了一下代码,好像用的是手动解析 HTML 的方法?
    其实百度的搜索结果可以用 JSON 格式返回,几年前我玩过两下,刚才试了一下还能用

    https://www.baidu.com/s?wd=Python&pn=0&rn=20&tn=json

    记得和普通返回结果略有差别,另外不知道支持不支持图片、知道、视频、文库这些乱七八糟的,楼主可以试试,仅供参考
    MASAILA
        9
    MASAILA  
       2021-03-20 02:21:49 +08:00 via iPhone
    12 岁 太强了
    THP301
        10
    THP301  
       2021-03-20 02:38:25 +08:00
    12 岁未成年做爬虫应该比成年人安全一些吧
    cnrting
        11
    cnrting  
       2021-03-20 06:23:29 +08:00 via iPhone
    12 ??倒过来吧
    QingStone
        12
    QingStone  
       2021-03-20 07:05:08 +08:00 via iPhone
    @THP301 #10 我觉得你应该要加个狗头
    samzhangjy
        13
    samzhangjy  
    OP
       2021-03-20 08:16:23 +08:00 via iPhone
    @webshe11 谢谢!我一会试验一下
    samzhangjy
        14
    samzhangjy  
    OP
       2021-03-20 08:19:43 +08:00 via iPhone
    另外由于我的铜币并不多,就不一一回复了,但是谢谢大家!还有,开发人员那块 samzhangjy 是我(项目发起者,主要贡献者),陈绍坤是另外一个非常厉害的六年级小学生(项目 collaborator ),大家可以去知乎关注他~
    AndyAO
        15
    AndyAO  
       2021-03-20 11:07:30 +08:00
    如果我是楼主,最讨厌看到的就是关于年龄的感慨,因为毫无价值。
    samzhangjy
        16
    samzhangjy  
    OP
       2021-03-20 11:19:15 +08:00
    @AndyAO 是的。我并不希望别人把我当成小孩子看待,尤其是在开发界,年龄是无关紧要的。我为什么要提呢?因为另一个开发者比较关注,希望他不要看到这个回复……
    Mrxx
        17
    Mrxx  
       2021-03-20 14:53:18 +08:00
    年龄无关紧要
    但我要强调我只有 12 岁
    让大家夸我好厉害

    好厉害
    newworld
        18
    newworld  
       2021-03-20 15:05:32 +08:00
    @samzhangjy 咋发现的
    PeacePeach
        19
    PeacePeach  
       2021-03-20 17:46:58 +08:00 via iPhone
    6 年级,12 岁,少年有为
    samzhangjy
        20
    samzhangjy  
    OP
       2021-03-20 17:56:35 +08:00 via iPhone
    @Mrxx @PeacePeach 我不知道你是怎么想的。只是随口一提年龄罢了,更何况在开发人员那一栏里我完全没有提到我的年龄。好吧,主页我说了。那不是很正常嘛?我只是想交一些志同道合的朋友罢了,另一个开发者就是因为他写的一个回答我们才认识的。你们可以不 star,但是完全没有必要这么喷啊?这只是一个交流平台,我宣传一下自己的项目罢了。我从来没有说年龄很重要。为什么你们不去喷那些说自己是大学生团队开发的深度学习项目呢?奇怪。
    lasuar
        21
    lasuar  
       2021-03-22 10:04:14 +08:00
    鼓励鼓励!
    enki0423
        22
    enki0423  
       2021-03-24 09:11:59 +08:00 via iPhone
    厉害,我六年级还在玩泥巴,加油💪🏻
    OwO233
        23
    OwO233  
       2021-03-31 13:44:01 +08:00
    这个没有必要喷。喷的人是嫉妒吧?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1056 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:41 · PVG 05:41 · LAX 13:41 · JFK 16:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.