我正在从网页上阅读内容,然后我在Jsoup解析器的帮助下解析它,只获取body部分中存在的超链接。我得到的输出为:
<a href="/sports/sports.asp" style="TEXT-DECORATION: NONE"><font color="#0000FF">Sports</font></a>
<a href="/titanic/titanic.asp" style="TEXT-DECORATION: NONE"><font color="#0000FF">Titanic</font></a>
<a href="gastheft.asp" onmouseover="window.status='License Plate Theft';return true" onmouseout="window.status='';return true">license plates</a>
<a href="miracle.asp" onmouseover="window.status='Miracle Cars';return true" onmouseout="window.status='';return true">miracle cars</a>
<a href="/crime/warnings/clear.asp" onmouseover="window.status='Clear Loss';return true" onmouseout="window.status='';return true" target="clear">Clear</a>
and even more hyperlinks.
从他们所有人,我感兴趣的是像
这样的数据/sports/sports.asp
/titanic/titanic.asp
gastheft.asp
miracle.asp
/crime/warnings/clear.asp
如何使用字符串执行此操作,还是有其他方法或方法可以使用Jsoup Parser本身提取此信息?
答案 0 :(得分:2)
你可以尝试这个,它的作品。
public class AttributeParsing {
/**
* @param args
*/
public static void main(String[] args) {
final String html = "<a href=\"/sports/sports.asp\" style=\"TEXT-DECORATION: NONE\"><font color=\"#0000FF\">Sports</font></a>";
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
Element th = doc.select("a[href]").first();
String href = th.attr("href");
System.out.println(th);
System.out.println(href);
}
}
输出:
:<a href="/sports/sports.asp" style="TEXT-DECORATION: NONE"><font color="#0000FF">Sports</font></a>
href:/sports/sports.asp
答案 1 :(得分:0)
这应该是使用
进行解析的基本部分String.indexOf
,如
index = jsoupOutput.indexOf ("href=\"");
和
nextIndex = jsoupOutput.indexOf ("\"", index);
进行必要的检查。
答案 2 :(得分:0)
假设String锚包含其中一个链接,那么子串的起始索引将在href =“之后,而结束索引将是索引9之后的第一个引号:
String anchor = "<a href=\"/sports/sports.asp\" style=\"TEXT-DECORATION: NONE\"><font color=\"#0000FF\">Sports</font></a>";
int beginIndex = anchor.indexOf("href=\"") + 6; //To start after <a href="
int endIndex = anchor.indexOf("\"", beginIndex);
String desiredPart = anchor.substring(beginIndex, endIndex);
如果锚的形状总是那样,那就是它。更好的选择是使用正则表达式,最好是使用XML解析器。
答案 3 :(得分:0)
将此作为参考
import java.util.regex.*;
public class HelloWorld{
public static void main(String []args){
String s = "<a href=\"/sports/sports.asp\" style=\"TEXT-DECORATION: NONE\"><font color=\"#0000FF\">Sports</font></a>"+
"<a href=\"/titanic/titanic.asp\" style=\"TEXT-DECORATION: NONE\"><font color=\"#0000FF\">Titanic</font></a>"+
"<a href=\"gastheft.asp\" onmouseover=\"window.status='License Plate Theft';return true\" onmouseout=\"window.status='';return true\">license plates</a>"+
"<a href=\"miracle.asp\" onmouseover=\"window.status='Miracle Cars';return true\" onmouseout=\"window.status='';return true\">miracle cars</a>"+
"<a href=\"/crime/warnings/clear.asp\" onmouseover=\"window.status='Clear Loss';return true\" onmouseout=\"window.status='';return true\" target=\"clear\">Clear</a>";
Pattern p = Pattern.compile("href=\".+?\"");
Matcher m = p.matcher(s);
while(m.find())
{
System.out.println(m.group().split("=")[1].replace("\"",""));
}
}
}
输出
/sports/sports.asp
/titanic/titanic.asp
gastheft.asp
miracle.asp
/crime/warnings/clear.asp
答案 4 :(得分:0)
试试这可能会有所帮助
String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();
String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String nextIndex = linkHref .indexOf ("\"", linkHref );
答案 5 :(得分:0)
您可以在一行中完成:
String[] paths = str.replaceAll("(?m)^.*?\"(.*?)\".*?$", "$1").split("(?ms)$.*?^");
第一个方法调用从每一行中删除除目标之外的所有内容,第二个方法调用在换行符上拆分(适用于所有操作系统终止符)。
FYI (?m)
开启“多线模式”,(?ms)
也开启“dotall”标志。