我正在尝试使用scrapy抓取www.tvtropes.org,例如:
我正在调用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只包含那个标签,而不是页面的其余部分所以我很困惑。任何人都可以向我解释这个吗?
提前致谢。
答案 0 :(得分:1)
好的,我保证在提出这个问题之前我会进行搜索和搜索,但当然,我在发布后大约5分钟就找到了答案。
我需要使后续的xpath成为相对的,而不是绝对的引用,即。
itembody.xpath('.//li')
'。'在xpath的开头设置它只在当前项目中查找,而以'/'开头就像指定root作为起点。就像文件目录引用一样。
希望这有助于其他人。
答案 1 :(得分:0)
试试这个Xpath:
//div[@itemprop='articleBody']/ul/li
使用'/'可以获得元素的“第一个子元素”。
使用'//',您也可以获得儿童的元素。