java - 删除我从网站上抓取的文本中的空白

标签 java jsoup

我正在尝试从网站上抓取药品 list 。 我正在使用 JSOUP 来解析 Html。

这是我的代码:

URL url = new URL("http://www.medindia.net/drug-price/index.asp?alpha=a");
Document doc1 = Jsoup.parse(url, 0);

Elements rows = doc1.getElementsByAttributeValue("style", "padding-left:5px;border-right:1px solid #A5A5A5;");

for(Element row : rows){
    String htm = row.text();
    if(!(htm.equals("View Price")||htm.contains("Show Details"))) {
        System.out.println(htm);
        System.out.println();
    }
}

这是我得到的输出:

Output Image

附注这不是完整的输出,但由于我无法截取完整输出的屏幕截图,所以我只是显示了它。

我需要知道两件事:

问题 1. 为什么每个药物名称前面都会有一个额外的空格,以及为什么在某些药物名称后面会出现额外的换行符?

问题 2.如何解决此问题?

最佳答案

一些事情:

  1. 这不是完整的输出,因为有不止一页。我放置了一个 for 循环来为您解决这个问题。
  2. 您可能应该使用 htm.trim() 修剪输出
  3. 您应该确保在出现 newLine 时不打印 (!htm.isEmpty())
  4. 该网站有一个奇怪的字符,其中 ASCII 值为 160。我添加了一个小修复来解决该问题。 (使用 .replace)

这是固定代码:

for(char page='a'; page <= 'z'; page++) {
  String urlString = String.format("http://www.medindia.net/drug-price/index.asp?alpha=%c", page);
  URL url = new URL(urlString);
  Document doc1 = Jsoup.parse(url, 0);
  Elements rows = doc1.getElementsByAttributeValue("style", "padding-left:5px;border-right:1px solid #A5A5A5;");
  for(Element row : rows){
    String htm = row.text().replace((char) 160, ' ').trim();
    if(!(htm.equals("View Price")||htm.contains("Show Details"))&& !htm.isEmpty())
    {
      System.out.println(htm.trim());
      System.out.println();
    }
  }
}

关于java - 删除我从网站上抓取的文本中的空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13764934/

相关文章:

java - 如何使用 Jsoup 检索图像宽度

java - picasso :为什么我的卡片 View 在图像加载时改变了尺寸?

java - 将 MVC 模型与 Swing 应用程序框架结合使用

java - 我应该如何维护从文件读取的值的缓存?

java - 有没有办法使用 JSoup 操作部分 HTML 页面

javascript - 比较两个 URL 模板的优化算法

java - 许多在耶拿的 TDB 或 SDB 上命名为 Model

java - 如何在不丢失格式的情况下使用 POI 替换 ".docx"中的书签?

java - Jsoup HTML 解析 - 复杂节点 [Java]

java - 在 Java 中使用 Jsoup 提取带有段落 <p> 的文本的最简单方法