by 閒歡
跟安裝其他庫一樣:
>>> pip3 install pyquery
安裝了之後,在程式裡面就可以引用了,引用方法跟其他庫類似:
from pyquery import pyquery as pq
pyquery 可以將 html 字串初始化為物件,也可以將 html 檔案初始化為物件,甚至可以將請求的響應初始化為物件。下面我們乙個個來介紹。
對於乙個標準的 html 字串,pyquery 可以直接初始化為物件:
html = """
"""doc = pq(html)
print(type(doc))
print(doc)
# 輸出結果
我們可以看到,html 字串初始化後,列印出來的是乙個 pyquery 物件。
如果我們的字串不是 html 格式內容,pyquery 會自動加上段落標籤將字串內容包裝成 html 內容。例如:
test = '''
this is a string
this is second row
'''doc = pq(test)
print(type(doc))
print(doc)
# 輸出結果
this is a string
this is second row
初始化檔案,只需要加個 filename 引數,指明 檔案路徑即可:
#filename引數為html檔案路徑
test_html = pq(filename='test.html')
print(type(test_html))
print(test_html)
# 輸出結果
如果檔案不是 html 檔案,那麼初始化的時候會自動加上 html 標籤。例如:
#filename引數為html檔案路徑
test_txt = pq(filename='test.txt')
print(type(test_txt))
print(test_txt)
# 輸出結果
this is a txt
我的 test.txt 檔案中只有一行內容: this is a txt。初始化完後,自動新增了 html 標籤。
response = pq(url='')
print(type(response))
print(response)
# 輸出結果
"""pseudo_doc = pq(html)
#找到含有python的li標籤
print(pseudo_doc("li:contains('五星')"))
#找到含有好的li標籤
print(pseudo_doc("li:contains('紅')"))
#找到含有啊的li標籤
print(pseudo_doc("li:contains('啊')"))
# 輸出結果
五星啊紅旗
五星啊迎風飄揚啊
我們可以看到,如果查詢的結果有多條記錄,那麼結果會將多條記錄拼在一起。當然,如果查詢的內容不存在,就會返回空。
我們可以按照條件在 pyquery 物件中查詢符合條件的標籤,類似於 beautifulsoup 中的 find 方法。
例如,我要查詢 id 為 container 的標籤:
#列印id為container的標籤
print(doc.find('#container'))
# 輸出結果
我要查詢 id 為 container 的標籤的子標籤,使用 children 方法就可以實現:
#列印id為container的標籤的子標籤
container = doc.find('#container')
print(container.children())
# 輸出結果
五星啊紅旗
迎風飄揚啊
查詢父標籤,我們可以用 parent 方法:
#列印id為container的標籤的父標籤
container = doc.find('#container')
print(container.parent())
# 輸出結果
查詢兄弟標籤,我們用 siblings 方法:
#列印class為li2的標籤的兄弟標籤
li2 = doc.find('.li2')
print(li2.siblings())
# 輸出結果
五星啊迎風飄揚啊
前面我們講的都是怎麼定位到標籤,這只是我們解析資料的第一步,接下來我們需要從標籤中提取我們需要的資訊。
如果你需要提取標籤的屬性值,可以用 .attr() 方法,例如:
#獲取li2的class屬性值
print(doc('.li2').attr('class'))
# 輸出結果
li2
如果你細腰提取標籤內的文字,我們可以用 .text() 方法,例如:
#獲取li2的文字
print(doc('.li2').text())
# 輸出結果
紅旗
如果要獲取某個標籤下面的所有文字(包含子標籤的),怎麼做?我們來看下個例子:
#獲取html標籤下面的所有文字
print(doc('html').text())
# 輸出結果
我愛我的祖國
china
五星啊紅旗
迎風飄揚啊
很簡單,我們只需要找到這個標籤,使用 .text() 方法。
如果我們要獲取某個標籤下面的所有文字,但是要排除某些標籤的文字,該怎麼做?我們來看下個例子:
#排除部分標籤文字
tag = doc('html')
tag.remove('title')
print(tag.text())
# 輸出結果
我愛我的祖國
五星啊紅旗
迎風飄揚啊
我們可以用 .remove() 來刪除某些標籤,上面例子中可以看到,我們把 title 標籤去掉了,title 標籤對應的內容 china 也就去掉了。
前面我們介紹了 pyquery 可以獲取**請求的 html 內容,並轉化為物件。我們在請求 url 時,或許會遇到需要附帶一些引數的情況,這些自定義的引數在 pyquery 請求時也是支援的,例如 cookies 和 headers,我們看例子:
cookies =
response = pq(url='',headers=headers,cookies=cookies)
print(response)
#返回(省略)
...
文中示例**:python-100-days-day067第67天 物件導向的宣告 封裝
有兩種宣告物件的方式.1 var obj new object 但是我們更提倡用第二種方法 字面量式宣告物件 2 var obj 1 doctype html 2 html lang en 3 head 4 meta charset utf 8 5 title title title 6head 7...
Python學習第67天(css中float屬性)
今天的學習場景很獨特,為了能早點回家看到兩位寶寶,特地到廣州坐飛機,所以在機場中學習真的還是不錯的,下面就說一下今天的核心內容float,因為太累了,看的內容較少。先來了解一下block元素和inline元素在文件流中的排列方式。block元素通常被現實為獨立的一塊,獨佔一行,多個block元素會各...
第19天 AWK詳解
awk是一種處理文字檔案的語言,是乙個強大的文字分析工具。舉例 1.所在路徑 root centos7 ll which awk lrwxrwxrwx.1 root root 4 may 10 13 05 usr bin awk gawk 2.基本用法 awk etc fstab 1指的是第幾列。舉...