一个能够屏蔽百度广告的爬虫:BaiduSpider
作者: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
,里面有results
和total
两个键,分别代表所有搜索结果(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 条上海二手房信息,我得出的结论是?