xpath和scrapy不将文本放入具有多个属性的段落
我正在尝试使用scrapy和xpath编写一个web刮板,但我遇到了一个令人沮丧的问题 我需要在一个有HTML的段落中的文本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
<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()