使用java从html文件中提取文本

时间:2016-03-14 23:33:00

标签: java html jsoup

我正在处理文本抓取工具,我需要从多个网站中提取某些文本。我使用过jsoup html解析器:

Document doc = Jsoup.connect("http://www.aljazeera.net/programs/behindthenews/2014/11/9/%D8%A3%D8%B3%D8%A8%D8%A7%D8%A8-%D9%88%D8%AF%D9%84%D8%A7%D9%84%D8%A7%D8%AA-%D8%A7%D8%B3%D8%AA%D9%85%D8%B1%D8%A7%D8%B1-%D8%A7%D9%84%D8%B5%D8%AF%D8%A7%D9%85-%D8%A8%D8%AC%D8%A7%D9%85%D8%B9%D8%A7%D8%AA-%D9%85%D8%B5%D8%B1").get();
Elements ps = doc.select("p");
String s = Jsoup.parse(ps.text()).text();
PrintWriter out = new PrintWriter("newFile.txt", "UTF-8");
out.write(s);
out.close();

此算法会向我显示不需要的文字,所需文字位于此标记<p dir="rtl">

当我将选择更改为Elements ps = doc.select("p dir=rtl");时,会返回编译错误。

有没有办法让它只选择这个想要的标签?

2 个答案:

答案 0 :(得分:0)

以下代码将捕获所有<p dir="rtl">标记:

String uri = URI.create("example.com").toASCIIString();
Document doc = Jsoup.connect(uri).get();
Elements pElements = doc.select("p[dir=rtl]");

StringBuilder sb = new StringBuilder();
for (Element element : pElements) {
    sb.append(element.text());
}

PrintWriter out = new PrintWriter("newFile.txt", "UTF-8");
out.write(sb.toString());
out.close();

唯一棘手的是,您需要使用编码的URL(而不是使用阿拉伯字母的URL)。

编辑1: URL编码可以在代码中完成。

答案 1 :(得分:0)

  

所需文字位于此标记下&lt; p dir =&#34; rtl&#34;&gt;

您需要使用以下CSS查询:

p          /* Select any p element... */
[dir=rtl]  /* ... with a 'dir' attribute set to "rtl" */
  

@NavidShakibapour http://www.aljazeera.net/programs/behindthenews/2014/11/9/أسباب-ودلالات-استمرار-الصدام-بجامعات-مصر

以上网址需要进行编码。我们将使用URI #create helper方法。在返回的URI实例上,我们将调用toASCIIString方法。

URI uri = URI //
           .create("http://www.aljazeera.net/programs/behindthenews/2014/11/9/أسباب-ودلالات-استمرار-الصدام-بجامعات-مصر") //
           .toASCIIString();

这是一个工作示例代码:

示例代码

Document doc = Jsoup.connect("http://www.aljazeera.net/").get();

Elements sublinks = doc.select("a[href*=/programs/behindthenews]");
System.out.println("Sublinks found: " + sublinks.size() + "\n*****");

for (Element sublink : sublinks) {
    String url = URI.create(sublink.absUrl("href")).toASCIIString();

    Document subLinkPage = Jsoup.connect(url).get();

    System.out.println(subLinkPage.select("p[dir=rtl]"));
    System.out.println("-------------------------");
}    

OUTPUT(内容已删除)

Sublinks found: 5
*****
<p dir="rtl">وحول هذا الموضوع وصف مدير مكتب الجزيرة في موسكو زاور شوج قرار الرئيس بوتين بالخطوة المفاجئة، باعتبار أن الروس وضعوا سقفا زمنيا مفتوحا لتدخلهم العسكري، يتراوح بين 12 و18 شهرا.</p>
<p dir="rtl">
(...)
-------------------------
<p dir="rtl">وحول هذا الموضوع وصف مدير مكتب الجزيرة في موسكو زاور شوج قرار الرئيس بوتين بالخطوة المفاجئة، باعتبار أن الروس وضعوا سقفا زمنيا مفتوحا لتدخلهم العسكري، يتراوح بين 12 و18 شهرا.</p>
<p dir="rtl">
(...)
-------------------------
(...)