首頁 > 軟體

Python實戰使用XPath採集資料範例解析

2023-12-20 14:00:35

lxml

lxml 是 Python 的一個庫,用於解析和呈現 XML 和 HTML。它支援多種內建和第三方 XML 和 HTML 標記,例如 <a><img><form><ul><li><ol><dl><dt><dd> 等。lxml 還支援使用正規表示式來解析和呈現 XML 和 HTML。

本文我們就介紹lxml的使用方法,我們使用lxml獲取我們想要的資料。

傳送請求

首先,我們要進行資料來源分析,知道我們的需求是什麼?

明確需求:

  • 明確採集網站是什麼?
  • 明確採集資料是什麼?

我們都玩過4399小遊戲,我們想獲取遊戲名稱和遊戲連結,並儲存下來。首先,我們匯入相關的庫檔案。

import csv
import requests
from lxml import etree

接下來,我們可以傳送請求,獲取網頁原始碼,程式碼如下。

url = 'https://www.4399.com/flash_fl/2_1.htm'
headers = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36'
}
res = requests.get(url, headers=headers)
res.encoding = res.apparent_encoding

這段程式碼是一個 Python 的 requests 模組的範例程式碼,用於從 https://www.4399.com/flash_fl/2_1.htm 這個網站上獲取資料並將其轉換為 HTML 格式。

首先,我們定義了一個 url 變數,它包含了要從網站上獲取資料的 URL。然後,我們使用 headers 字典來設定請求頭,包括 user-agent 頭部,用於指定瀏覽器的 User-Agent 資訊。

接下來,我們使用 requests.get() 函數來傳送一個 HTTP GET 請求,並將 headers 字典作為請求頭傳遞給它。這個函數會返回一個 Response 物件,我們可以使用 res.encoding 屬性來獲取請求的編碼方式,並將其設定為 res.apparent_encoding,以便在輸出 HTML 時使用相同的編碼方式。

最後,我們將請求的編碼方式設定為瀏覽器的預設編碼方式,以便在輸出 HTML 時使用相同的編碼方式。

解析資料

接下來,我們用xpath解析資料。我們用開發者工具定位到標籤位置。

html_data = etree.HTML(res.text)
lis = html_data.xpath('//*[@class="bre m15"]//ul/li')
for li in lis:
    href = li.xpath('./a/@href')[0]
    title = li.xpath('./a/img/@alt')[0]

接下來,我們使用 html_data.xpath 方法來解析 HTML 檔案中的 ul 和 li 元素,並將它們儲存在 lis 變數中。

最後,我們使用 for 迴圈遍歷 lis,並使用 li.xpath 方法來獲取每個 li 元素的 a 元素的 href 和 alt 屬性,並將它們儲存在 href 和 title 變數中。 我們執行結果之後,我們還要對連結進行拼接。

儲存資料

接下來就是儲存資料,先寫入標頭檔案。

f = open('4399小遊戲.csv', mode='a', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=['遊戲名稱', '遊戲網站'])
csv_writer.writeheader()

這段程式碼中,我們首先使用 Python 的 open() 函數開啟了一個名為 "4399小遊戲.csv" 的檔案,檔案模式為 a,表示追加模式。

然後,我們使用 Python 的 csv 模組建立了一個名為 csv_writer 的 DictWriter 物件,並使用 writeheader() 方法來寫入表頭。

最後,我們使用 write() 方法向檔案中寫入資料,資料內容為一個字典物件。

這段程式碼的作用是將一個字典物件寫入到檔案中,其中包含了遊戲名稱和遊戲網站兩個欄位的資料。

需要注意的是,在寫入資料之前,我們需要使用 csv.DictWriter() 函數來建立一個 DictWriter 物件,並使用 fieldnames 引數來指定欄位名稱。此外,我們還需要使用 newline='' 引數來避免在 Windows 系統中出現換行符問題。 '''

dit = {
    '遊戲名稱': title,
    '遊戲網站': data_url,
}
csv_writer.writerow(dit)

'''

以上就是Python實戰使用XPath採集資料範例解析的詳細內容,更多關於Python XPath採集資料的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com