在Weblink上使用Regex Pattern和Jsoup

时间:2014-06-28 09:09:23

标签: java regex jsoup

我试图让解析器在网站上获取产品信息。我已经用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?谢谢

2 个答案:

答案 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
}