Unleash the full potential of your business in the digital world


如何在5分鐘內使用Python進行網頁數據抓取

James Huang | 2021.07.08

網頁抓取

網路爬蟲是一種自動存取並從網站上提取大量信息的技術,可以節省大量時間和精力。在本文中,我們將通過一個簡單的例子介紹如何自動從紐約MTA下載數百個文件。這對於想要了解如何進行網路爬蟲的初學者來說是一個很好的練習。網路爬蟲可能有點令人生畏,因此本教程將分解該過程的方法。

我們將會從這個網站下載旋轉閘數據:

http://web.mta.info/developers/turnstile.html http://web.mta.info/developers/turnstile.html

從2010年5月到現在,每週都會彙編轉閘數據,因此網站上存在數百個.txt文件。手動右鍵單擊每個鏈接並保存到桌面會很痛苦。

關於網頁爬蟲的重要注意事項:

Read through the website’s Terms and Conditions to understand how you can legally use the data. Most sites prohibit you from using the data for commercial purposes.  Make sure you are not downloading data at too rapid a rate because this may break the website. You may potentially be blocked from the site as well.

檢查網站。

首先,我們需要找出在多層次的HTML標籤中我們可以定位到要下載的檔案的連結位置。簡單來說,在網站頁面上有很多代碼,我們希望找到包含我們數據的相關代碼片段。如果您不熟悉HTML標籤,請參考W3Schools教程。為了成功地進行網頁爬蟲,了解HTML的基礎知識非常重要。在網站上,右鍵單擊並單擊“檢查”。這允許您查看站點背後的原始代碼。一旦您點擊了“檢查”,您應該會看到這個控制台彈出。

如果您點擊這個箭頭,然後點擊網站的某個區域,該特定項目的代碼將在控制台中加亮。我已經點擊了第一個數據文件,即2018年9月22日星期六,控制台已用藍色加亮了該特定文件的鏈接。

<a href=”data/nyct/turnstile/turnstile_180922.txt”>2018年9月22日星期六</a>

請注意上面一行中所有的 .txt 檔案都在 <a> 標籤中。當您進行更多的網路爬蟲時,您會發現 <a> 用於超鏈接。

現在我們已經確定了連結的位置,讓我們開始編碼吧!

Python程式碼

我們首先導入以下庫。

進口請求

導入 urllib.request

輸入時間

從bs4模組匯入BeautifulSoup。

接下來,我們將URL設置為網站,並使用我們的請求庫訪問該站點。

url = 'http://web.mta.info/developers/turnstile.html'

回應 = requests.get(url)

接下來,我們使用BeautifulSoup解析HTML,使得我們可以使用更好、更嵌套的BeautifulSoup資料結構進行工作。如果您有興趣了解更多關於這個庫的資訊,請查看BeautifulSoup文件。

soup = BeautifulSoup(response.text, "html.parser") soup = BeautifulSoup(response.text, "html解析器")

我們使用方法.findAll以定位所有的<a>標籤。

soup.findAll('a')

此代碼提供我們包含標籤的每一行代碼。我們感興趣的資訊從第38行開始,如下所示。也就是說,第一個文字檔位於第38行,因此我們想要抓取下面的所有文字檔。

one_a_tag = soup.findAll('a')[38]

link = one_a_tag[‘href’] 連結=one_a_tag['href']

此代碼將第一個文本文件“data/nyct/turnstile/turnstile_180922.txt”保存到我們的變量連鏈。實際下載數據的完整URL實際上是“http://web.mta.info/developers/data/nyct/turnstile/turnstile_180922.txt”,我通過單擊網站上的第一個數據文件作為測試發現。我們可以使用urllib.request庫將此文件路徑下載到我們的計算機。我們向request.urlretrieve提供兩個參數:文件URL和文件名。對於我的文件,我將它們命名為“turnstile_180922.txt”,“turnstile_180901”等。

download_url = 'http://web.mta.info/developers/'+ link 下載網址= 'http://web.mta.info/developers/'+ link

urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:]) urllib.request.urlretrieve(download_url,'./'+link[link.find('/turnstile_')+1:])

既然我們了解如何下載一個檔案,讓我們試著使用 for 迴圈下載整個數據文件集。 

謝謝閱讀,祝大家愉快地進行網站資料採集!

如何在5分鐘內使用Python進行網頁數據抓取
MERCURY TECHNOLOGY SOLUTION, James Huang 8 7月, 2021
分享這個貼文
運營數字新聞室