一個(gè)能夠屏蔽百度廣告的爬蟲(chóng):BaiduSpider
優(yōu)采云 發(fā)布時(shí)間: 2022-05-07 07:14一個(gè)能夠屏蔽百度廣告的爬蟲(chóng):BaiduSpider
<p style="font-size: inherit;color: inherit;line-height: inherit;">作者:samzhangjy<br />來(lái)源:公眾號「杰哥的IT之旅」<br />ID:Jake_Internet</p>
前言
有時(shí)候做數據統計的時(shí)候,常常很難大而全地抓取一個(gè)頁(yè)面上所有的搜索結果,比如百度網(wǎng)頁(yè)搜索,有時(shí)候會(huì )有視頻欄,新聞欄,百科欄,等等。普通的爬蟲(chóng)都不能爬到這些,因為它們的結構跟普通搜索結果是完全不一樣的。但是,BaiduSpider可以,接下來(lái),我們來(lái)看下這期視頻:
BaiduSpider是一個(gè)能夠抓取百度各類(lèi)搜索結果的爬蟲(chóng),使用Python編寫(xiě)。它十分輕量,但是卻能夠準確地爬取各種類(lèi)型復雜的結果,包括我們上面所說(shuō)的視頻,新聞,百科等。
目前實(shí)現的功能有百度網(wǎng)頁(yè)搜索,百度圖片搜索,百度知道搜索,百度視頻搜索,百度資訊搜索,百度文庫搜索,百度經(jīng)驗搜索和百度百科搜索。
除此以外,BaiduSpider還擁有多種不同的平臺,目前有Python原生,Web UI和Web API,并且接下來(lái)還會(huì )推出BaiduSpider CLI,讓你在命令行里完成搜索。
主要功能
當然,上面才是它的一點(diǎn)點(diǎn)功能,它最大的賣(mài)點(diǎn)在于,它所爬取的所有搜索結果都沒(méi)有廣告!有了它,你就再也不用去安裝什么AdBlock,AdGuard啦!
但是,讓我們先來(lái)小試牛刀,看看它爬取搜索結果的準確度和完整度怎么樣吧。比如說(shuō),我們來(lái)搜索一下Python教程視頻:
對比一下百度搜索的頁(yè)面:
我們可以發(fā)現,BaiduSpider爬取到的信息是和百度一模一樣的(除去百度最后一個(gè)是廣告)!可見(jiàn)BaiduSpider的準確度。
廣告屏蔽
接下來(lái),我們來(lái)看看它處理廣告的能力:
幾乎一半都是廣告。。。再看看BaiduSpider的:
可以很直接地看出BaiduSpider屏蔽了所有右下角帶有廣告標簽的搜索結果,是不是十分大快人心……
基本功:Python原生
說(shuō)了這么多,展示的都是網(wǎng)頁(yè)端的結果,沒(méi)有一個(gè)是能通過(guò)Python調用的。你可能會(huì )問(wèn),這玩意不是Python編寫(xiě)的嗎?怎么沒(méi)有提供Python API?
別急,接下來(lái)我們就來(lái)介紹它最常用的部分——BaiduSpider Python原生。
比如,我想要搜索關(guān)于git的結果,通過(guò)Python API調用就只有這么幾行代碼:
from?baiduspider?import?BaiduSpider<br />from?pprint?import?pprint<br /><br />spider?=?BaiduSpider()<br />pprint(spider.search_web('git'))<br />
沒(méi)錯,BaiduSpider也發(fā)布了PyPI包!讓我們看一下這段代碼的運行結果如何:
{'results':?[{'result':?100000000,?'type':?'total'},<br />?????????????{'results':?['git教程',<br />??????????????????????????'github中文官網(wǎng)網(wǎng)頁(yè)',<br />??????????????????????????'小奶貓回家地址github',<br />??????????????????????????'git新手教程',<br />??????????????????????????'git通俗一點(diǎn)是干什么的',<br />??????????????????????????'github官網(wǎng)切換中文',<br />??????????????????????????'git提交代碼的正確步驟',<br />??????????????????????????'Git使用教程',<br />??????????????????????????'游戲源碼'],<br />??????????????'type':?'related'},<br />?????????????{'des':?'Git?is?a?free?and?open?source?distributed?version?'<br />?????????????????????'control?system?designed?to?handle?everything?from?small?'<br />?????????????????????'to?very?larg...',<br />??????????????'origin':?'git-scm.com/',<br />??????????????'time':?None,<br />??????????????'title':?'git官網(wǎng)',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=io2eYwa4OovMW42jQtlgSYuRE1emLSXzGNikMbmxYTe'},<br />?????????????{'des':?'Git 教程 Git 是一個(gè)開(kāi)源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。Git 是?'<br />?????????????????????'Linus?Torvalds?為了幫助管理?Linux?內核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼...',<br />??????????????'origin':?'www.runoob.com/git/git-tutori....',<br />??????????????'time':?None,<br />??????????????'title':?'Git?教程?|?菜鳥(niǎo)教程',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=iTkBZk7h5QyDo6J8fmT4c4ufn7zJnEUhB0fXyBYBg334qXZ4GzWIpu-eV4hqjpk3hYjFlNZZwUPcO9u3nH8xL_'},<br />?????????????{'des':?'Git 教程 Git 是一個(gè)開(kāi)源的分布式版本控制系統,用于敏捷高效地處理任何或小或大的項目。Git 是?'<br />?????????????????????'Linus?Torvalds?為了幫助管理?Linux?內核開(kāi)發(fā)而開(kāi)發(fā)的一個(gè)開(kāi)放源碼...',<br />??????????????'origin':?None,<br />??????????????'time':?None,<br />??????????????'title':?'git安裝相關(guān)博客',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=Q-zaj4E2-_jaO-ZR5DTM2U8r8ZH3_8JuPtsKgXllLcVQW-4H40hBzIFqcgoByjmrN-jr7_WtIP9Cp55C-nLR2A4LNtpcHCgrBjCs0bUPZHC'},<br />?????????????{'des':?'If?you?already?have?Git?installed,?you?can?get?the?'<br />?????????????????????'latest?development?version?via?Git?itself:?git?clone?'<br />?????????????????????'https://github.com/git/git?...',<br />??????????????'origin':?'www.git-scm.com/download/',<br />??????????????'time':?None,<br />??????????????'title':?'Git?-?Downloads',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=ITh8cnvqErJCQx9ICLrJed8f5hGCEU5JLpVoK1MsUPqqsl5sPnlhfCL8OjxuQLSN'},<br />?????????????{'des':?'If?you?already?have?Git?installed,?you?can?get?the?'<br />?????????????????????'latest?development?version?via?Git?itself:?git?clone?'<br />?????????????????????'https://github.com/git/git?...',<br />??????????????'origin':?None,<br />??????????????'time':?None,<br />??????????????'title':?'Git-開(kāi)源的分布式版本控制系統',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=Tft8L7Dd71mQxbWpuJO7SpT2HR2RDgkQLNSEnk_MxaPQ6ZML0TUpgflG9DOvTGzND3olfU9ScMKmPDKRLO_l33vHKTGNMmwv89PgOFiVmP_'},<br />?????????????{'des':?'Git?Source?Code?Mirror?-?This?is?a?publish-only?'<br />?????????????????????'repository?and?all?pull?requests?are?ignored.?Please?'<br />?????????????????????'follow?Documentation/SubmittingPatches?procedure?for?...',<br />??????????????'origin':?'github',<br />??????????????'time':?None,<br />??????????????'title':?'GitHub?-?git/git:?Git?Source?Code?Mirror?-?This?is?a?'<br />???????????????????????'p...',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=KtsMqw1oBIWWlkZDnq2Y5P1tdu33Uy0n9y5ZYUufiG_ab_m6ky41KrZUkYbXf2gC'},<br />?????????????{'des':?'git?Git?Source?Code?Mirror?-?This?is?a?publish-only?'<br />?????????????????????'repository?and?all?pull?requests?are?ignored.?Please?'<br />?????????????????????'follow?Documentation/SubmittingPat...',<br />??????????????'origin':?'github',<br />??????????????'time':?'2021年1月2日',<br />??????????????'title':?'Git?·?GitHub',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=rxFpc1Ymkb4RTcvH19Qg1VEcf62S5T6eMpHw7v3Xz5W'},<br />?????????????{'des':?'最近要與部門(mén)同事一起做技術(shù)分享,我選擇了Git,因為Git?'<br />?????????????????????'是一種在全球范圍都廣受歡迎的版本控制系統。在開(kāi)發(fā)過(guò)程中,為了跟蹤代碼,文檔,項目等信息中的變化,版本控制...',<br />??????????????'origin':?'博客園',<br />??????????????'time':?None,<br />??????????????'title':?'一個(gè)小時(shí)學(xué)會(huì )Git?-?張果?-?博客園',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=q2JO9SIY9y_8Cvs8mMfkXKUF1pY8HCaS0v1FYPQhzvOncl4HxlUXoVuJXsds_WdG3ibcwYf7JNwuWWGhP00xF_'},<br />?????????????{'des':?'We?bring?the?awesome?Git?VCS?to?Windows',<br />??????????????'origin':?'gitforwindows.org/',<br />??????????????'time':?None,<br />??????????????'title':?'這里下載git?-?Git?for?Windows',<br />??????????????'type':?'result',<br />??????????????'url':?'http://www.baidu.com/link?url=LJMKB611S4QxZWM5lSLUL2K0ta4zYMZUtzrdx6bvixWSUDtXkBg1Izu5M2CoU3yP'}],<br />?'total':?10}<br />
可以看出,所有結果都已經(jīng)分好了類(lèi)(此處主要是普通的搜索結果),并且還有總計搜索結果數、總頁(yè)數等附加信息。所有BaiduSpider方法的返回值都是一個(gè)dict,里面有results和total兩個(gè)鍵,分別代表所有搜索結果(list),和總頁(yè)數(int)。
最后
看到這里,你是不是已經(jīng)想見(jiàn)識一下這個(gè)神器了呢?什么?多少錢(qián)?不,它是免費的!它不僅免費,而且還開(kāi)源呢。不僅如此,它也提供詳細的文檔(部分還在撰寫(xiě)中),可以說(shuō)是“配套齊全”啦。
GitHub地址:
文檔地址:
文中提到的網(wǎng)頁(yè)版地址(目前還在A(yíng)lpha階段,請適量使用,僅作為demo用途):
本篇由作者:samzhangjy 投稿,不妨大家可以給他的 GitHub 點(diǎn)個(gè) Star 支持一下。