Python网页抓取教程
?— Python網頁抓取教程:循序漸進 —
抓取網頁入門其實挺簡單的。在之前的文章中我們介紹了怎么用C#和JAVA兩種方法來抓取網頁,這一期給大家介紹一種更容易,也是使用最廣泛的一種抓取方法,那就是Python。
說起Python,大家應該并不陌生,它是目前入門最簡單的一種方法了,因為它是一種面向對象的語言。Python的類和對象比任何其他語言都更容易使用。此外,Python存在許多庫,因而在Python中構建用于網頁抓取的工具輕而易舉。
在這篇Python網絡抓取教程中,我們將分步驟講解如何利用python來抓取目標數據。首先需要從頁面源獲取基于文本的數據,然后將其存儲到文件中并根據設置的參數對輸出進行排序。使用Python進行網頁抓取時還有一些更高級功能的選項,這些將在最后概述,并提供一些使用上的建議。按照教程下面概述的步驟進行操作,您將能知道如何進行網頁抓取。
Python網頁抓取教程適用于所有操作系統。不同系統安裝Python或開發環境時會略有不同,其它部分均無不同。
我們所說的網頁抓取是什么?
網絡抓取是收集公共數據的自動化過程。爬蟲會在幾秒鐘內自動從目標網站中提取大量公共數據。
#構建網絡爬蟲:Python準備工作
在整個網絡抓取教程中,將使用Python3.4以上版本,您可以此頁面下載。
準確的說,我們使用了3.8.3,但任何3.4+版本都應該可以正常運行我們下面用到的代碼。
對于Windows系統,安裝Python時確保選中“PATH安裝”。PATH安裝將可執行項添加到默認的Windows命令提示符可執行項搜索中。然后Windows將識別諸如“pip”或“python”之類的命令,而無需用戶將其指向可執行文件的目錄(例如C:/tools/python/.../python.exe)。如果您已經安裝了Python但沒有勾選復選框,只需重新運行安裝并選擇修改。在第二頁上選擇“添加到環境變量”即可。
了解Python庫
由于可用的許多有用的庫,使用Python進行網頁抓取很容易。
Python的一大優勢在于可供選擇的庫很多。這些網頁抓取用到的庫現在已經用于數以萬計的Python項目——僅在PyPI上,現在就有超過300,000個項目。您可以選擇多種類型的Python網頁抓取庫:
●Requests
●Beautiful Soup
●lxml
●Selenium
01#Requests庫
網頁抓取首先向網站服務器發送HTTP請求(例如POST或GET ),該請求會返回一個包含所需數據的響應。但是,標準Python HTTP庫難以使用,為了提高效率,需要大量代碼行,這進一步加劇了已經存在的問題。
與其他HTTP庫不同,Requests庫通過減少代碼行簡化了發出此類請求的過程,使代碼更易于理解和調試,而不會影響其有效性。使用pip命令就可以從終端內安裝該庫:
pip install requestsRequests庫提供了發送HTTPGET和POST請求的簡單方法。例如,發送HTTP Get請求的函數被恰當地命名為get():
import requests response = requests.get("https://oxylabs.io/”) print(response.text)如果需要發布表單,可以使用post()方法輕松完成。表單數據可以作為字典發送,如下所示:
form_data = {'key1': 'value1', 'key2': 'value2'} response = requests.post("https://oxylabs.io/ ", data=form_data) print(response.text)請求庫還會使那些需要進行身份驗證的代理變得非常容易使用。
proxies={'http': 'http://user:password@proxy.oxylabs.io'} response = requests.get('http://httpbin.org/ip', proxies=proxies) print(response.text)但是這個庫有一個局限性,它不解析提取的HTML數據,也就是說它不能將數據轉換成更易讀的格式進行分析。此外,它不能用于抓取純JavaScript編寫的網站。
02#Beautiful Soup
Beautiful Soup是一個Python庫,它與解析器一起從HTML中提取數據,甚至可以將無效標記轉換為解析樹。但是,該庫僅用于解析,不能以HTML文檔/文件的形式從網絡服務器請求數據。它主要與Python Requests庫一起使用。需要注意的是,Beautiful Soup可以輕松查詢和導航HTML,但仍需要解析器。以下示例演示了html.parser模塊的使用,該模塊是Python標準庫的一部分。
#Part 1–使用Requests獲取HTML
import requests url='https://oxylabs.io/blog' response = requests.get(url)#Part 2–查找元素
from bs4 import BeautifulSoup soup = BeautifulSoup(response.text, 'html.parser') print(soup.title)標題里的元素會輸出如下:
<h1 class="blog-header">Oxylabs Blog</h1>由于其導航、搜索和修改解析樹方法均很簡單,Beautiful Soup即使對于初學者也是十分不錯的一個庫,并且通常可以節省開發人員數小時的工作時間。例如,要輸出此頁面中的所有博客標題,就可以使用findAll()。在此頁面上,會找到所有h2大小,且類屬性為blog-card__content-title的博客標題。該信息可以配合findAll方法使用,如下所示:
blog_titles = soup.findAll('h2', attrs={"class":"blog-card__content-title"}) for title in blog_titles:print(title.text) # Output: # Prints all blog tiles on the pageBeautifulSoup還可以輕松使用CSS selectors。如果開發人員知道CSS selector,則無需學習find()或find_all()方法。以下是相同的示例,但使用的是CSS selectors:
blog_titles = soup.select('h2.blog-card__content-title') for title in blog_titles: print(title.text)雖然能解析有問題的HTML是該庫的主要功能之一,但它還提供了許多其它功能,包括檢測頁面編碼,更進一步提高從HTML文件中提取數據的準確性。
更重要的是,它可以輕松配置,只需幾行代碼,即可提取任何自定義的公開可用數據或識別特定的數據類型。我們的Beautiful Soup教程包含有關此配置和其他配置的更多信息,以及該庫的工作原理。
03#lxml
lxml是一個解析庫。它是一個快速、強大且易于使用的庫,適用于HTML和XML文件。此外,lxml是大量提取數據的理想選擇。然而,與Beautiful Soup不同的是,這個庫針對設計的不好的HTML可能會出現解析不了的情況。
可以使用以下pip命令從終端安裝lxml庫:
pip install lxml這個庫包含一個html模塊來處理HTML。但是,lxml庫首先需要HTML字符串。可以使用上一節中討論的Requests庫檢索此HTML字符串。一旦HTML可用,就可以使用下面的fromstring方法構建樹:
# After response = requests.get() from lxml import html tree = html.fromstring(response.text)現在可以使用XPath查詢此樹。繼續上一節中討論的示例,要獲取博客的標題,XPath將如下所示:
//h2[@class="blog-card__content-title"]/text()可以將此XPath提供給tree.xpath()函數。這將返回與此XPath匹配的所有元素。注意XPath中的text()函數。該函數會提取h2元素內的文本。
blog_titles = tree.xpath('//h2[@class="blog-card__content-title"]/text()') for title in blog_titles: print(title)假設您希望學習使用這個庫并將其集成到您的網絡抓取工作中,或者只是在您現有的專業知識基礎上學習更多知識。您可以參見更詳細的lxml教程。
04#Selenium
如上所述,一些網站是使用JavaScript編寫的,JavaScript是一種允許開發者動態填充字段和菜單的語言。這給只能從靜態網頁中提取數據的Python庫帶來了問題。事實上,當涉及到JavaScript時,Requests庫將無法使用。這個時候就是Selenium網絡抓取的用武之地。
這個Python網絡庫是一個開源的瀏覽器自動化工具(網絡驅動),它允許您自動執行諸如登錄社交媒體平臺之類的過程。Selenium廣泛用于在應用程序上測試案例或測試腳本。它在網頁抓取方面的優勢源于它能夠像任何瀏覽器一樣通過運行JavaScript來呈現網頁——標準的網絡爬蟲無法運行這種編程語言。目前Selenium已被開發人員廣泛使用。
Selenium需要三個組件:
●瀏覽器–支持的瀏覽器有Chrome、Edge、Firefox和Safari。
●瀏覽器驅動程序-請參閱此頁面以獲取驅動程序的鏈接。
●Selenium安裝包。
可以從終端安裝selenium包:
pip install selenium安裝后,可以導入瀏覽器的相應類。導入后,必須創建類的對象。注意,這將需要可執行驅動程序的路徑。Chrome瀏覽器示例如下:
from selenium.webdriver import Chrome driver = Chrome(executable_path='/path/to/driver')現在可以使用該get()方法在瀏覽器中加載任何頁面。
driver.get('https://oxylabs.io/blog')Selenium允許使用CSS Selectors和XPath來提取元素。以下示例使用CSS Selectors輸出所有博客標題:
blog_titles = driver.get_elements_by_css_selector(' h2.blog-card__content-title') for title in blog_tiles: print(title.text) driver.quit() # closing the browser通過運行JavaScript,Selenium可以處理動態顯示的任何內容,然后可用內置方法甚至Beautiful Soup對網頁內容進行解析。此外,它還可以模仿用戶的行為。
在網絡抓取中使用Selenium的唯一缺點是它會減慢過程,因為它必須先為每個頁面執行JavaScript代碼,然后才能對其進行解析。因此,它不適合大規模的數據提取。但是,如果您希望小規模提取數據或者不在乎數據提取速度,那么Selenium是一個不錯的選擇。
支持網頁抓取的Python庫比較
對于這次的Python網頁抓取教程,我們將使用三個重要的庫——BeautifulSoup v4、Pandas和Selenium。請提前安裝好這些庫。如果您收到“NameError:name* is not defined”,則可能存在沒安裝成功的庫。
#網絡驅動程序和瀏覽器
每個網絡爬蟲都會使用瀏覽器,因為它需要連接到目標URL。出于測試目的,我們強烈建議使用常規瀏覽器(或不是無頭瀏覽器),尤其是對于新手。查看編寫的代碼如何與應用程序交互可以進行簡單的故障排除和調試,也有助于更好地理解整個過程。
無頭瀏覽器可以在后面再使用,因為它們對于復雜的任務更有效。在本次網頁抓取教程中,我們將使用Chrome瀏覽器,其實整個過程用Firefox瀏覽器也幾乎相同。
首先,使用您喜歡的搜索引擎查找“Chrome(或Firefox)的網絡驅動”。記下您瀏覽器的當前版本。下載與您的瀏覽器版本匹配的網絡驅動程序。
如果適用,請選擇所需的軟件包,下載并解壓縮。將驅動程序的可執行文件復制到任何易于訪問的目錄即可。操作是否正確,后面運行程序的時候就知道了。
為我們的Python網絡爬蟲尋找良好的編碼環境
在我們進入本次網頁抓取教程的編程部分之前,需要采取最后一步:使用良好的編碼環境。有很多選擇,從簡單的文本編輯器(只需創建*.py文件并直接寫下代碼就足夠了),到功能齊全的IDE(集成開發環境)。
如果您已經安裝了Visual Studio Code,選擇這個IDE將是最簡單的選擇。否則,我強烈建議新手使用PyCharm,因為它幾乎沒有入門門檻,并且有直觀的用戶界面。后面我們將使用PyCharm用于網頁抓取教程。
在PyCharm中,右鍵單擊項目區域并“新建->Python文件”。給它取個好聽的名字!
Part 1 導入和使用庫
是時候使用我們之前安裝的所有包了:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriverPyCharm可能會以灰色顯示這些導入,因為它會自動標記未使用的庫。不要接受PyCharm刪除未使用的庫的建議。
首先,定義我們的瀏覽器。根據我們在“網絡驅動和瀏覽器”中選擇的網絡驅動,我們應該輸入:
driver = webdriver.Chrome(executable_path='c:\path\to\windows\webdriver\executable.exe') OR driver = webdriver.Firefox(executable_path='/nix/path/to/webdriver/executable')Part 2 選擇一個網址
Python網頁抓取需要查看網站的來源
在執行我們第一次測試運行之前,選擇一個URL。由于本次網頁抓取教程旨在創建一個基本應用程序,我們強烈建議您選擇一個簡單的目標URL:
●避開隱藏在Javascript元素中的數據。這些數據有時需要通過執行特定操作來觸發才能顯示。從Javascript元素中抓取數據需要更復雜的Python使用方法及邏輯。
●避開抓取圖像。圖像可以直接用Selenium下載。
●在進行任何抓取活動之前,請確保您正在抓取的是公共數據,并且絕不會侵犯第三方權利。另外,不要忘記查看robots.txt文件獲得指導。
選擇您要訪問的登錄頁面并將URL輸入到driver.get('URL')參數中。Selenium要求提供連接協議。因此,始終需要將“http://”或“https://”附加到URL上。
driver.get('https://your.url/here?yes=brilliant')嘗試通過單擊左下角的綠色箭頭或右鍵單擊編碼環境并選擇“運行”來進行測試運行。
點擊紅色指針指到的地方
如果您收到一條錯誤消息,指出文件丟失,請仔細檢查驅動程序“webdriver.*”中提供的路徑是否與可執行網絡驅動的位置匹配。如果您收到版本不匹配的消息,請重新下載正確的可執行網絡驅動。
Part 3 定義對象和構建列表
Python允許編碼人員在不指定確切類型的情況下設計對象。可以通過簡單地鍵入其標題并分配一個值來創建對象。
# Object is “results”, brackets make the object an empty list. # We will be storing our data here. results = []Python中的列表是有序的、可變的并且允許復制列表中的成員。當然您也可以使用其他集合,例如集合或字典。但列表是最容易使用的。下面我們先來添加一些對象。
# Add the page source to the variable `content`. content = driver.page_source # Load the contents of the page, its source, into BeautifulSoup # class, which analyzes the HTML as a nested data structure and allows to select # its elements by using various selectors. soup = BeautifulSoup(content)我們回顧一下之前已經寫好的代碼:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] content = driver.page_source soup = BeautifulSoup(content)重新運行應用程序,不應顯示任何錯誤。如果出現任何問題,前面的章節中概述了一些可能的故障排除選項。
Part 4 使用Python網頁抓取工具提取數據
這部分有趣而又困難——從HTML文件中提取數據。由于幾乎在所有網頁下,我們都會從頁面的不同部分中提取需要的部分,并且我們希望將其存儲到列表中,因此我們需要處理每個小的部分,然后將其添加到列表中:
# Loop over all elements returned by the `findAll` call. It has the filter `attrs` given # to it in order to limit the data returned to those elements with a given class only. for element in soup.findAll(attrs={'class': 'list-item'}): ...“soup.findAll”可以接受各種參數。出于本教程的目的,我們僅使用“attrs”(屬性)參數。它允許我們通過設置一個語句“如果屬性等于X為真,則……”來縮小搜索范圍。很容易就能找到和使用尋找的類,我們下面將會用到該參數。
在繼續之前,讓我們在真實的瀏覽器中訪問所選的URL。然后使用CTRL+U(Chrome)打開頁面源代碼或右鍵單擊并選擇“查看頁面源代碼”。找到嵌套數據的“最近”類。另一種選擇是按F12打開開發者工具來選擇Element Picker。例如,它可以嵌套為:
<h4 class="title"><a href="...">This is a Title</a> </h4>我們的屬性“class”就是“title”。如果您選擇了一個簡單的目標,在大多數情況下,數據將以與上述示例類似的方式嵌套。獲取復雜的目標數據可能需要更多嘗試。讓我們回到編碼并添加我們在源代碼中找到的類:
# Change ‘list-item’ to ‘title’. for element in soup.findAll(attrs={'class': 'title'}):...我們的循環現在將遍歷頁面源中具有“title”類的所有對象。我們會處理每一個對象:
name = element.find('a')讓我們看看我們的循環是如何遍歷HTML的:
<h4 class="title"><a href="...">This is a Title</a> </h4>我們的第一個語句(在循環本身中)查找所有匹配標簽的元素,其“class”屬性包含“title”。然后我們在該類中執行另一個搜索。我們的第二次搜索查找文檔中的所有標簽(被包括在內,而像這樣的部分匹配則不被包括在內)。最后,對象被分配給變量“name”。
然后,我們可以將對象名稱分配給我們之前創建的列表數組“results”,但這樣做會將整個標簽及其內部的文本合并到一個元素中。在大多數情況下,我們只需要文本本身而不需要任何額外的標簽。
# Add the object of “name” to the list “results”. # `.text` extracts the text in the element, omitting the HTML tags. results.append(name.text)我們的循環將遍歷整個頁面源,找到上面列出的所有出現的類,然后將嵌套數據附加到我們的列表中:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] content = driver.page_source soup = BeautifulSoup(content) for element in soup.findAll(attrs={'class': 'title'}): name = element.find('a') results.append(name.text)請注意,循環后的兩個語句是縮進的。循環需要縮進來表示嵌套。任何一致的縮進都將被視為合法。沒有縮進的循環將輸出“IndentationError”報錯,并用“箭頭”指出違規語句。
Part 5 導出數據
Python網頁抓取需要不斷仔細地檢查代碼
即使在運行我們的程序時沒有出現語法或運行時的錯誤,仍然可能存在語義錯誤。您需要檢查我們獲得的數據是不是分配給指定對象并正確移動到數組的。
檢查您獲取的數據是否正確收集的最簡單方法之一是使用“print”。由于數組有許多不同的值,因此通常使用一個簡單的循環將每個條目分行進行輸出:
for x in results:print(x)在這一點上,“print”和“for”是配合使用的。我們只是為了快速測試和調試目的進行循環。直接輸出結果也是完全可行的:
print(results)到目前為止,我們的代碼應該是這樣的:
driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] content = driver.page_source soup = BeautifulSoup(content) for a in soup.findAll(attrs={'class': 'class'}): name = a.find('a') if name not in results:results.append(name.text) for x in results: print(x)現在運行我們的程序應該不會報錯,調試窗口中也應該會顯示獲取的數據。雖然“print”非常適合用于測試目的,但它對于解析和分析數據并不是很有用。
您可能已經注意到,到目前為止,“import pandas”仍然是灰色的。我們最終還是會充分利用庫。建議現在刪除“print”循環,因為接下來我們要做的事情與此類似,并且會將數據移動到csv文件。
df = pd.DataFrame({'Names': results}) df.to_csv('names.csv', index=False, encoding='utf-8')我們的兩個新語句依賴于pandas庫。我們的第一個語句創建了一個變量“df”并將其對象轉換為二維數據表。“Names”是我們列的名稱,而“results”是我們要輸出的列表。注意,pandas可以創建多個列,我們只是沒有足夠的列表來使用這些參數(目前)。
我們的第二個語句將變量“df”的數據移動到特定的文件類型(在本例中為“csv”)。我們的第一個參數為我們即將創建的文件分配一個名稱和一個擴展名。添加擴展名是必要的,否則“pandas”將輸出一個沒有擴展名的文件,并且必須手動更改。“索引”可用于為列分配特定的起始編號。“編碼”用于以特定格式保存數據。一般情況下使用UTF-8就足夠了。
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] content = driver.page_source soup = BeautifulSoup(content) for a in soup.findAll(attrs={'class': 'class'}): name = a.find('a') if name not in results:results.append(name.text) df = pd.DataFrame({'Names': results}) df.to_csv('names.csv', index=False, encoding='utf-8')現在所有導入的庫應該都不是灰色的了,并且運行我們的應用程序可以將“names.csv”輸出到我們的項目目錄中。注意,“Guesed At Parser”警告仍然存在。我們可以通過安裝第三方解析器來刪除它,但對于本Python網頁抓取教程而言,默認的HTML選項就可以了。
Part 6 更多清單
Python網頁抓取通常需要很多數據點
許多網頁抓取操作需要獲取多組數據。例如,僅提取電子商務網站上列出項目的標題幾乎沒用。為了收集有意義的信息并從中得出結論,至少需要兩個數據點。
出于本教程的目的不同,我們將嘗試一些稍微不同的代碼。由于從同一個類中獲取數據只是意味著一個額外的列表,我們應該嘗試從不同的類中提取數據,但同時保持我們表的結構。
顯然,我們需要另一個列表來存儲我們的數據。
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] other_results = [] for b in soup.findAll(attrs={'class': 'otherclass'}): # Assume that data is nested in ‘span’. name2 = b.find('span') other_results.append(name.text)由于我們將從HTML的不同部分提取額外的數據點,因此我們需要一個額外的循環。如果需要,我們還可以添加另一個“if”條件來控制重復條目:
最后,我們需要改變我們的數據表的形成方式:
df = pd.DataFrame({'Names': results, 'Categories': other_results})到目前為止,我們代碼的最新迭代應該是這樣的:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] other_results = [] content = driver.page_source for a in soup.findAll(attrs={'class': 'class'}): name = a.find('a') if name not in results:results.append(name.text) for b in soup.findAll(attrs={'class': 'otherclass'}): name2 = b.find('span') other_results.append(name.text) df = pd.DataFrame({'Names': results, 'Categories': other_results}) df.to_csv('names.csv', index=False, encoding='utf-8')現在可以試試看,如果一切順利,運行此代碼不會輸出任何錯誤。在某些情況下,“pandas”會輸出“ValueError:arrays must all be the same length”報錯消息。簡單來說,“results”和“other_results”列表的長度不相等,因此pandas無法創建二維表。
有多種方法可以解決該錯誤消息。從用“空”值填充最短列表到創建字典,再到創建兩個系列并列出它們。我們選擇第三種做法:
series1 = pd.Series(results, name = 'Names') series2 = pd.Series(other_results, name = 'Categories') df = pd.DataFrame({'Names': series1, 'Categories': series2}) df.to_csv('names.csv', index=False, encoding='utf-8')請注意,數據不會匹配,因為列表長度不均勻,但如果需要兩個數據點,創建兩個系列是最簡單的解決方法。我們的最終代碼應該是這樣的:
import pandas as pd from bs4 import BeautifulSoup from selenium import webdriver driver = webdriver.Chrome(executable_path='/nix/path/to/webdriver/executable') driver.get('https://your.url/here?yes=brilliant') results = [] other_results = [] content = driver.page_source soup = BeautifulSoup(content) for a in soup.findAll(attrs={'class': 'class'}): name = a.find('a') if name not in results:results.append(name.text) for b in soup.findAll(attrs={'class': 'otherclass'}): name2 = b.find('span') other_results.append(name.text) series1 = pd.Series(results, name = 'Names') series2 = pd.Series(other_results, name = 'Categories') df = pd.DataFrame({'Names': series1, 'Categories': series2}) df.to_csv('names.csv', index=False, encoding='utf-8')運行它會創建一個名為“names”的csv文件,其中包含兩列數據。
Part 7 使用Python進行網絡抓取
我們的第一個網絡抓取工具現在應該可以正常運行了。整個過程很基礎,也很簡單,所以執行一些重要的數據采集時需要編譯更完善的代碼。在進行更復雜的項目前,我強烈建議您嘗試一些附加功能:
●通過創建可生成偶數長度列表的循環來創建匹配的數據提取。
●一次性抓取多個URL。有很多方法可以實現這樣的功能。最簡單的選擇之一是簡單地重復上面的代碼并且每次更改URL。但是那樣很費時間,也會很枯燥。可以構建一個循環和一組要訪問的URL。
●另一種選擇是創建多個數組來存儲不同的數據集并將其輸出到具有不同行的一個文件中。一次抓取幾種不同類型的信息是電子商務數據獲取的重要組成部分。
●一旦運行了令人滿意的網絡爬蟲,您就不再需要在用瀏覽器查看,而是直接執行操作。獲取Chrome或Firefox瀏覽器的無頭版本,并使用它們來減少加載時間。
●創建爬取模式。想一想普通用戶如何瀏覽互聯網并嘗試模擬他們的操作。當然這里會需要新的庫。使用“import time”和“from random import randint”來創建頁面之間的等待時間。添加“scrollto()”或使用特定的按鍵輸入在瀏覽器中移動。在創建抓取模式時,很難列出所有可能的選項。
●創建監控流程。某些網站上的數據可能對時間(甚至用戶)敏感。嘗試創建一個持久的循環,以設定的時間間隔重新檢查某些URL并抓取數據。確保您獲取的數據始終是最新的。
●使用Python Requests庫。Requests是網絡抓取工具包中的重要組成部分,因為它允許優化發送到服務器的HTTP請求。
●最后,將代理集成到您的網絡爬蟲中。使用特定位置的請求源允許您獲取可能無法訪問的數據。
—— 總結 ——
看完我們的教程,您就可以自己寫一些代碼了。用Python構建網絡爬蟲、獲取數據并從大量信息中得出結論其實是一個復雜但有趣的過程。
如果您想了解有關代理或高級數據采集工具如何工作的更多信息,或特定網絡抓取案例,例如:網絡抓取職位發布信息或構建黃頁抓取工具的更多信息,請留意我們的微信,知乎和其它社交平臺。
我們準備了不少優質的文章:
關于如何在抓取時避免封鎖的更詳細指南、網絡抓取是否合法、什么是代理的深入討論等等!
總結
以上是生活随笔為你收集整理的Python网页抓取教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库可视化软件 安装 for wind
- 下一篇: Python 之数据类型