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() 删除所有空格,结果只有数字。