1. 程式人生 > >爬蟲入門【5】PyQuery簡介

爬蟲入門【5】PyQuery簡介

其他 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簡介