爬蟲入門【5】PyQuery簡介
阿新 • • 發佈:2017-11-19
其他 attr before lxml 移除 位置 方式 fin .org
PyQuery
目前最新的版本是1.3,基於最新版本進行介紹。
主要根據PyQuery的官方文檔進行了更新。
from pyquery import PyQuery as pq
from lxml import etree
import urllib
doc=pq(‘<p id="hello" class="hello"></p>‘)#解析文檔的基本方法
p=doc(‘p‘)#獲取p標簽
print(p.attr(‘id‘))#獲取p標簽的id屬性的值
p.attr(‘id‘,‘plop‘)#改變p標簽的id屬性的值為plop
print(p.attr(‘id‘))
p.attr.id =‘snow‘#使用python的方式改變id屬性
print(p.attr.id)
p.attr[‘id‘]=‘ola‘
print(p.attr[‘id‘])
p.attr(id=‘hello‘,class_=‘hello2‘)
print(p)
hello
plop
snow
ola
<p id="hello" class="hello2"/>
CSS內容
p.add_class(‘toto‘)#增加class內容
# print(p)
p.toggle_class(‘titi toto‘)#切換class內容
# print(p)
p.remove_class(‘titi‘)#移除class
# print(p)
#添加style,以font-size為例
p.css.font_size=‘16px‘
p.css[‘font-size‘]=‘16px‘
p.css={‘font-size‘:‘17px‘}
Manipulating
#向標簽內容的尾部添加一些string
p.append(‘ check out <a href="http://www.baidu.com">百度一下</a>‘)
#pp()
#也可以向標簽的頭部添加
p.prepend(‘hello again! ‘)
#pp()
#或者使用這兩個命令添加到其他文檔或者標簽的內容中
d=pq(‘<html><body><div id="test"><a href="http://python.org">python</a> !</div></body></html>‘ )
p.prepend_to(d(‘#test‘))#將p的內容添加到d的id為test的標簽裏面,占據最開始的位置
#print(d(‘#test‘).html())#打印出id為test的標簽的內容
p.insert_after(d(‘#test‘))#把p標簽放在id為test的標簽後面
#print(d(‘body‘).html())
p.insert_before(d(‘#test‘))#把p標簽插入到id為test的標簽前面
#print(d(‘body‘).html())#可以看出來,p插入到了id為test的標簽的前面
#移除一個元素
d=pq(‘<html><body><p id="id">Yeah!</p><p>python rocks !</p></div></html>‘)
d.remove(‘p#id‘)#移除了p標簽的id屬性
#print(d(‘body‘).html())
#將標簽的內容移除
d(‘p‘).empty()
#print(d(‘p‘))
#可以將兩個PyQuery對象連接起來:
print(pq(‘<div>Yeah !</div>‘).add_class(‘myclass‘) + pq(‘<b>cool</b>‘))
Traversing
d = pq(‘<p id="hello1" class="test1"><a>1</a></p><p id="hello2" class="test2"><a>2</a></p>‘)
#print(d(‘p‘).filter(‘.test1‘))#按類選擇,class名為test1的p標簽。
#print(d(‘p‘).filter(‘#hello2‘))#按id選擇,id名為hello2的p標簽
#print(d(‘p‘).eq(0))#第一個p標簽
#print(d(‘p‘).eq(1))#第二個p標簽
"""Return PyQuery of only the element with the provided index:
>>> d = PyQuery(‘<p class="hello">Hi</p><p>Bye</p><div></div>‘)
>>> d(‘p‘).eq(0)
[<p.hello>]
>>> d(‘p‘).eq(1)
[<p>]
>>> d(‘p‘).eq(2)
[]
"""
#查詢嵌套的元素
#print(d(‘p‘).find(‘a‘))
#print(d(‘p‘).eq(1).find(‘a‘))
API
http://pythonhosted.org/pyquery/api.html
請參考官方文檔的介紹。
Scraping
#PyQuery可以使用url載入html文檔,默認使用python的urllib庫
print(pq(‘http://www.baidu.com‘))
#如果安裝了request庫,也可以使用並且可以使用requests的大多參數
pq(‘http://duckduckgo.com/‘, headers={‘user-agent‘: ‘pyquery‘})
pq(‘https://duckduckgo.com/‘, {‘q‘: ‘foo‘}, method=‘post‘, verify=True)
如果您覺得感興趣的話,可以添加我的微信公眾號:一步一步學Python
爬蟲入門【5】PyQuery簡介