如何使用Python進(jìn)行網(wǎng)頁抓取 – 7款Python爬蟲庫
如何使用Python進(jìn)行網(wǎng)頁抓取 – 7款Python爬蟲庫
作為python開發(fā)人員,您可以使用許多Web抓取工具?,F(xiàn)在就來發(fā)現(xiàn)這些工具,并學(xué)習(xí)如何使用它們。
毫無疑問,Python是用于web抓取的最流行的編程語言,這與它易于學(xué)習(xí)和使用這一事實(shí)有關(guān),而且您還可以利用大量流行的web抓取庫和框架。作為一名Python開發(fā)人員,您需要了解這些工具,并學(xué)習(xí)如何使用它們來為web抓取任務(wù)編寫更好的代碼。
在本文中,您將學(xué)習(xí)用于構(gòu)建web scraper的最流行的Python庫和框架。您還將學(xué)習(xí)如何安裝它們以及如何進(jìn)行代碼測(cè)試。
Python Web爬蟲庫
Python Web抓取庫是為執(zhí)行Web抓取工作流中的特定任務(wù)而編寫的模塊和程序包,這些模塊和包可以發(fā)送HTTP請(qǐng)求,處理無頭瀏覽器以呈現(xiàn)JavaScript并模擬人機(jī)交互以及從下載頁面中解析出數(shù)據(jù)。
Urllib
Urllib是Python標(biāo)準(zhǔn)庫中的軟件包,帶有用于處理URL和HTTP請(qǐng)求的模塊。它帶有4個(gè)模塊,其中包括
urllib.request
用于處理HTTP請(qǐng)求,
urllib.error
其中包含由引發(fā)的異常
urllib.request
urllib.parse
用于解析URL,以及
urllib.robotparser
用于解析robots.txt文件的內(nèi)容,Urllib并不易于使用,但可以幫助您處理身份驗(yàn)證、Cookie、URL編碼和代理等。僅在需要對(duì)請(qǐng)求進(jìn)行高級(jí)控制時(shí),才應(yīng)使用此功能。
?如何安裝Urllib
如前所述,Urllib軟件包包含在標(biāo)準(zhǔn)python庫中,因此,無需再次安裝。只需將其導(dǎo)入您的代碼中并使用即可。
?Urllib代碼示例
下面的代碼會(huì)將GET請(qǐng)求發(fā)送到Wikipedia的主頁,并打印出響應(yīng)。響應(yīng)將是頁面的整個(gè)HTML。
import urllib.request as rq
get_content = rq.urlopen("https://en.wikipedia.org/wiki/Main_Page")
print(get_content.read().decode("utf-8"))
Python Requests
Python 請(qǐng)求庫被稱為Python HTTP for Humans,它是一種第三方庫,為了簡(jiǎn)化處理HTTP請(qǐng)求和URL的過程而引入。它建立在Urllib之上,并提供易于使用的界面。
除了比urllib易于使用之外,它還具有更好的文檔。說到流行性,可以說Requests是最受歡迎的Python庫之一,因?yàn)樗窍螺d次數(shù)最多的Python包。它支持國際化,會(huì)話cookie和身份驗(yàn)證,以及連接池和超時(shí),以及多部分文件上傳。
?如何安裝
Python Requests是第三方軟件包,因此,您需要先安裝它,然后才能使用它。建議的安裝方式是使用pip命令。
pip install requests
?Python請(qǐng)求代碼示例
下面的代碼將下載使用Urllib下載的同一頁面,因此即使您使用它們的高級(jí)功能時(shí)有所不同,您也可以進(jìn)行比較。
>> import requests
>>get_content = requests.get("https://en.wikipedia.org/wiki/Main_Page")
>> print(get_content.text)
Selenium
Selenium Web驅(qū)動(dòng)程序是一種瀏覽器自動(dòng)化工具,您可以完全使用它。它已經(jīng)在Web抓取工具中流行,因?yàn)樗梢杂糜趶腏avaScript豐富的網(wǎng)站抓取數(shù)據(jù)。諸如Python Requests庫和Scrapy之類的傳統(tǒng)工具無法呈現(xiàn)JavaScript,因此,您需要Selenium。
Selenium可用于自動(dòng)化大量瀏覽器,包括Chrome和Firefox。在無頭模式下運(yùn)行時(shí),您實(shí)際上不會(huì)看到瀏覽器處于打開狀態(tài),但是它將模擬瀏覽器環(huán)境中的操作。使用Selenium,您可以模擬鼠標(biāo)和鍵盤操作,訪問網(wǎng)站并刮取所需的內(nèi)容。
?如何安裝Selenium
要使用Selenium Web驅(qū)動(dòng)程序自動(dòng)化瀏覽器,需要滿足兩個(gè)要求。其中包括Selenium Python綁定和瀏覽器驅(qū)動(dòng)程序。在本文中,我們將使用Chrome,因此,您需要下載Chrome驅(qū)動(dòng)程序 -確保它適用于您使用的Chrome版本。安裝后,將其解壓縮并將chromedriver.exe文件與python腳本放置在同一目錄中。這樣,您就可以使用以下pip命令安裝selenium python綁定。
pip install requests
?Selenium代碼樣本
下面的代碼顯示了如何使用Selenium搜索Amazon。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.amazon.com/")
amazon_search = driver.find_element_by_id("twotabsearchtextbox")
amazon_search.send_keys("Web scraping for python developers")
amazon_search.send_keys(Keys.RETURN)
driver.close()
閱讀更多,
?Selenium代理設(shè)置:如何在Selenium上設(shè)置代理
?使用Selenium和代理構(gòu)建Web爬網(wǎng)程序
BeautifulSoup
BeautifulSoup是用于解析HTML和XML文件的解析庫。它將網(wǎng)頁文檔轉(zhuǎn)換為解析樹,以便您可以使用其Python方式遍歷和操作它。使用BeautiSoup,您可以解析HTML中可用的任何需要數(shù)據(jù)。重要的是要知道,BeautifulSoup沒有自己的解析器,位于其他解析器(如lxml,甚至html)之上。
在解析網(wǎng)頁數(shù)據(jù)時(shí),BeautifulSoup是最受歡迎的選擇。它易于學(xué)習(xí)和掌握。使用BeautifulSoup解析網(wǎng)頁時(shí),即使頁面HTML混亂且復(fù)雜,您也不會(huì)遇到問題。
?如何安裝BeautifulSoup
就像討論的其他庫一樣,您可以通過pip來安裝它。在命令提示符中輸入以下命令。
pip install beautifulsoup4
?BeautifulSoup代碼示例
下面的代碼可將尼日利亞的LGAs列表抓取并打印到控制臺(tái)。BeautifulSoup沒有下載網(wǎng)頁的功能,因此,我們將使用Python Requests庫。
import requests
from bs4 import BeautifulSoup
url = "https://en.wikipedia.org/wiki/Local_government_areas_of_Nigeria"
page_content = requests.get(url).text
soup = BeautifulSoup(page_content, "html.parser")
table = soup.find("table", {"class": "wikitable"})
lga_trs = table.find_all("tr")[1:]
for i in lga_trs:
tds = i.find_all("td")
td1 = tds[0].find("a")
td2 = tds[1].find("a")
l_name = td1.contents[0]
l_url = td1["href"]
l_state = td2["title"]
l_state_url = td2["href"]
print([l_name,l_url, l_state, l_state_url])
閱讀更多, 如何使用Beautifulsoup構(gòu)建一個(gè)簡(jiǎn)單的Python Web Scraper
Lxml
從該庫的名稱,您可以知道它與XML有關(guān)。實(shí)際上,它是一個(gè)解析器–確實(shí)是一個(gè)解析器,不像位于解析器頂部用作解析庫的BeautifulSoup。除了XML文件之外,lxml還可以用于解析HTML文件。您可能很想知道lxml是BeautifulSoup用來將網(wǎng)頁文檔轉(zhuǎn)換為要解析的樹的解析器之一。
LXML解析速度非常快。但是,很難學(xué)習(xí)和掌握。大多數(shù)Web抓取工具并不單獨(dú)使用它,而是將其用作BeautifulSoup使用的解析器。因此,實(shí)際上并不需要代碼示例,因?yàn)槟粫?huì)單獨(dú)使用它。
從這個(gè)庫的名稱可以看出,它與XML有關(guān)。實(shí)際上,它是一個(gè)解析器——一個(gè)真正的解析器,不像BeautifulSoup那樣位于解析器之上充當(dāng)解析庫。除了XML文件之外,lxml還可以用于解析HTML文件。lxml是BeautifulSoup用來將web頁面文檔轉(zhuǎn)換為要解析的樹的解析器之一。
在進(jìn)行解析時(shí),Lxml速度非??臁H欢?,它是很難學(xué)習(xí)和掌握的。大多數(shù)web抓取器并不單獨(dú)使用它,而是將它用作BeautifulSoup使用的解析器。因此,實(shí)際上不需要代碼示例,因?yàn)槟粫?huì)單獨(dú)使用它。
?如何安裝Lxml
Lxml可以在Pypi存儲(chǔ)庫中使用,因此,您可以使用pip命令來安裝它。下面是安裝lxml的命令。
pip install lxml
Python Web爬網(wǎng)框架
與僅用于一個(gè)功能的庫不同,框架是一個(gè)完整的工具,其中包含開發(fā)Web爬網(wǎng)程序時(shí)所需的大量功能,其中包括用于發(fā)送HTTP請(qǐng)求和解析請(qǐng)求的功能。
Scrapy
Scrapy是最流行的,并且可以說是最好的Web抓取框架,可以作為開源工具公開獲得。它是由Scrapinghub創(chuàng)建并仍在廣泛管理中。
Scrapy是一個(gè)完整的框架,它既負(fù)責(zé)發(fā)送請(qǐng)求,又負(fù)責(zé)解析下載頁面所需的數(shù)據(jù)。Scrapy是多線程的,是所有python框架和庫中速度最快的。它使得復(fù)雜的網(wǎng)頁抓取變得容易。但是,與之相關(guān)的一個(gè)問題是,它不能呈現(xiàn)和執(zhí)行JavaScript,因此需要使用Selenium或Splash。
?如何安裝Scrapy
Scrapy在Pypi上可用,因此,您可以使用pip命令安裝它。以下是在命令提示符/終端上運(yùn)行的命令,以下載并安裝Scrapy。
pip install scrapy
?Scrapy代碼示例
如前所述,Scrapy是一個(gè)完整的框架,并不具備簡(jiǎn)單的學(xué)習(xí)曲線。對(duì)于一個(gè)代碼示例,您需要編寫大量的代碼,并且在上面描述的情況下不像它那樣工作。想要了解Scrapy的代碼示例,請(qǐng)?jiān)L問Scrapy網(wǎng)站的官方教程頁面。
閱讀更多:Scrapy Vs Beautifulsoup Vs Selenium 網(wǎng)頁抓取
Pyspider
Pyspider是另一個(gè)為python程序員開發(fā)的網(wǎng)絡(luò)抓取框架,用于開發(fā)網(wǎng)絡(luò)抓取工具。Pyspider是一個(gè)功能強(qiáng)大的網(wǎng)絡(luò)爬網(wǎng)框架,可用于為現(xiàn)代網(wǎng)絡(luò)創(chuàng)建網(wǎng)絡(luò)抓取工具。與Scrapy不能自行呈現(xiàn)JavaScript的情況不同,Pyspider擅長(zhǎng)完成此工作。但是,在可靠性和成熟度方面,Scrapy遠(yuǎn)遠(yuǎn)領(lǐng)先于Pyspider。它支持分布式體系結(jié)構(gòu),并支持Python 2和Python3。它支持大量數(shù)據(jù)庫系統(tǒng),并帶有功能強(qiáng)大的WebUI,用于監(jiān)視爬蟲/爬蟲的性能。要使其運(yùn)行,它必須在服務(wù)器上。
Pyspider是另一個(gè)為python程序員開發(fā)web抓取器而編寫的web抓取框架。Pyspider是一個(gè)強(qiáng)大的web爬行框架,您可以使用它為現(xiàn)代web創(chuàng)建web抓取器。與Scrapy不自己渲染JavaScripts的情況不同,Pyspider在這方面做得很好。然而,在可靠性和成熟度方面,Scrapy遙遙領(lǐng)先于Pyspider。它支持分布式體系結(jié)構(gòu),并同時(shí)提供對(duì)Python 2和Python 3的支持。它支持大量的數(shù)據(jù)庫系統(tǒng),并帶有一個(gè)用于監(jiān)視perfo的強(qiáng)大WebUI。
?如何安裝Pyspider
可以使用下面的pip命令安裝Pyspider。
pip install pyspider
?PySpider代碼示例
以下代碼是Pyspider在其文檔頁面上提供的示例代碼。它在Scrapy主頁上抓取鏈接。
from pyspider.libs.base_handler import *
class Handler(BaseHandler):
crawl_config = {}
@every(minutes=24 * 60)
def on_start(self):
self.crawl("https://scrapy.org/", callback=self.index_page)
@config(age=10 * 24 * 60 * 60)
def index_page(self, response):
for each in response.doc('a][href^="http"]').items():
self.crawl(each.attr.href, callback=self.detail_page)
def detail_page(self, response):
return {"url": response.url, "title": response.doc('title').text()
如前所述,Pyspider在服務(wù)器上運(yùn)行。您的計(jì)算機(jī)是一臺(tái)服務(wù)器,并且會(huì)從本地主機(jī)監(jiān)聽,以此運(yùn)行。
pyspider
命令并訪問 http://localhost:5000/
相關(guān):
?最佳網(wǎng)頁抓取工具-終極網(wǎng)頁抓取工具列表!
?Web Scraping API提取數(shù)據(jù)(URL到數(shù)據(jù))
?針對(duì)非程序員的免費(fèi)Web搜刮軟件和擴(kuò)展
?如何抓取網(wǎng)站,永不列入黑名單!
結(jié)論
談到python編程語言中用于web抓取的工具、庫和框架的數(shù)量時(shí),您需要知道有很多。然而,你不可能每一個(gè)都去學(xué)習(xí)。如果你正在開發(fā)一個(gè)不需要復(fù)雜架構(gòu)的簡(jiǎn)單scraper,那么使用request和BeautifulSoup就可以了——如果站點(diǎn)使用javascript非常多,還可以加上Selenium。Selenium甚至可以單獨(dú)使用。然而,當(dāng)您希望開發(fā)一個(gè)復(fù)雜的web scraper或crawler時(shí),可以使用Scrapy這個(gè)框架。