前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >xpath 和 pyquery

xpath 和 pyquery

作者头像
谢伟
发布2018-06-06 13:27:32
1.8K0
发布2018-06-06 13:27:32
举报
文章被收录于专栏:GopherCoder

主题:

**xpath 和 pyquery **

xpath
  • 选取节点

表达式

描述

实例

介绍

nodename

选取nodename节点的所有子节点

xpath("//div")

/

从根节点选取

xpath('/div')

//

选取所有的当前节点,不考虑位置

xpath("//div")

.

选取当前节点

xpath(‘./div’)

选取当前节点下的div节点

..

选取当前节点的父节点

xpath(‘..’)

回到上一个节点

@

选取属性

xpath(’//@calss’)

选取所有的class属性

  • 谓语

表达式

结果

xpath(‘/body/div[1]’)

选取body下的第一个div节点

xpath(‘/body/div[last()]’)

选取body下最后一个div节点

xpath(‘/body/div[last()-1]’)

选取body下倒数第二个div节点

xpath(‘/body/div[positon()<3]’)

选取body下前两个div节点

xpath(‘/body/div[@class]’)

选取body下带有class属性的div节点

xpath(‘/body/div[@class=”main”]’)

选取body下class属性为main的div节点

xpath(‘/body/div[price>35.00]’)

选取body下price元素值大于35的div节点

  • 通配符

表达式

结果

xpath(’/div/*’)

选取div下的所有子节点

xpath(‘/div[@*]’)

选取所有带属性的div节点

  • 取多个路径

表达式

结果

xpath(‘//div|//table’)

选取所有的div和table节点

  • xpath轴

轴名称

表达式

描述

ancestor

xpath(‘./ancestor::*’)

选取当前节点的所有先辈节点(父、祖父)

ancestor-or-self

xpath(‘./ancestor-or-self::*’)

选取当前节点的所有先辈节点以及节点本身

attribute

xpath(‘./attribute::*’)

选取当前节点的所有属性

child

xpath(‘./child::*’)

返回当前节点的所有子节点

descendant

xpath(‘./descendant::*’)

返回当前节点的所有后代节点(子节点、孙节点)

following

xpath(‘./following::*’)

选取文档中当前节点结束标签后的所有节点

following-sibing

xpath(‘./following-sibing::*’)

选取当前节点之后的兄弟节点

parent

xpath(‘./parent::*’)

选取当前节点的父节点

preceding

xpath(‘./preceding::*’)

选取文档中当前节点开始标签前的所有节点

preceding-sibling

xpath(‘./preceding-sibling::*’)

选取当前节点之前的兄弟节点

self

xpath(‘./self::*’)

选取当前节点

  • 功能函数

1.png

使用xpath中,多结合功能函数和谓语的使用可以减少提取信息的难度

  • 总结
  1. 节点的遍历
  2. 属性的提取
  3. 文本的提取
pyquery

可以让你用jquery语法来对xml进行查询

  • 基本概念

2.png

1484385342126.png

  • 提取:Fiserv Inc
代码语言:javascript
复制
doc = PyQuery(html)
使用id标签
doc("#instrumentname").text()

'Fiserv Inc.'
  • 提取:NASDAQ: FISV
代码语言:javascript
复制
使用id标签
doc("#instrumentticker").text()
'NASDAQ: FISV'

使用class 标签
doc(".textdeemphasized").text()
'NASDAQ: FISV'

使用tagname 
doc("p").eq(0).text() # p元素包含很多个,eq(0)表示是第一个p元素
'NASDAQ: FISV'
  • 提取p元素
代码语言:javascript
复制
all_tag_p = doc("p").items()

for one in all_tag_p:
    print (one.text())

NASDAQ: FISV
Set Alerts
Find a Broker
Join TD Ameritrade
Market Index
After Hours
-- Quotes are delayed by 20 min
Jan 13, 2017, 4:44 p.m.
$
110.30

Change
0.00 0.00%
Volume
Volume 31,006
Quotes are delayed by 20 min
Previous close
...
  • 提取属性值attr
代码语言:javascript
复制
p_id = doc("p").attr("id")

'instrumentticker'

p_class = doc("p").attr("class")

'textdeemphasized'
  • 总结
  1. 获取标签值:tag
  2. 获取属性:#, .
  3. 获取文本:text()

做的绝大多数爬行就是对标签、属性、文本等的获取,关键是选择较好的适合自己的方法,当然各种方法的选择效率也不一样。我比较属性的是xpath, 然而当我接触到pyquery看下文档就差不多也能获取到自己需要的网页内容,接下来关键是熟悉的过程。

参考

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.01.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 主题:
    • xpath
      • pyquery
      • 参考
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档