Xpath 获取嵌套项目的文本不起作用,但 css 可以
Xpath get text of nested item not working but css does
我正在用 Scrapy 制作一个爬虫,想知道为什么我的 xpath 不工作而我的 CSS 选择器可以工作?我想从这个 html:
中获取提交数
<li class="commits">
<a data-pjax="" href="/samthomson/flot/commits/master">
<span class="octicon octicon-history"></span>
<span class="num text-emphasized">
521
</span>
commits
</a>
</li
Xpath:
response.xpath('//li[@class="commits"]//a//span[@class="text-emphasized"]//text()').extract()
CSS:
response.css('li.commits a span.text-emphasized').css('::text').extract()
CSS returns 数字(未转义),但 XPath returns 什么都没有。我对嵌套元素使用 // 是否正确?
您没有匹配 span
标签的 class
属性中的所有值,因此请使用 contains
函数检查是否仅存在 text-emphasized
:
response.xpath('//li[@class="commits"]//a//span[contains(@class, "text-emphasized")]//text()')[0].strip()
否则还包括num
:
response.xpath('//li[@class="commits"]//a//span[@class="num text-emphasized"]//text()')[0].strip()
此外,我使用 [0]
检索 XPath 返回的第一个元素,并使用 strip()
删除所有空格,结果只有数字。
我正在用 Scrapy 制作一个爬虫,想知道为什么我的 xpath 不工作而我的 CSS 选择器可以工作?我想从这个 html:
中获取提交数<li class="commits">
<a data-pjax="" href="/samthomson/flot/commits/master">
<span class="octicon octicon-history"></span>
<span class="num text-emphasized">
521
</span>
commits
</a>
</li
Xpath:
response.xpath('//li[@class="commits"]//a//span[@class="text-emphasized"]//text()').extract()
CSS:
response.css('li.commits a span.text-emphasized').css('::text').extract()
CSS returns 数字(未转义),但 XPath returns 什么都没有。我对嵌套元素使用 // 是否正确?
您没有匹配 span
标签的 class
属性中的所有值,因此请使用 contains
函数检查是否仅存在 text-emphasized
:
response.xpath('//li[@class="commits"]//a//span[contains(@class, "text-emphasized")]//text()')[0].strip()
否则还包括num
:
response.xpath('//li[@class="commits"]//a//span[@class="num text-emphasized"]//text()')[0].strip()
此外,我使用 [0]
检索 XPath 返回的第一个元素,并使用 strip()
删除所有空格,结果只有数字。