2020年8月18日 星期二

Python lib - 解析html

BeautifulSoup的使用

BeautifulSoup的第一個參數是將要解析的 HTML內容,可以是檔案,也可以是網路上傳回來的內容;第二個參數是決定使用哪個解析器來解析第一個參數的文本字符串。

預設情況下,Beautiful Soup會將當前文檔作為HTML格式解析,如果要解析XML文檔,要在 BeautifulSoup函式中第二個參數使用 “xml”。

「html.parser」 是 Python 內置的解析器,「lxml」 則是一個基於c語言開發的解析器,它的執行速度更快,不過它需要額外安裝。

使用方法:

bs = BeautifulSoup(html_doc, 'html.parser')

將完整個 HTML 結構經過排版後輸出,使用print(bs .prettify())

取得節點文字內容

用print(bs.title)可以輸出<title>標籤和內容;如果只要輸出內容,可以使用string,print(bs.title.string)。

搜尋某節點的所有內容

使用 find_all 找出所有特定的 HTML 標籤節點:

# 所有的超連結

a_tags = bs.find_all('a')

for tag in a_tags:

  print(tag.string) # 輸出超連結的文字

如果只找尋次一層的子節點,可以加上第二個參數 recursive=False 關閉遞迴搜尋功能。

取出節點屬性

for tag in a_tags:

  print(tag.get('href'))# 輸出超連結網址

同時搜尋多種標籤

tags = bs.find_all(["a", "b"], limit=2) # 搜尋所有超連結與粗體字

print(tags)

limit可以指定搜尋節點數量的上限值,這樣它就只會找出前幾個符合條件的節點。

只抓出第一個符合條件的節點,可以直接使用 find:

a_tag = soup.find("a")

print(a_tag)

解析HTML 檔案

想要用 Beautiful Soup 解析已經下載的 HTML 檔案,可以直接將開啟的檔案交給 BeautifulSoup 處理:

from bs4 import BeautifulSoup

with open("index.html") as f:

    soup = BeautifulSoup(f)# 從檔案讀取 HTML 程式碼進行解析

Ref:GTW


使用 Pandas 來撈資料

Pandas 一樣是 Python 套件,可以擷取 JSON、CSV、Excel 與 HTML 等等格式的資料。資料型態為 DataFrame 格式,可以使用 Index(Row) 或 Column 存取資料,整理資料的時候相當好用。

使用 Pandas 匯入資料

可以匯入 CSV、Excel 與 HTML 等多種格式,使用方式簡單如下:

import pandas as pd
data = pd.read_csv('file.csv')
data = pd.read_excel('file.xls', 'sheet')
data = pd.read_html('url')

然後可以參考 Pandas 網站上的 Visualization 章節,使用 Matplotlib API 繪圖。

Pandas 也提供data.describe()、data.corr()直接顯示統計資訊與相關係數。

直接利用 read_html 抓取網站資料,table = pandas.read_html('http://www.stockq.org/market/asia.php')[4],其中4代表第5個筆資料。

用 drop 指令把不要的 Row 與 Column 丟掉,留下想要的部份:

table = table.drop(table.columns[[0,1,2,3,4]],axis=0)

table = table.drop(table.columns[9:296],axis=1)



沒有留言:

張貼留言