【发布时间】:2017-02-02 21:56:26
【问题描述】:
我是 XPath 和 Scrapy 的新手。我试图定位一个没有唯一类的节点(即class="pubBody")。
已经尝试过: xpath not contains A and B
这应该是一个简单的任务,但 XPath 只是错过了第二项。我正在从scrapy shell中执行此操作。在命令提示符下:
scrapy shell "http://www.sciencedirect.com/science/journal/00221694/"
我正在寻找第二个 div:
<div id="issueListHeader" class="pubBody">...< /div>
<div class="pubBody">... < /div>
我只能得到第一个而不能得到第二个。类似问题的最佳答案建议尝试以下方法:
hxs.xpath('//div[contains(@class,"pubBody") and not(contains(@id,"issueListHeader"))]')
但是由于某种原因这会返回一个空列表。请问有什么帮助吗?一定是错过了什么愚蠢的东西,我已经尝试了好几天了!
其他细节:
曾经在scrapy shell中:
import scrapy
xs = scrapy.Selector(response)
hxs.xpath('//div[@class="pubBody"]')
仅适用于第一个 div 元素:
[<Selector xpath='//div[@class="pubBody"]' data='<div id="issueListHeader" class="pubBody'>]
对于失败的第二个 div 元素,我也尝试过:
hxs.xpath('//div[@class="pubBody" and not(@id="issueListHeader")]').extract_first()
hxs.xpath('//div[starts-with(@class, "pubBody") and not(re:test(@id, "issueListHeader"))]')
也是直接从Chrome复制XPath,还返回'[]':
hxs.xpath('//*[@id="issueList"]/div/form/div[2]')
【问题讨论】:
标签: python html xpath scrapy html-parsing