【问题标题】:How to avoid HTML spaces in td tags during web scraping through java如何在通过 java 抓取网页期间避免 td 标签中的 HTML 空格
【发布时间】:2016-05-12 06:26:17
【问题描述】:

我正在抓取一个将数据存储在 csv 中的网站。代码工作正常,但问题是 HTML 中所有使用 &nbsp 的地方,代码都放了 'Â'。为了避免这种情况,我尝试了一些东西(在代码下面提到),但是由于该代码再次重写了该数据。现在,我真正想要的是 'Â' 这应该被删除而不会对数据造成任何干扰。

for (Iterator<Element> it = tdElements.iterator(); it.hasNext();) {
    if (it.hasNext()) {
        sb.append(" , ");
        sb.append(" \r\n ");
    }

    for (Iterator<Element> it2 = tdElements.iterator(); it.hasNext();) {
        Element tdElement2 = it.next();
        final String content;
        content = tdElement2.text().replace(",", "");
        //I added the following code to avoid that 'Â'
        final String content2;
        content2 = tdElement2.text().replace("\u00a0","");
        if (it2.hasNext()) {

            sb.append(formatData(content));
            sb.append(formatData(content2));
            sb.append("   ,   ");
        }
    }

    System.out.println(sb.toString());
    sb.flush();
    sb.close();
}

我理解为什么它重写数据是因为sb.append(formatData(content)); 我将整个数据附加了两次,这就是它产生问题的原因。那么如何同时管理 ',' 和 'Â'。

【问题讨论】:

    标签: java html web-scraping jsoup


    【解决方案1】:

    你应该对修改后的字符串进行替换,然后你只需要添加 content2。

    String content = tdElement2.text().replace(",", "");
    //I added the following code to avoid that 'Â'
    String content2 = content.replace("\u00a0","");
    if (it2.hasNext()) {
     sb.append(formatData(content2));
     sb.append("   ,   ");
    }
    

    你也可以改写成

    String content2 = tdElement2.text().replace(",", "").replace("\u00a0","");
    if (it2.hasNext()) {
     sb.append(formatData(content2)).append("   ,   ");
    }
    

    【讨论】:

    • 也为了阅读乐趣:stackoverflow.com/questions/306862/… 基本上,您不需要使用 final ,因为字符串无论如何都是不可变的。它在垃圾收集方面也没有带来任何优势。它只会增加混乱。您也没有在该范围内分配代码来覆盖它们,或者可以覆盖它们。
    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2019-12-04
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    相关资源
    最近更新 更多