xpath和scrapy不将文本放入具有多个属性的段落

xpath和scrapy不将文本放入具有多个属性的段落,xpath,scrapy,Xpath,Scrapy,我正在尝试使用scrapy和xpath编写一个web刮板,但我遇到了一个令人沮丧的问题 我需要在一个有HTML的段落中的文本 <p class="list-details__item__date" id="match-date">04.03.2017 - 15:00</p> 无论如何,这是行不通的 我对xpath略知一二,在过去我能够编写scraper,但这次给我带来了麻烦。我尝试了许多解决方案,但似乎没有一个奏效 response.xpath('//p

我正在尝试使用scrapy和xpath编写一个web刮板,但我遇到了一个令人沮丧的问题

我需要在一个有HTML的段落中的文本

    <p class="list-details__item__date" id="match-date">04.03.2017 - 15:00</p>
无论如何,这是行不通的

我对xpath略知一二,在过去我能够编写scraper,但这次给我带来了麻烦。我尝试了许多解决方案,但似乎没有一个奏效

    response.xpath('//p[contains(@class, "list-details__item__date") and contains(@id,"match-date")]/text()').extract()

    response.xpath('//p[@class="list-details__item__date" and @id="match-date"]/text()').extract()
我也尝试过使用“包含”,正如许多答案中所述,但效果并不理想。这可能是我犯的一个愚蠢的错误……如果有人能帮助我,那就太好了


非常感谢

也许比赛日期是通过AJAX/JS加载的。。。请在浏览器中禁用Javascript,然后查看是否存在匹配日期

此外,为了方便查找,请使用CSS选择器而不是XPath

response.css('#match-date::text').extract()
编辑:

要获取
data dt
属性的值,请执行以下操作

 response.css('#match-date::attr(data-dt)').extract()
或XPath

response.xpath('//p[@id="match-date"]/@data-dt').extract()

您的示例输入用破折号显示了
“匹配日期”
,XPath使用了
“匹配日期”
)。请尝试
response.xpath('//p[@id=“match date”]/text()).extract()
谢谢,这是由于复制/粘贴混乱造成的打字错误…我现在修复了它,顺便说一句,我可以从页面中提取其他元素…这一个似乎会出现问题,因为有多个属性shi@Umair,谢谢你的回答…你是对的,我禁用了JavaScript,代码也更改了…id仍然存在,但现在段落中没有文本,但它有一个属性
data dt=“4,32017,15,00”
…我将尝试从代码中访问它,并让您知道非常感谢@umair,我将xpath固定为
response.xpath('//p[@id=“match date”]/@data dt')。extract()
它正在工作(现在了解css选择器为时已晚:)…再次感谢!!!只是想知道是否有其他方法让scrapy读取与启用javascript时相同的代码…这将是很多easier@peppuce
让scrapy读取与启用javascript时相同的代码
仅使用scrapy是不可能的。。。你必须使用Selenium+PhantomJS和Scrapy一起查看我的答案@peppuse,也可以查看我答案中的编辑。。。请接受我的回答
response.xpath('//p[@id="match-date"]/@data-dt').extract()