2018-09-05 scrapy 分支xpath

0./能访问直接子节点,子孙节点是访问不了的

以上面的文档为例,我们一开始处于doc这个标签(就是整个文档最开始的地方),如果我们调用 /

来访问子节点的话,只能访问到html, head是html的子节点,所以这个方法如果单独使用使非常鸡肋

的,只有搭配 // 在文档中找一个特定的标签的时候会有奇效,但是即便如此,他返回的还是一个列表

还有一点,//A/B是找,所有A标签下,的所有的B标签,这和Beautiful.find不同,不论是怎样,他都

会把所有的,符合条件的元素筛选出来,而不是只选择一个

1.//A 从一整个文档中找到名字为A的标签,所有的标签,他返回的是一个列表,列表里面有所有的

标签名称为A的元素 直接直接电话和间接子节点都会被访问到,其实//和 / 的唯一区别在于有没有考

虑到层级关系

2、*表示统配符,所有的元素都搭配的上//*会返回文档中的所有内容

3.//DDD/B

  这个意思是,我们需要找到标签B,但是定语是,这是一个在DDD标签下的B

4./*/*/*/BBB这个表示我们想要找到BBB这个标签,但是这个标签有三个父级标签

5.方括号可以进一步制定元素,可以访问第几个比如

/AAA/BBB这是表示寻找在当前的子级节点下是否有AAA这个标签,且这个标签含有BBB这个标签

如果有是吧BBB全部返回的

但是有时候我们不需要所有的BBB只需要其中一个两个

/AAA/BBB[1]这表示我们选择了在/AAA标签下的第一个BBB

/AAA/BBB[last()]表示我们选择最后一个BBB元素

6.用@id可以用来查找属性比如//BBB[@id]就是查找有id这个属性的元素

      @*就是选择有属性的标签

      //BBB[not@*]是选择有没有属性的标签

7,starts-with函数

    ‘//a[start-with(@href,"http://")]’即可表示的是,找到标签A,且这个标签含有比http://开头的

href属性

8.  contain函数

    ‘//a[contain(@href,'http://')]’表示找到标签A,且这个标签有href属性,且这个属性包含http

这个字符串

9.  and函数

  xpath('//div[contains(@id,'test')] and contain(@id,'title')')

  这。。就是两个条件都要符合没啥说的

10.text()函数就获得一个标签的内容呗。

11.extract()

    被xpath的是一个selecter对象,用extract()提取其中的标签

你可能感兴趣的:(2018-09-05 scrapy 分支xpath)