xpath是一门在XML文档中查找指定信息的标记语言,可以对XML文档中的元素和属性使用路径表达式来进行定位(导航)。 xpath常用语法/ 选择某个标签下的所有内容 注意上面所有的操作,返回的结果都是HtmlResponse类,该类可以通过xpath()方法提取出信息。 response.xpath('/html/body/div/p').extract() 常见任务示例下面我们作说明性示例。
//p
//div//a
//a/@href
//a[not(contains(@href, 'abc))]
//a[starts-with(@href, 'http://www.')]
//h1[@href="firstTtile"]/a/text()
//div[@id="dov"]/ul//a/@href
//*[contains(@class, "rrr") and contains(@class, "yyy")]//h1//text()
//*[text()="HelloPython"]/../following-sibing::div//a/@href 注意在scrapy中上面的所有的操作,返回的结果都是HtmlResponse类,该类可以通过xpath()方法提取出信息。例如 response.xpath('/html/body/div/p').extract() 考虑网页变化Xpath表达式有时候会因为网站改版而失效,所以我们设计xpath时候应该多注意这方面事情,尽量降低这方面的设计问题。一些简单的的规则能降低这方面的风险:
//div/div/div[1]/div[2]/div[1]/div[1]/a/img 上面的xpath表达式不仅不稳健,而且难于阅读和理解。我们应该尽量使用接近img标签的表达式,借助id或者class属性,如 //div[@class="picture"]/a/img
由于css会用class来控制页面外观,所以网站会存在微小的布局调整,导致class属性值是变化的。例如下面的class //div[@class="thumbnail"]/a/img 一段时间后,可能变成: //div[@class="preview blue"]/a/img
一般来说,id属性是具有唯一标识的标签属性,不容易改动。所以用id表示的xpath表达式更稳健 //*[@id="more_detail"]//text() |
|