我试图让解析器在网站上获取产品信息。我已经用Php和Regex制作了一个类似的工具,我希望用Java做同样的工具。目标是获得父链接,使子产品链接与正则表达式,以获得他们的产品信息循环
String curl = TextField1.getText();
URL url = new URL(curl);
URLConnection spoof = url.openConnection();
spoof.setRequestProperty( "User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)" );
BufferedReader in = new BufferedReader(new InputStreamReader(spoof.getInputStream(),"UTF-8"));
String strLine = "";
while ((strLine = in.readLine()) != null){
Pattern pattern = Pattern.compile("style='color:#000000;font-weight:bold;'>(.*?)</a>");
strLine = strLine.replaceAll(" ","_");
strLine = strLine.replaceAll("d'","d");
Matcher m = pattern.matcher(strLine);
while(m.find()){
String enfurl = "http://www.exemple.com/fr/"+m.group(1)+".htm";
System.out.println(enfurl);
}
}
此代码有效,但有人告诉我,Jsoup是解析html的更好解决方案。我正在阅读Jsoup文档,但在建立联系后,我不知道我必须选择哪种语法。你能帮帮我吗?
编辑:好的,使用此代码:
Elements links = doc.select("a[href][title*=Cliquer pour obtenir des détails]");
for (Element link : links) {
System.out.println(link.attr("href"));
String urlenf = link.attr("href");
Document docenf = Jsoup.connect(urlenf).get();
System.out.println(docenf.body().text());
}
我已经获得了链接......但是现在,我必须打开另一个Jsoup连接来获取产品信息,而这个测试不起作用。我如何在for循环中使用另一个Jsoup?谢谢
答案 0 :(得分:1)
尝试获取这样的网址(通常是内容)。
String url = "PAGE_URL_GOES_HERE";
InputStream is = new URL(url).openStream();
String encoding = "UTF-8";
Document doc = Jsoup.parse(is , encoding , url);
<强>更新强>
您确定问题与网址的编码有关吗? 我尝试了下面的代码,它运行得很好。
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
public class Main {
public static void main(String[] args) {
try {
String url = "http://www.larousse.fr/dictionnaires/francais-anglais/écrémer/27576?q=écrémé";
Document doc = Jsoup.connect(url)
.userAgent("Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; H010818)")
.get();
System.out.println(doc.toString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
更新2
无论如何,请尝试这个,Jsoup.connect(new String(url.getBytes("UTF-8")))
答案 1 :(得分:0)
网上有很多关于jsoup使用的例子。
Document document = Jsoup.connect(targerUrl).get(); //get html page
Elements descElements = document
.select("table#searchResult td:nth-child(2) font.detDesc"); // find elemets by css selectors
for (int i = 0; i < descElements.size(); i++) {
String torrentDesc = descElements.get(i).html(); //get tag content
}