限制scrapy解析单个标记

时间:2016-10-20 15:37:20

标签: python scrapy

我正在尝试使用scrapy抓取www.tvtropes.org,例如:

Belle - TV Tropes

我正在调用shell来尝试使用上面的网页,然后通过选择具有属性itemprop =“articleBody”的div标签来获取页面的相关部分。一切正常。

scrapy shell "http://tvtropes.org/pmwiki/pmwiki.php/Film/Belle"
itembody = response.xpath('//div[@itemprop="articleBody"]')

然后我想提取该标签中的所有invidual列表项,作为该影片列出的转义列表。我以为我可以这样做:

itembody.xpath('//li')

然而,这给了我一个巨大的'li'标签列表,包括页面中其他地方的批次,这些标签不在我选择的'div'标签内。如果我想将其限制为该标签,我必须再次重新声明标签标准,如下所示:

itembody.xpath('//div[@itemprop="articleBody"]//li')

我可以做到这一点作为一种解决方法,但我认为itembody只包含那个标签,而不是页面的其余部分所以我很困惑。任何人都可以向我解释这个吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,我保证在提出这个问题之前我会进行搜索和搜索,但当然,我在发布后大约5分钟就找到了答案。

我需要使后续的xpath成为相对的,而不是绝对的引用,即。

itembody.xpath('.//li')

'。'在xpath的开头设置它只在当前项目中查找,而以'/'开头就像指定root作为起点。就像文件目录引用一样。

希望这有助于其他人。

答案 1 :(得分:0)

试试这个Xpath:

//div[@itemprop='articleBody']/ul/li

使用'/'可以获得元素的“第一个子元素”。

使用'//',您也可以获得儿童的元素。