scrapy相关

206 阅读2分钟

第一部分:xpath

一:基础语法

1.表达式:

nodename    # 节点名
/           # 若在起始位置,则表明从根节点选取node;若不在起始位置,表明选取子节点,本意都是选取全部子节点
//          # 从任意位置选取node节点
@           # 选取属性
*           # 通配符
.            #当前节点

2.谓语:

[n]                  # 第n个, -- eg:第一个[1]
[last()]             # 最后一个
[position()<n]       # 第n个位置之前的全部指定节点
node[@attr]          # 拥有attr属性的节点
node[@attr='val']    # 属性attr的值为val的节点
node[contains(@class, 'val')]    # class属性中包含val的节点

二:轴

A/child::B ==> A/B         # 选取A节点的子节点B
parent                     # 父节点
descendant                 # 所有后代节点
ancestor                   # 所有先辈节点
descendant-or-self         # 所有后代元素及其本身
preceding-sibling          # 所有先辈节点及其本身
following-sibling          # 当前节点后面的同级节点
preceding                  # 整个文档中,当前节点之前的所有节点
preceding-sibling          # 父节点中,当前节点之前的所有同级节点
following                  # 整个文档中,当前节点之后的所有节点
self                       # 当前节点本身
attribute                  # 当前节点的所有属性
namespace                  # 当前节点所有的命名空间

三:运算符

|          # 并集
+          # 加法
-          # 减法
*          # 乘法
div        # 除法
=          # 等于
!=         # 不等于
<          # 小于
<=         # 小于
>          # 大于
>=         # 大于等于
or         # 或
and        # 与
mod        # 取余

四:示例

question      # 选取所有 question 元素的所有子节点
/question     #选取根元素 question
question/a    # 选取 question 元素下所有为 a 的子元素
//div         # 选取所有的 div 元素,不论其出现在文档的任何地方
question//div # 选取 question 元素下所有的 div 后代元素 (/ 选取的是直接子元素,这里是所有的后代元素)
question//span/text() #选取 question 元素下所有 span 元素中的文本值
question//a/@href     #选取 question 元素下所有 a 元素中的 href 属性值。 @ 后面可以是任意属性名,均可以取到值

/question/div[1]        # 选取 question 的第一个 div 子元素。 注意这里第一个是从索引 1 开始的
/question/div[last()]   # 选取 question 第最后一个 div 子元素
/question/div[last()-1] # 选取 question 的倒数第二个 div 子元素
//div[@lang]            # 选取所有拥有lang 属性的 div 元素
//div[@lang='eng']      # 选取所有 lang 属性为 eng 的 div 元素

/div/*    # 选取属于 div 元素的所有子节点
//*       # 选取所有元素
//div/a | //div/p #选 取所有 div 元素的 a 元素或者 p 元素
//span | //input  # 选取文档中所有的 span 和 input 元素

五:补充

starts-with        #匹配一个属性开始位置的关键字
eg: //input[starts-with(@name,'name1')]     #查找name属性中开始位置包含'name1'关键字的页面元素
contains           #匹配一个属性值中包含的字符串
eg: //input[contains(@name,'na')]     #查找name属性中包含na关键字的页面元素


第二部分: 项目创建

1.