通过可选,我的意思是元素不存在。
我有一个GitHub的蜘蛛,我正在尝试获得代表的主要语言
<div class="repository-lang-stats">
<ol class="repository-lang-stats-numbers">
<li>
<a href="/scrapy/scrapy/search?l=python">
<span class="color-block language-color" style="background-color:#3581ba;"></span>
<span class="lang">Python</span>
<span class="percent">99.1%</span>
</a>
</li>
<li>
<span class="other">
<span data-lang="Other" class="color-block language-color"></span>
<span class="lang">Other</span>
<span class="percent">0.9%</span>
</span>
</li>
</ol>
</div>
在上面的示例(this repo的来源)中,我需要从第一个
获取&#34; Python &#34;<span class="lang">
但是我的问题是某个回购,就像空的回购一样,没有
<span class="lang">
标签或
<ol class="repository-lang-stats-numbers">
标签。我该如何克服这个?
答案 0 :(得分:1)
我会去查找语言列表,获取第一个列表项并检索第一个跨度,跳过可能的锚标记(对于某些低频语言似乎缺失它们)。
//ol[@class="repository-lang-stats-numbers"]/li[1]//span[@class="lang"]
空结果表示没有可用的语言数据。
一些评论:
div[@class="repository-lang-stats"]
作为第一轴步骤,但我认为没有必要。/text()
附加到查询中。无论如何: Github提供 API that also lets you query repository languages。更好地使用它而不是刮取网站。 API快速,易用且稳定;网站是经常更改的前端代码,会破坏您的XPath查询。
您可以通过访问一个特殊的URI(例如https://api.github.com/repos/scrapy/scrapy/languages)来查询它,该URI将返回一个可以轻松解析和排序的JSON对象:
{
"Shell": 1733,
"Python": 1195439,
"CSS": 9681
}
答案 1 :(得分:0)
xpath是div/ol/li/a/span[@class="lang"]/text()
。如果路径上缺少任何东西,它将不返回任何内容。