xpath和css的实战操作
在scrapy中使用selector对象提取页面中的数据,使用时会先通过XPath或CSS选择器选中页面要提取的数据,然后提取。
首先是定位,sel=response.css('....#.....'),属性#属性值,中间用#保险,用点有时不起作用。
xpath有一些基本语法,下面通过例子展示XPath的使用。
(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"]'
(21-30)如何提取标签的属性值
sel.xpath('./p/@class="price_color"/text()').extract()是提取标签对应的文本内容。
仅提取标签属性,sel.xpath('./p/@class').extract(); 要在属性class前面加符号'@'
*列表不能切片的,先......extract().[0]再切片选取某一部分.....extract().[0].split()[1]
还有一种提取标签的方法,CSS方法,
sel.css('p.star-rating::attr(class)').extract_first().split()[1]
xpath提取多个相同标签中的一个的内容
由于有太多标签是'tr',所以用语法'./tbody/tr'时无效,应该选用绝对目录'.//tr'
用‘tr’标签选某一个内容时,如果是在选择路径括号里面(' '),则是按照[1] [2] [3]...等从[1]开始选择;
如果是在extract()后,则是按照[0] [1] [2].....等,从[0]开始选择。
CSS方法提取多个相同标签中的一个的内容
sel.css('td::text').extract(),括号内进行筛选时,只需要选用文本内容的父标签即可,不用前面再多加标签。如('tbody.td::text')是错误的,
另外css方法用text时不加括号,xpath方法则需要'text( )'
css方法提取的内容是字符串,不可以使用正则表达式
xpath选出的内容可以按列表形式表现'.extract()';也可以按字符串形式表现'extract_first()'
在选择