etree模塊可以用xpath方法提出網頁數據,而pyquery模塊常用css方法來提取
-
pyquery
from pyquery import PyQuery as pq import requests response = requests.get('http://www.baidu.com') html_str = response.content.decode() # 構造PyQuery實例,類型為:pyquery.pyquery.PyQuery doc = pq(html_str) doc('td.id')doc('td.ip') 為pyquery.pyquery.PyQuery類型,根據標簽td ,類名為ip選擇到的標簽
-
這種類型有幾種常用方法
- .find() : -- 根據標簽名稱尋找,返回pyquery.pyquery.PyQuery類型--
- remove() : --刪除對應標簽--
- items() : --返回一組生成器,為pyquery.pyquery.PyQuery類型,如果直接遍歷得到的是element類型,這時就要用到這個方法--
- text() : --返回文本--
remove()方法可以去掉網頁的一些雜質
doc('td.ip').find('p').remove() # p標簽直接刪除掉了,doc('td.id')里邊已經沒有p標簽了
doc('td.ip').find('p')
[out]: [] # 標簽為空
· # 然后我們就能得到相應的數據:
for td in doc('td.ip').items:
td.text().replace(' ', '' )
- etree
etree.Element() 生成一個element元素,這個元素具有xpath方法,可以用路徑搜索元素
-詳細內容參見:http://www.cnblogs.com/pangblog/p/3275738.html
###假設xml是獲取的網頁元素,要去除掉 <td class="ip">下邊的p標簽,不能用可pyquery一樣的方法,**要用父類元素移除**。
p_list = xml.xpath('//td[@class="ip"]//p]')
for p in p_list:
p.getparent().remove(p) # 有父類元素來移除
補充
11/20日,發現直接移除也是有方法的,用drop_tree()
- 獲取文本
- text() : 獲取單個文本,每個子元素的文本放一個列表里邊
- string() : 獲取所有文本
for ip in xml.xpath('//td[@class="ip"]'):
# 打印所有文本內容
print(ip.xpath('string()'))
```
