查看原文
其他

一个能够屏蔽百度广告的爬虫:BaiduSpider

samzhangjy 杰哥的IT之旅 2022-08-11

作者:samzhangjy
来源:公众号「杰哥的IT之旅」
ID:Jake_Internet

前言

有时候做数据统计的时候,常常很难大而全地抓取一个页面上所有的搜索结果,比如百度网页搜索,有时候会有视频栏,新闻栏,百科栏,等等。普通的爬虫都不能爬到这些,因为它们的结构跟普通搜索结果是完全不一样的。但是,BaiduSpider可以,接下来,我们来看下这期视频:

BaiduSpider是一个能够抓取百度各类搜索结果的爬虫,使用Python编写。它十分轻量,但是却能够准确地爬取各种类型复杂的结果,包括我们上面所说的视频,新闻,百科等。

目前实现的功能有百度网页搜索,百度图片搜索,百度知道搜索,百度视频搜索,百度资讯搜索,百度文库搜索,百度经验搜索和百度百科搜索。

除此以外,BaiduSpider还拥有多种不同的平台,目前有Python原生,Web UI和Web API,并且接下来还会推出BaiduSpider CLI,让你在命令行里完成搜索。

主要功能

当然,上面才是它的一点点功能,它最大的卖点在于,它所爬取的所有搜索结果都没有广告!有了它,你就再也不用去安装什么AdBlock,AdGuard啦!

但是,让我们先来小试牛刀,看看它爬取搜索结果的准确度和完整度怎么样吧。比如说,我们来搜索一下Python教程视频

对比一下百度搜索的页面:

我们可以发现,BaiduSpider爬取到的信息是和百度一模一样的(除去百度最后一个是广告)!可见BaiduSpider的准确度。

广告屏蔽

接下来,我们来看看它处理广告的能力:

几乎一半都是广告。。。再看看BaiduSpider的:

可以很直接地看出BaiduSpider屏蔽了所有右下角带有广告标签的搜索结果,是不是十分大快人心……

基本功:Python原生

说了这么多,展示的都是网页端的结果,没有一个是能通过Python调用的。你可能会问,这玩意不是Python编写的吗?怎么没有提供Python API?

别急,接下来我们就来介绍它最常用的部分——BaiduSpider Python原生。

比如,我想要搜索关于git的结果,通过Python API调用就只有这么几行代码:

from baiduspider import BaiduSpider
from pprint import pprint

spider = BaiduSpider()
pprint(spider.search_web('git'))

没错,BaiduSpider也发布了PyPI包!让我们看一下这段代码的运行结果如何:

{'results': [{'result'100000000'type''total'},
             {'results': ['git教程',
                          'github中文官网网页',
                          '小奶猫回家地址github',
                          'git新手教程',
                          'git通俗一点是干什么的',
                          'github官网切换中文',
                          'git提交代码的正确步骤',
                          'Git使用教程',
                          '游戏源码'],
              'type''related'},
             {'des''Git is a free and open source distributed version '
                     'control system designed to handle everything from small '
                     'to very larg...',
              'origin''git-scm.com/',
              'time'None,
              'title''git官网',
              'type''result',
              'url''http://www.baidu.com/link?url=io2eYwa4OovMW42jQtlgSYuRE1emLSXzGNikMbmxYTe'},
             {'des''Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 '
                     'Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码...',
              'origin''www.runoob.com/git/git-tutori....',
              'time'None,
              'title''Git 教程 | 菜鸟教程',
              'type''result',
              'url''http://www.baidu.com/link?url=iTkBZk7h5QyDo6J8fmT4c4ufn7zJnEUhB0fXyBYBg334qXZ4GzWIpu-eV4hqjpk3hYjFlNZZwUPcO9u3nH8xL_'},
             {'des''Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。Git 是 '
                     'Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码...',
              'origin'None,
              'time'None,
              'title''git安装相关博客',
              'type''result',
              'url''http://www.baidu.com/link?url=Q-zaj4E2-_jaO-ZR5DTM2U8r8ZH3_8JuPtsKgXllLcVQW-4H40hBzIFqcgoByjmrN-jr7_WtIP9Cp55C-nLR2A4LNtpcHCgrBjCs0bUPZHC'},
             {'des''If you already have Git installed, you can get the '
                     'latest development version via Git itself: git clone '
                     'https://github.com/git/git ...',
              'origin''www.git-scm.com/download/',
              'time'None,
              'title''Git - Downloads',
              'type''result',
              'url''http://www.baidu.com/link?url=ITh8cnvqErJCQx9ICLrJed8f5hGCEU5JLpVoK1MsUPqqsl5sPnlhfCL8OjxuQLSN'},
             {'des''If you already have Git installed, you can get the '
                     'latest development version via Git itself: git clone '
                     'https://github.com/git/git ...',
              'origin'None,
              'time'None,
              'title''Git-开源的分布式版本控制系统',
              'type''result',
              'url''http://www.baidu.com/link?url=Tft8L7Dd71mQxbWpuJO7SpT2HR2RDgkQLNSEnk_MxaPQ6ZML0TUpgflG9DOvTGzND3olfU9ScMKmPDKRLO_l33vHKTGNMmwv89PgOFiVmP_'},
             {'des''Git Source Code Mirror - This is a publish-only '
                     'repository and all pull requests are ignored. Please '
                     'follow Documentation/SubmittingPatches procedure for ...',
              'origin''github',
              'time'None,
              'title''GitHub - git/git: Git Source Code Mirror - This is a '
                       'p...',
              'type''result',
              'url''http://www.baidu.com/link?url=KtsMqw1oBIWWlkZDnq2Y5P1tdu33Uy0n9y5ZYUufiG_ab_m6ky41KrZUkYbXf2gC'},
             {'des''git Git Source Code Mirror - This is a publish-only '
                     'repository and all pull requests are ignored. Please '
                     'follow Documentation/SubmittingPat...',
              'origin''github',
              'time''2021年1月2日',
              'title''Git · GitHub',
              'type''result',
              'url''http://www.baidu.com/link?url=rxFpc1Ymkb4RTcvH19Qg1VEcf62S5T6eMpHw7v3Xz5W'},
             {'des''最近要与部门同事一起做技术分享,我选择了Git,因为Git '
                     '是一种在全球范围都广受欢迎的版本控制系统。在开发过程中,为了跟踪代码,文档,项目等信息中的变化,版本控制...',
              'origin''博客园',
              'time'None,
              'title''一个小时学会Git - 张果 - 博客园',
              'type''result',
              'url''http://www.baidu.com/link?url=q2JO9SIY9y_8Cvs8mMfkXKUF1pY8HCaS0v1FYPQhzvOncl4HxlUXoVuJXsds_WdG3ibcwYf7JNwuWWGhP00xF_'},
             {'des''We bring the awesome Git VCS to Windows',
              'origin''gitforwindows.org/',
              'time'None,
              'title''这里下载git - Git for Windows',
              'type''result',
              'url''http://www.baidu.com/link?url=LJMKB611S4QxZWM5lSLUL2K0ta4zYMZUtzrdx6bvixWSUDtXkBg1Izu5M2CoU3yP'}],
 'total'10}

可以看出,所有结果都已经分好了类(此处主要是普通的搜索结果),并且还有总计搜索结果数、总页数等附加信息。所有BaiduSpider方法的返回值都是一个dict,里面有resultstotal两个键,分别代表所有搜索结果(list),和总页数(int)。

最后

看到这里,你是不是已经想见识一下这个神器了呢?什么?多少钱?不,它是免费的!它不仅免费,而且还开源呢。不仅如此,它也提供详细的文档(部分还在撰写中),可以说是“配套齐全”啦。

GitHub地址:

https://github.com/BaiduSpider/BaiduSpider

文档地址:

https://baiduspider.github.io

文中提到的网页版地址(目前还在Alpha阶段,请适量使用,仅作为demo用途):https://baidus.netlify.app


本篇由作者:samzhangjy 投稿,不妨大家可以给他的 GitHub 点个 Star 支持一下。

如果你也有原创博文投稿的打算,欢迎大家通过本公众号后台回复:「原创投稿」查看详情。

推荐阅读

不懂送女朋友什么牌子的口红?没关系!Python 数据分析告诉你。

利用 Python 爬取了 13966 条运维招聘信息,我得出了哪些结论?

利用 Python 爬取了 37483 条上海二手房信息,我得出的结论是?

总说手机没有“好壁纸”,Python一次性抓取500张“美女”图片,够不够用!

Python 爬取链家成都二手房源信息 asyncio + aiohttp 异步爬虫实战

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存