【问题标题】:How to use Jsoup to get href link without the extra characters?如何使用 Jsoup 获取没有多余字符的 href 链接?
【发布时间】:2017-05-05 13:47:26
【问题描述】:

我有一个元素列表,我使用 jsoup 的方法 attr() 来获取 href 属性。 这是我的代码的一部分:

    String searchTerm = "tutorial+programming+"+i_SearchPhrase;
    int num = 10;
    String searchURL = GOOGLE_SEARCH_URL + "?q="+searchTerm+"&num="+num;
    Document doc = Jsoup.connect(searchURL).userAgent("chrome/5.0").get();   
    Elements results = doc.select("h3.r > a");
    String linkHref;

    for (Element result : results) {
        linkHref = result.attr("href").replace("/url?q=","");
        //some more unrelated code...
        }

例如,当我使用搜索短语“test”时,attr("href") 会产生(列表中的第一个):

linkHref = https://www.tutorialspoint.com/software_testing/&sa=U&ved=0ahUKEwi_lI-T69jTAhXIbxQKHU1kBlAQFggTMAA&usg=AFQjCNHr6EzeYegPDdpHJndLJ-889Sj3EQ

我只想要:https://www.tutorialspoint.com/software_testing/

解决此问题的最佳方法是什么?我只是在 linkHref 上添加一些字符串操作(我知道怎么做)还是有办法让 href 属性包含开头的较短链接? 提前谢谢你

【问题讨论】:

  • 如果您知道您的链接将始终采用上述格式,您可以使用 String 的 lastIndexOf() 方法查找最后一个正斜杠,并从该索引开始删除所有字符。
  • @patrick-hainge 我不确定最后一个斜杠后面的字符是什么意思或它们来自哪里,因此我不知道其他链接是否总是采用上述格式

标签: java jsoup


【解决方案1】:

如果您总是想删除query 参数,您可以使用String.indexOf() 例如

int lastPos;
if(linkHref.indexOf("?") > 0) {
   lastPos = linkHref.indexOf("?");
} else if (linkHref.indexOf("&") > 0){
   lastPos = linkHref.indexOf("&");
}
else lastPos = -1;

if(lastPos != -1)
linkHref = linkHref.subsring(0, lastPos);

【讨论】:

  • @Atalia.d 我更新了我的答案。您可以检查任何字符的第一个索引,在这种情况下它是 &
  • 因为我不知道这些额外字符的含义,我可以确定它总是采用相同的格式吗?即它只是“?”还有“&”我应该担心吗?
  • @Atalia.d 这些是查询参数。他们总是这样开始的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多