在import.io XPath选择器中用单斜杠替换双斜杠

时间:2016-09-05 00:48:30

标签: html xml xpath import.io

我正在使用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是否支持此功能。

  • 我还会注意到我尝试这样做的原因:import.io在所有网址上都失败了。如果我手动删除斜杠并重试,它可以正常工作。

1 个答案:

答案 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不正确。