tmlq能夠對 HTML 數據進行 sed 或 grep 操作。我們可以使用 htmlq 搜索、切片和過濾 HTML 數據。讓我們看看如何在 Linux 或 Unix 上安裝和使用這個方便的工具并處理 HTML 數據。 |
什么是htmlq?
htmlq類似于 jq,但用于 HTML。使用 CSS 選擇器從 HTML 文件中提取部分內容。在 CSS 中,選擇器用于定位我們想要設置樣式的網頁上的 HTML 元素。例如,我們可以使用此工具輕松提取圖像或其他 URL。
安裝htmlq
首先需要在系統中安裝cargo然后使用cargo來安裝htmlq:
[root@localhost ~]# yum -y install cargo
[root@localhost ~]# cargo install htmlq
設置可執行的路徑
確保將 $HOME/.cargo/bin 添加到 PATH 變量中,以便能夠使用 export 命令運行已安裝的二進制文件:
[root@localhost ~]# echo 'export PATH="$PATH:$HOME/.cargo/bin"' >> ~/.bash_profile
[root@localhost ~]# . ~/.bash_profile
如何使用 htmlq 從 HTML 文件中提取內容?
下面是使用curl和htmlq的用法:
curl -s url | htmlq '#css-selector'
curl -s url2 | htmlq '.css-selector'
curl -s https://www.linuxprobe.com | htmlq --pretty '#content' | more
讓我們找到頁面中的所有鏈接。例如:
[root@localhost ~]# curl -s https://www.linuxprobe.com | htmlq --attribute href a
人性化顯示HTML:
[root@localhost ~]# curl --silent https://mgdm.net | htmlq --pretty '#posts'
幫助手冊
使用下面命令查看幫助頁面:
[root@localhost ~]# htmlq --help
htmlq 0.3.0
Michael Maclean <michael@mgdm.net>
Runs CSS selectors on HTML
USAGE:
htmlq [FLAGS] [OPTIONS] [selector]...
FLAGS:
-B, --detect-base Try to detect the base URL from the <base> tag in the document. If not found, default to
the value of --base, if supplied
-h, --help Prints help information
-w, --ignore-whitespace When printing text nodes, ignore those that consist entirely of whitespace
-p, --pretty Pretty-print the serialised output
-t, --text Output only the contents of text nodes inside selected elements
-V, --version Prints version information
OPTIONS:
-a, --attribute <attribute> Only return this attribute (if present) from selected elements
-b, --base <base> Use this URL as the base for links
-f, --filename <FILE> The input file. Defaults to stdin
-o, --output <FILE> The output file. Defaults to stdout
ARGS:
<selector>... The CSS expression to select [default: html]
總結
htmlq能夠對 HTML 數據進行 sed 或 grep 操作。我們可以使用 htmlq 搜索、切片和過濾 HTML 數據。
蟲是Python的一個重要的應用,使用Python爬蟲我們可以輕松的從互聯網中抓取我們想要的數據,本文將基于爬取B站視頻熱搜榜單數據并存儲為例,詳細介紹Python爬蟲的基本流程。如果你還在入門爬蟲階段或者不清楚爬蟲的具體工作流程,那么應該仔細閱讀本文!
第一步:嘗試請求
首先進入b站首頁,點擊排行榜并復制鏈接
https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3
現在啟動Jupyter notebook
,并運行以下代碼
import requests
url = 'https://www.bilibili.com/ranking?spm_id_from=333.851.b_7072696d61727950616765546162.3'
res = requests.get('url')
print(res.status_code)
#200
在上面的代碼中,我們完成了下面三件事
導入requests
使用get
方法構造請求
使用status_code
獲取網頁狀態碼
可以看到返回值是200
,表示服務器正常響應,這意味著我們可以繼續進行。
第二步:解析頁面
在上一步我們通過requests向網站請求數據后,成功得到一個包含服務器資源的Response對象,現在我們可以使用.text
來查看其內容
可以看到返回一個字符串,里面有我們需要的熱榜視頻數據,但是直接從字符串中提取內容是比較復雜且低效的,因此我們需要對其進行解析,將字符串轉換為網頁結構化數據,這樣可以很方便地查找HTML標簽以及其中的屬性和內容。
在Python中解析網頁的方法有很多,可以使用正則表達式
,也可以使用BeautifulSoup
、pyquery
或lxml
,本文將基于BeautifulSoup進行講解.
Beautiful Soup是一個可以從HTML或XML文件中提取數據的第三方庫.安裝也很簡單,使用pip install bs4
安裝即可,下面讓我們用一個簡單的例子說明它是怎樣工作的
from bs4 import BeautifulSoup
page = requests.get(url)
soup = BeautifulSoup(page.content, 'html.parser')
title = soup.title.text
print(title)
# 熱門視頻排行榜 - 嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili
在上面的代碼中,我們通過bs4中的BeautifulSoup類將上一步得到的html格式字符串轉換為一個BeautifulSoup對象,注意在使用時需要制定一個解析器,這里使用的是html.parser
。
接著就可以獲取其中的某個結構化元素及其屬性,比如使用soup.title.text
獲取頁面標題,同樣可以使用soup.body
、soup.p
等獲取任意需要的元素。
第三步:提取內容
在上面兩步中,我們分別使用requests向網頁請求數據并使用bs4解析頁面,現在來到最關鍵的步驟:如何從解析完的頁面中提取需要的內容。
在Beautiful Soup中,我們可以使用find/find_all
來定位元素,但我更習慣使用CSS選擇器.select
,因為可以像使用CSS選擇元素一樣向下訪問DOM樹。
現在我們用代碼講解如何從解析完的頁面中提取B站熱榜的數據,首先我們需要找到存儲數據的標簽,在榜單頁面按下F12并按照下圖指示找到
可以看到每一個視頻信息都被包在class="rank-item"
的li標簽下,那么代碼就可以這樣寫
*請認真填寫需求信息,我們會在24小時內與您取得聯系。