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()'))
```