使用Jsoup从HTML中选择<p>

时间:2016-03-18 00:50:13

标签: java jsoup

我想得到这个标签下的段落:

enter image description here

**如果您想在标记下看到它的样子:HERE

我试图:

Document doc = Jsoup.connect(url).userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21").get();
Elements a = doc.select("p#dev-content");
Elements b = doc.select("dev-content");
Elements c = doc.select("p#dev-content.details-text.ng-binding");
Elements d = doc.select("dev-content.details-text.ng-binding");
Elements e = doc.select("p.details-text.ng-binding");

但遗憾的是没有人工作。

我也尝试过:

Elements f = doc.select("p");

我得到了我想要的段落和不需要的段落,并且它们是重复的。

**如果您想访问我尝试过的网站:HERE

1 个答案:

答案 0 :(得分:2)

您要定位的网站使用AngularJS加载其数据。这就是为什么Jsoup无法找到正确的段落。

希望您正在寻找的内容作为JSON字符串位于页面上。

以下是提取此数据的示例代码:

示例代码

// Fetch the document
Document doc = Jsoup //
        .connect("https://sabq.org/%D8%B4%D8%A7%D9%87%D8%AF-%D8%A3%D9%84%D9%81-%D8%B5%D9%81%D8%AD%D8%A9-%D8%AA%D8%B1%D9%88%D9%8A-%D9%82%D8%B5%D8%B5-%D8%A7%D9%84%D8%AD%D8%B1%D9%85%D9%8A%D9%86-%D9%85%D9%86%D8%B0-%D8%A7%D9%86%D8%B7%D9%84%D8%A7%D9%82-%D8%A7%D9%84%D8%B9%D9%87%D8%AF-%D8%A7%D9%84%D8%B3%D8%B9%D9%88%D8%AF%D9%8A") //
        .userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21") //
        .get();

// Look for the script containing the JSON data
Elements scripts = doc.select("script[data-cfasync=false]");
String content = null;
for (Element script : scripts) {
    String scriptText = script.html();
    if (scriptText.contains("dataFirstLoad")) {
        String dataFirstLoad = scriptText.replaceAll("(?i)^[\\s\\S]*dataFirstLoad\\s*=\\s*(\\{.+\\})\\s*;[\\s\\S]*$", "$1");

        JSONObject json = new JSONObject(dataFirstLoad);

        content = json.getJSONObject("material").getString("content");

        break;
    }
}

// Show content
System.out.println("Extracted content:\n" + content);

OUTPUT(剥离)

Extracted content:
<p><span style="color:#FF0000;">(تصوير :فايز الزيادي،عبدالله النحيط) :</span> تتزاحم في جناح رئاسة الحرمين الشريفين وفي مساحة صغيرة لا تتجاوز بضعة أمتار على أرض معرض الرياض الدولي للكتاب، 16 ألف ورقة، ينبعث من حروفها رحيق الطُهر لت(...)    </p>  <p> </p>

DEPENDENCIES

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.8.3</version>
</dependency>

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20160212</version>
</dependency>

参考