xpath和css的实战操作

在scrapy中使用selector对象提取页面中的数据,使用时会先通过XPath或CSS选择器选中页面要提取的数据,然后提取。

首先是定位,sel=response.css('....#.....'),属性#属性值,中间用#保险,用点有时不起作用。

xpath和css的实战操作


xpath有一些基本语法,下面通过例子展示XPath的使用。

xpath和css的实战操作

(5)sel.xpath('./h1/text()').extract()

'.'点表示从当前节点开始,所以写明'./',没有点,表示从一个根目录开始的绝对路径。

从当前节点开始,只选用一个子节点则用'/',表示相对路径,'//'表示绝对路径,表示该节点下的所有相关目录。

text( ),text后面要加括号的,而在CSS路径里则不需要加'( )'

extract(),extract会将结果提取收集到一个列表里;

extract_first(),只提取一个对象结果,所以会直接提取出Unicode字符,而不是列表。

(11)sel.xpath('/p[@id = "price_color"]').extract()

(16)sel.xpath('.//p[@class="price_color"]/text()').extract_first()

保证路径的完整性,路径开头加‘.’,不然会报错。

书本中的id,只是举例属性为‘id’,实际在表征p标签的属性class为price_color时,写为'p[@class="price_color"]'

xpath和css的实战操作

(21-30)如何提取标签的属性值

sel.xpath('./p/@class="price_color"/text()').extract()是提取标签对应的文本内容

仅提取标签属性,sel.xpath('./p/@class').extract();    要在属性class前面加符号'@'

*列表不能切片的,先......extract().[0]再切片选取某一部分.....extract().[0].split()[1]

xpath和css的实战操作

还有一种提取标签的方法,CSS方法,

sel.css('p.star-rating::attr(class)').extract_first().split()[1]

xpath和css的实战操作


xpath和css的实战操作

xpath提取多个相同标签中的一个的内容

由于有太多标签是'tr',所以用语法'./tbody/tr'时无效,应该选用绝对目录'.//tr'

xpath和css的实战操作

用‘tr’标签选某一个内容时,如果是在选择路径括号里面(' '),则是按照[1] [2] [3]...等从[1]开始选择;

如果是在extract()后,则是按照[0] [1] [2].....等,从[0]开始选择。

xpath和css的实战操作

CSS方法提取多个相同标签中的一个的内容

sel.css('td::text').extract(),括号内进行筛选时,只需要选用文本内容的父标签即可,不用前面再多加标签。如('tbody.td::text')是错误的,

另外css方法用text时不加括号,xpath方法则需要'text( )'

xpath和css的实战操作


css方法提取的内容是字符串,不可以使用正则表达式

xpath选出的内容可以按列表形式表现'.extract()';也可以按字符串形式表现'extract_first()'

xpath和css的实战操作


在选择