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

标签 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"); 时,它返回一个编译错误。

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

最佳答案

the wanted text is under this tag <p dir="rtl">

您需要使用以下 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/أسباب-ودلالات-استمرار-الصدام-بجامعات-مصر

上面的url需要进行编码。我们将使用 URI#create 辅助方法。在返回的 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("-------------------------");
}    

输出(内容被剥离)

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

关于java - 使用java从html文件中提取文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36000034/

相关文章:

java - 如何在 Javascript 中遍历 Java 集合

html - 小型设备上的 bootstrap 4 右侧菜单

java - 网络爬虫与 Html 解析器

java - Jsoup错误502

java - 一组小型库与单个大型 Java 库的性能比较

java - 确定适当沮丧的最佳方法

java - Maven 安装任务似乎在编译之前对旧代码运行测试

javascript - IFrame 与 Script.. 哪个更适合调用游戏关卡?

javascript - 我应该学习什么样的架构才能制作出优秀的基于 JavaScript 的软件?

java - JSoup 加载时间太长,有时无法获取正确的数据