使用Python爬蟲獲取table
本文將介紹如何使用Python爬蟲技術獲取網頁中的table,並對其進行處理和分析。
要獲取網頁中的table,首先需要用Python獲取網頁的源代碼。這裡我們推薦使用requests庫。
import requests
url = "https://example.com"
r = requests.get(url)
html = r.text
通過調用requests庫,我們先獲取了一個網頁的內容,並將其存儲在html變量中。
將網頁內容解析成BeautifulSoup對象,方便我們對其中的table進行提取和處理。所以需要安裝並使用BeautifulSoup庫。
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')
使用BeautifulSoup,我們將html解析成soup,這樣我們就能夠輕鬆有效地訪問和提取其中的元素和屬性。
提取網頁中的table,需要先找到table的標籤。通常情況下,table的標籤是<table>,但是有時候也可能是<tbody>、<tr>或<td>等標籤嵌套所組成的表格結構。
table = soup.find('table')
tbody = table.find('tbody')
rows = tbody.find_all('tr')
使用find方法可以找到第一個匹配的標籤,使用find_all方法可以找到所有匹配的標籤。上面的代碼就是先找到table標籤,再找到其中的tbody標籤,最後找到tbody中的所有tr標籤,即table中的所有行。
處理table一般包括以下幾個方面:
header = []
for th in rows[0].find_all('th'):
header.append(th.text.strip())
print(header)
在table中,第一行通常是表頭,包含了列名信息。通過遍歷第一行中的所有th標籤,並將th標籤中的文字內容添加到header列表中,我們就可以獲得表格的列名。
data = []
for row in rows[1:]:
row_data = []
for td in row.find_all('td'):
row_data.append(td.text.strip())
data.append(row_data)
print(data)
在table中,除了表頭,其餘行是表格數據,也就是我們要處理的內容。通過遍歷除第一行以外的所有行,並將每行中所有td標籤的內容添加到row_data列表中,我們就可以獲得表格的數據。
有時候我們需要對獲得的表格數據進行清洗處理,比如格式化數據、去除特殊字符等。
for row in data:
row[2] = row[2].replace('$', '').replace(',', '')
row[3] = float(row[3])
上面的代碼中,我們通過replace方法去除了數據中的美元符號和逗號,並使用float將數據從字符串類型轉換為浮點數類型。
最後,我們可以將處理後的表格數據存儲到文件或數據庫中。
import csv
with open('table_data.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(data)
上面的代碼中,我們使用csv庫將處理後的表格數據存儲到csv文件中。
通過以上幾個步驟,我們就可以使用Python爬蟲技術獲取網頁中的table,並進行處理和存儲。