PyQuery 是仿照 jQuery 實(shí)現(xiàn)的,語(yǔ)法與 jQuery 幾乎完全相同,如果你熟悉 jQuery,又不想再記一套 BeautifulSoup (Python 爬蟲(chóng)(三):BeautifulSoup 庫(kù)) 的調(diào)用方法,那么 PyQuery 是一個(gè)很好的選擇。
1 準(zhǔn)備工作
1.1 安裝
使用如下終端命令安裝
pip install pyquery
安裝完成后導(dǎo)包
from pyquery import PyQuery as pq
1.2 初始化
傳入字符串
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
</body>
</html>
'''
doc = pq(html)
print(type(doc))
print(doc)
傳入文件
from pyquery import PyQuery as pq
doc= pq(filename='p.html')
print(type(doc))
print(doc)
傳入 lxml.etree
from pyquery import PyQuery as pq
from lxml import etree
doc = pq(etree.fromstring('<html><title>Hello PyQuery</title></html>'))
print(type(doc))
print(doc)
傳入 URL
from pyquery import PyQuery as pq
doc = pq('http://www.baidu.com')
print(type(doc))
print(doc)
2 快速上手
2.1 基本使用
獲取元素
首先,我們使用 PyQuery 的 CSS 選擇器獲取指定元素。示例如下:
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
</body>
</html>
'''
doc = pq(html)
# 獲取 ul
ul = doc('#container')
# 獲取 li
li = doc('ul li')
print(ul)
print(li)
遍歷元素
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
</body>
</html>
'''
doc = pq(html)
# 遍歷 li
lis =doc('li').items()
for li in lis:
print(li)
存在多個(gè)相同元素時(shí),獲取指定元素
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
</body>
</html>
'''
doc = pq(html)
lis =doc('li').items()
# 獲取第二個(gè) li
l2 = list(lis)[1]
print(l2)
獲取父、子、兄弟元素
PyQuery 可以通過(guò)方法直接獲取指定元素的父、子、兄弟元素。示例如下:
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul></ul>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
<ul></ul>
</body>
</html>
'''
doc = pq(html)
ul = doc('#container')
l2 = doc('#container .l2')
# 獲取 ul 父元素
ul_parent = ul.parent()
# 獲取 ul 子元素
ul_child = ul.children()
# 獲取第二個(gè) li 兄弟元素
l2_sib = l2.siblings()
print(ul_parent)
print(ul_child)
print(l2_sib)
獲取屬性、文本信息
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title name='title'>Hello PyQuery</title>
</head>
</html>
'''
doc = pq(html)
title =doc('title')
# 獲取 name 屬性
print(title.attr('name'))
# 獲取 title 標(biāo)簽文本信息
print(title.text())
獲取 html
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3</li>
</ul>
</body>
</html>
'''
doc = pq(html)
# 獲取 ul 中 html
ul =doc('ul')
print(ul.html())
2.2 偽類(lèi)選擇器
偽類(lèi)可以根據(jù)一個(gè)元素的特征進(jìn)行分類(lèi),下面通過(guò)示例了解下偽類(lèi)選擇器的使用。
from pyquery import PyQuery as pq
html = '''
<html>
<head>
<title>Hello PyQuery</title>
</head>
<body>
<ul id="container">
<li class="l1">l1</li>
<li class="l2">l2</li>
<li class="l3">l3last</li>
</ul>
</body>
</html>
'''
doc = pq(html)
# 設(shè)置起始位置
lis = doc('li:gt(-1)')
# 獲取第一個(gè) li
fli = doc('li:first-child')
# 獲取最后一個(gè) li
lli = doc('li:last-child')
# 獲取指定 li
l2 = doc('li:nth-child(2)')
# 獲取包含 last 的 li
cli = doc('li:contains("last")')
print(lis)
print(fli)
print(lli)
print(l2)
print(cli)
參考:
https:///pyquery/api.html
|