一個能夠屏蔽百度廣告的爬蟲:BaiduSpider
作者:samzhangjy
來源:公眾號「杰哥的IT之旅」
ID:Jake_Internet
前言
有時候做數(shù)據(jù)統(tǒng)計的時候,常常很難大而全地抓取一個頁面上所有的搜索結果,比如百度網(wǎng)頁搜索,有時候會有視頻欄,新聞欄,百科欄,等等。普通的爬蟲都不能爬到這些,因為它們的結構跟普通搜索結果是完全不一樣的。但是,BaiduSpider可以,接下來,我們來看下這期視頻:
BaiduSpider是一個能夠抓取百度各類搜索結果的爬蟲,使用Python編寫。它十分輕量,但是卻能夠準確地爬取各種類型復雜的結果,包括我們上面所說的視頻,新聞,百科等。
目前實現(xiàn)的功能有百度網(wǎng)頁搜索,百度圖片搜索,百度知道搜索,百度視頻搜索,百度資訊搜索,百度文庫搜索,百度經(jīng)驗搜索和百度百科搜索。
除此以外,BaiduSpider還擁有多種不同的平臺,目前有Python原生,Web UI和Web API,并且接下來還會推出BaiduSpider CLI,讓你在命令行里完成搜索。
主要功能
當然,上面才是它的一點點功能,它最大的賣點在于,它所爬取的所有搜索結果都沒有廣告!有了它,你就再也不用去安裝什么AdBlock,AdGuard啦!
但是,讓我們先來小試牛刀,看看它爬取搜索結果的準確度和完整度怎么樣吧。比如說,我們來搜索一下Python教程視頻:

對比一下百度搜索的頁面:

我們可以發(fā)現(xiàn),BaiduSpider爬取到的信息是和百度一模一樣的(除去百度最后一個是廣告)!可見BaiduSpider的準確度。
廣告屏蔽
接下來,我們來看看它處理廣告的能力:

幾乎一半都是廣告。。。再看看BaiduSpider的:

可以很直接地看出BaiduSpider屏蔽了所有右下角帶有廣告標簽的搜索結果,是不是十分大快人心……
基本功:Python原生
說了這么多,展示的都是網(wǎng)頁端的結果,沒有一個是能通過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也發(fā)布了PyPI包!讓我們看一下這段代碼的運行結果如何:
{'results':?[{'result':?100000000,?'type':?'total'},
?????????????{'results':?['git教程',
??????????????????????????'github中文官網(wǎng)網(wǎng)頁',
??????????????????????????'小奶貓回家地址github',
??????????????????????????'git新手教程',
??????????????????????????'git通俗一點是干什么的',
??????????????????????????'github官網(wǎng)切換中文',
??????????????????????????'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官網(wǎng)',
??????????????'type':?'result',
??????????????'url':?'http://www.baidu.com/link?url=io2eYwa4OovMW42jQtlgSYuRE1emLSXzGNikMbmxYTe'},
?????????????{'des':?'Git 教程 Git 是一個開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項目。Git 是?'
?????????????????????'Linus?Torvalds?為了幫助管理?Linux?內核開發(fā)而開發(fā)的一個開放源碼...',
??????????????'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 是一個開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項目。Git 是?'
?????????????????????'Linus?Torvalds?為了幫助管理?Linux?內核開發(fā)而開發(fā)的一個開放源碼...',
??????????????'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-開源的分布式版本控制系統(tǒng)',
??????????????'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?'
?????????????????????'是一種在全球范圍都廣受歡迎的版本控制系統(tǒng)。在開發(fā)過程中,為了跟蹤代碼,文檔,項目等信息中的變化,版本控制...',
??????????????'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}
可以看出,所有結果都已經(jīng)分好了類(此處主要是普通的搜索結果),并且還有總計搜索結果數(shù)、總頁數(shù)等附加信息。所有BaiduSpider方法的返回值都是一個dict,里面有results和total兩個鍵,分別代表所有搜索結果(list),和總頁數(shù)(int)。
最后
看到這里,你是不是已經(jīng)想見識一下這個神器了呢?什么?多少錢?不,它是免費的!它不僅免費,而且還開源呢。不僅如此,它也提供詳細的文檔(部分還在撰寫中),可以說是“配套齊全”啦。
GitHub地址:
https://github.com/BaiduSpider/BaiduSpider
文檔地址:
https://baiduspider.github.io
文中提到的網(wǎng)頁版地址(目前還在Alpha階段,請適量使用,僅作為demo用途):https://baidus.netlify.app
本篇由作者:samzhangjy 投稿,不妨大家可以給他的 GitHub 點個 Star 支持一下。
如果你也有原創(chuàng)博文投稿的打算,歡迎大家通過本公眾號后臺回復:「原創(chuàng)投稿」查看詳情。
推薦閱讀
不懂送女朋友什么牌子的口紅?沒關系!Python 數(shù)據(jù)分析告訴你。
利用 Python 爬取了 13966 條運維招聘信息,我得出了哪些結論?
利用 Python 爬取了 37483 條上海二手房信息,我得出的結論是?

