极品少妇一区二区三区精品视频,国内精品免费午夜毛片,亚洲欧美电影一区二区,麻豆一区二区

如何使用Python進行網頁抓取 – 7款Python爬蟲庫

如何使用Python進行網頁抓取 – 7款Python爬蟲

作為python開發人員,您可以使用許多Web抓取工具?,F在就來發現這些工具,并學習如何使用它們。

毫無疑問,Python是用于web抓取的最流行的編程語言,這與它易于學習和使用這一事實有關,而且您還可以利用大量流行的web抓取庫和框架。作為一名Python開發人員,您需要了解這些工具,并學習如何使用它們來為web抓取任務編寫更好的代碼。

在本文中,您將學習用于構建web scraper的最流行的Python庫和框架。您還將學習如何安裝它們以及如何進行代碼測試。

Python Web爬蟲庫

Python Web抓取庫是為執行Web抓取工作流中的特定任務而編寫的模塊和程序包,這些模塊和包可以發送HTTP請求,處理無頭瀏覽器以呈現JavaScript并模擬人機交互以及從下載頁面中解析出數據。

Urllib

Urllib是Python標準庫中的軟件包,帶有用于處理URL和HTTP請求的模塊。它帶有4個模塊,其中包括
urllib.request

用于處理HTTP請求,
urllib.error

其中包含由引發的異常
urllib.request
urllib.parse

用于解析URL,以及
urllib.robotparser

用于解析robots.txt文件的內容,Urllib并不易于使用,但可以幫助您處理身份驗證、Cookie、URL編碼和代理等。僅在需要對請求進行高級控制時,才應使用此功能。
?如何安裝Urllib

如前所述,Urllib軟件包包含在標準python庫中,因此,無需再次安裝。只需將其導入您的代碼中并使用即可。
?Urllib代碼示例

下面的代碼會將GET請求發送到Wikipedia的主頁,并打印出響應。響應將是頁面的整個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 請求庫被稱為Python HTTP for Humans,它是一種第三方庫,為了簡化處理HTTP請求和URL的過程而引入。它建立在Urllib之上,并提供易于使用的界面。

除了比urllib易于使用之外,它還具有更好的文檔。說到流行性,可以說Requests是最受歡迎的Python庫之一,因為它是下載次數最多的Python包。它支持國際化,會話cookie和身份驗證,以及連接池和超時,以及多部分文件上傳。
?如何安裝

Python Requests是第三方軟件包,因此,您需要先安裝它,然后才能使用它。建議的安裝方式是使用pip命令。
pip install requests
?Python請求代碼示例

下面的代碼將下載使用Urllib下載的同一頁面,因此即使您使用它們的高級功能時有所不同,您也可以進行比較。
>> import requests

>>get_content = requests.get("https://en.wikipedia.org/wiki/Main_Page")

>> print(get_content.text)

Selenium

Selenium Web驅動程序是一種瀏覽器自動化工具,您可以完全使用它。它已經在Web抓取工具中流行,因為它可以用于從JavaScript豐富的網站抓取數據。諸如Python Requests庫和Scrapy之類的傳統工具無法呈現JavaScript,因此,您需要Selenium。

Selenium可用于自動化大量瀏覽器,包括Chrome和Firefox。在無頭模式下運行時,您實際上不會看到瀏覽器處于打開狀態,但是它將模擬瀏覽器環境中的操作。使用Selenium,您可以模擬鼠標和鍵盤操作,訪問網站并刮取所需的內容。
?如何安裝Selenium

要使用Selenium Web驅動程序自動化瀏覽器,需要滿足兩個要求。其中包括Selenium Python綁定和瀏覽器驅動程序。在本文中,我們將使用Chrome,因此,您需要下載Chrome驅動程序 -確保它適用于您使用的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代理設置:如何在Selenium上設置代理
?使用Selenium和代理構建Web爬網程序

BeautifulSoup

BeautifulSoup是用于解析HTML和XML文件的解析庫。它將網頁文檔轉換為解析樹,以便您可以使用其Python方式遍歷和操作它。使用BeautiSoup,您可以解析HTML中可用的任何需要數據。重要的是要知道,BeautifulSoup沒有自己的解析器,位于其他解析器(如lxml,甚至html)之上。

在解析網頁數據時,BeautifulSoup是最受歡迎的選擇。它易于學習和掌握。使用BeautifulSoup解析網頁時,即使頁面HTML混亂且復雜,您也不會遇到問題。
?如何安裝BeautifulSoup

就像討論的其他庫一樣,您可以通過pip來安裝它。在命令提示符中輸入以下命令。
pip install beautifulsoup4
?BeautifulSoup代碼示例

下面的代碼可將尼日利亞的LGAs列表抓取并打印到控制臺。BeautifulSoup沒有下載網頁的功能,因此,我們將使用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構建一個簡單的Python Web Scraper

Lxml

從該庫的名稱,您可以知道它與XML有關。實際上,它是一個解析器–確實是一個解析器,不像位于解析器頂部用作解析庫的BeautifulSoup。除了XML文件之外,lxml還可以用于解析HTML文件。您可能很想知道lxml是BeautifulSoup用來將網頁文檔轉換為要解析的樹的解析器之一。

LXML解析速度非???。但是,很難學習和掌握。大多數Web抓取工具并不單獨使用它,而是將其用作BeautifulSoup使用的解析器。因此,實際上并不需要代碼示例,因為您不會單獨使用它。

從這個庫的名稱可以看出,它與XML有關。實際上,它是一個解析器——一個真正的解析器,不像BeautifulSoup那樣位于解析器之上充當解析庫。除了XML文件之外,lxml還可以用于解析HTML文件。lxml是BeautifulSoup用來將web頁面文檔轉換為要解析的樹的解析器之一。

在進行解析時,Lxml速度非???。然而,它是很難學習和掌握的。大多數web抓取器并不單獨使用它,而是將它用作BeautifulSoup使用的解析器。因此,實際上不需要代碼示例,因為您不會單獨使用它。
?如何安裝Lxml

Lxml可以在Pypi存儲庫中使用,因此,您可以使用pip命令來安裝它。下面是安裝lxml的命令。
pip install lxml

Python Web爬網框架

與僅用于一個功能的庫不同,框架是一個完整的工具,其中包含開發Web爬網程序時所需的大量功能,其中包括用于發送HTTP請求和解析請求的功能。

Scrapy

Scrapy是最流行的,并且可以說是最好的Web抓取框架,可以作為開源工具公開獲得。它是由Scrapinghub創建并仍在廣泛管理中。

Scrapy是一個完整的框架,它既負責發送請求,又負責解析下載頁面所需的數據。Scrapy是多線程的,是所有python框架和庫中速度最快的。它使得復雜的網頁抓取變得容易。但是,與之相關的一個問題是,它不能呈現和執行JavaScript,因此需要使用Selenium或Splash。
?如何安裝Scrapy

Scrapy在Pypi上可用,因此,您可以使用pip命令安裝它。以下是在命令提示符/終端上運行的命令,以下載并安裝Scrapy。
pip install scrapy
?Scrapy代碼示例

如前所述,Scrapy是一個完整的框架,并不具備簡單的學習曲線。對于一個代碼示例,您需要編寫大量的代碼,并且在上面描述的情況下不像它那樣工作。想要了解Scrapy的代碼示例,請訪問Scrapy網站的官方教程頁面。

閱讀更多:Scrapy Vs Beautifulsoup Vs Selenium 網頁抓取

Pyspider

Pyspider是另一個為python程序員開發的網絡抓取框架,用于開發網絡抓取工具。Pyspider是一個功能強大的網絡爬網框架,可用于為現代網絡創建網絡抓取工具。與Scrapy不能自行呈現JavaScript的情況不同,Pyspider擅長完成此工作。但是,在可靠性和成熟度方面,Scrapy遠遠領先于Pyspider。它支持分布式體系結構,并支持Python 2和Python3。它支持大量數據庫系統,并帶有功能強大的WebUI,用于監視爬蟲/爬蟲的性能。要使其運行,它必須在服務器上。

Pyspider是另一個為python程序員開發web抓取器而編寫的web抓取框架。Pyspider是一個強大的web爬行框架,您可以使用它為現代web創建web抓取器。與Scrapy不自己渲染JavaScripts的情況不同,Pyspider在這方面做得很好。然而,在可靠性和成熟度方面,Scrapy遙遙領先于Pyspider。它支持分布式體系結構,并同時提供對Python 2和Python 3的支持。它支持大量的數據庫系統,并帶有一個用于監視perfo的強大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在服務器上運行。您的計算機是一臺服務器,并且會從本地主機監聽,以此運行。
pyspider

命令并訪問 http://localhost:5000/

相關:
?最佳網頁抓取工具-終極網頁抓取工具列表!
?Web Scraping API提取數據(URL到數據)
?針對非程序員的免費Web搜刮軟件和擴展
?如何抓取網站,永不列入黑名單!

結論

談到python編程語言中用于web抓取的工具、庫和框架的數量時,您需要知道有很多。然而,你不可能每一個都去學習。如果你正在開發一個不需要復雜架構的簡單scraper,那么使用request和BeautifulSoup就可以了——如果站點使用javascript非常多,還可以加上Selenium。Selenium甚至可以單獨使用。然而,當您希望開發一個復雜的web scraper或crawler時,可以使用Scrapy這個框架。

主站蜘蛛池模板: 石阡县| 巴中市| 泉州市| 扎鲁特旗| 京山县| 万山特区| 榕江县| 博乐市| 茂名市| 大连市| 札达县| 庆元县| 麻栗坡县| 九寨沟县| 佳木斯市| 集贤县| 维西| 昔阳县| 玉山县| 千阳县| 梁平县| 仪陇县| 伊通| 金塔县| 凉山| 娄底市| 林西县| 阿城市| 麻江县| 洞头县| 临泽县| 昭平县| 屏边| 莱阳市| 腾冲县| 望都县| 锦州市| 菏泽市| 四川省| 保康县| 闽侯县|