《開源精選》是我們分享Github、Gitee等開源社區中優質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的是一個使用 Python/ target=_blank class=infotextkey>Python 編寫的輕量級百度爬蟲——BaiduSpider。
BaiduSpider 是一個使用 Python 編寫的輕量級百度爬蟲。它基于 Requests 和 BeautifulSoup 構建,并提供了易用的 API 接口以及完善的類型注釋,提升開發者的使用體驗。
功能特性
- 節省提取數據的時間,對于類似深度學習項目的數據模型建立與訓練起到了良好的幫助
- 精準、快速地提取百度搜索結果,并刪除廣告
- 搜索結果大而全,支持多種搜索類型,支持多種返回類型
- 提供了簡潔易用的 API
安裝
依賴環境:
Python 3.6+
使用pip安裝:
$ pip install baiduspider
從 GitHub 手動安裝:
$ git clone git@github.com:BaiduSpider/BaiduSpider.git
# ...
$ python setup.py install
示例
百度網頁搜索,也可以作為綜合搜索使用。
BaiduSpider.search_web(
self: BaiduSpider,
query: str,
pn: int = 1,
exclude: list = [],
proxies: Union[dict, None] = None,
) -> WebResult
參數
- query str:要查詢網頁搜索的字符串
- pn int:要爬取的頁碼,默認為1,可選
- exclude dict:要屏蔽的子部件列表,可選
- time str | List[datetime.datetime]: 搜索時間范圍
- proxies Union[dict, None]: 代理配置,默認為None,可選
實例
基本的調用:這是一個最基本的參數—— query 。它用于傳遞搜索詞(字符串類型)。
# 導入BaiduSpider
from baiduspider import BaiduSpider
from pprint import pprint
# 實例化BaiduSpider
spider = BaiduSpider()
# 搜索網頁
pprint(spider.search_web(query="要搜索的關鍵詞").plain)
指定頁碼:你可以通過設置 pn 參數來更改 BaiduSpider 所獲取的頁碼。
from baiduspider import BaiduSpider
from pprint import pprint
spider = BaiduSpider()
# 搜索網頁,并傳入頁碼參數(此處為第二頁)
pprint(spider.search_web(query="要搜索的關鍵詞", pn=2).plain)
注意:傳入頁碼參數的時候一定要小心,務必不要傳入過大的頁碼,否則百度搜索會自動跳轉回第一頁。
屏蔽特定的搜索結果:這個參數可以為你提供很大的便捷。通過設置 exclude 列表,你可以屏蔽某些特定的網頁搜索子搜索結果來提高解析速度。
from baiduspider import BaiduSpider
from pprint import pprint
spider = BaiduSpider()
# 搜索網頁,并傳入要屏蔽的結果
# 在本樣例中,屏蔽了貼吧和博客
pprint(spider.search_web(query="要搜索的關鍵詞", exclude=["tieba", "blog"]).plain)
exclude 的值可以包含:["news", "video", "baike", "tieba", "blog", "gitee", "related", "calc"],分別表示:資訊,視頻,百科,貼吧,博客,Gitee代碼倉庫,相關搜索,計算。 exclude 的值也可以是["all"],表示屏蔽除了普通搜索結果外的所有搜索結果。實例:
from baiduspider import BaiduSpider
from pprint import pprint
spider = BaiduSpider()
# 搜索網頁,并傳入要屏蔽的結果
# 在本樣例中,屏蔽了所有非普通的搜索結果
pprint(spider.search_web(query="要搜索的關鍵詞", exclude=["all"]).plain)
如果 exclude 中包含all且還有其他參數,那么將按照只有all的方式過濾搜索結果。
按時間篩選: time 參數能夠實現更精準的搜索。 time 的取值可以是一個字符串或者是一個由 datetime.datetime 組成的元組。比如,使用字符串形式:
from baiduspider import BaiduSpider
from pprint import pprint
spider = BaiduSpider()
# 搜索網頁,僅顯示時間段內的搜索結果
# 在本樣例中,篩選后僅顯示一周內的搜索結果
pprint(spider.search_web(query="要搜索的關鍵詞", time="week").plain)
此功能使用百度內置的搜索時間篩選器篩選結果,并非使用程序篩選。在這個樣例中, time 的值是"week",代表篩選一周內的搜索結果。 time 的可選值如下:["day", "week", "month", "year"]。分別表示:一天內、一周內、一月內、一年內。除此以外,BaiduSpider 還支持自定義時間段。例如:
from baiduspider import BaiduSpider
from pprint import pprint
from datetime import datetime
spider = BaiduSpider()
# 在本樣例中,篩選后僅顯示2020.1.5 - 2020.4.9的搜索結果
pprint(spider.search_web(query="要搜索的關鍵詞", time=(datetime(2020, 1, 5), datetime(2020, 4, 9))).plain)
在這個樣例中, time 的值是一個元組(tuple)。元組的第一個值是起始時間,第二個值是結束時間。BaiduSpider會把他們都轉化成 time.time() 形式的浮點數(然后僅保留整數),所以你也可以將 datetime 替換為一個整數。
—END—
此項目使用GPL3.0開源協議,更多功能大家可自行前往閱讀。
開源地址:https://github.com/BaiduSpider/BaiduSpider