我正在使用import.io来抓取一些页面。我遇到了一个使用内部href的页面:http://domain.com//Event
- 注意域名后面的双斜杠。根据我的研究,这是为SEO目的而完成的,但我需要获取没有这些双斜线的url,因此返回http://domain.com/Event
。
我正在尝试使用XPath(我非常陌生),我可以使用//a[contains(@class, 'event-info-btn')]//@href
获得链接。
我的下一步是尝试fn:repace()
:fn:replace(//a[contains(@class, 'event-info-btn')]//@href, 'http://domain.com//', 'http://domain.com/')
。这不起作用 - 没有返回任何内容。
我不确定我的实施是否错误,或者import.io是否支持此功能。
答案 0 :(得分:1)
请注意,import.io claims支持XPath 2.0。
您可能意味着/@href
而不是//@href
,但这不是真正的问题。
您的XPath返回href
个属性序列,其中replace()
期待一个字符串。
对于此HTML,
<div>
<a class="event-info-btn" href="http://domain.com//1">one</a>
<a class="event-info-btn" href="http://domain.com//2">one</a>
<a class="event-info-btn" href="http://domain.com//3">one</a>
</div>
这个XPath,
for $href in //a[contains(@class, 'event-info-btn')]/@href
return replace($href, 'http://domain.com//', 'http://domain.com/')
将返回
http://domain.com/1
http://domain.com/2
http://domain.com/3
按要求。
这在import.io中没有用,我找不到 小提琴般的网站来测试它。
您可以看到此工作 here 。
Import.io似乎只允许你输入一行xpath。
您可以尝试将XPath放在一行上,然后:
for $href in //a[contains(@class, 'event-info-btn')]/@href return replace($href, 'http://domain.com//', 'http://domain.com/')
如果这不起作用,则import.io's claim that they support XPath 2.0不正确。