如何在爬行时消除大量数据中的重复

时间:2014-02-21 05:41:40

标签: java set web-crawler

我正在从购物网站抓取大量数据。例如,我认为我正在抓取200页数据,每页有30个产品详细信息。我正在抓取名称,价格,imageURL和productURL。 productURL不再重复..如何在爬行时检查产品URL重复或不重复的天气,并避免数据库的非重复值。我将给出我在下面尝试的示例代码..

public void process(ArrayList<Item> results) {
    Set<String> s = new HashSet<String>();

    System.out.println("*****************OUTPUT****************");
    StringBuilder dataBuilder;

    System.out.println("TOTAL ITEMS " + results.size());

    for (Item item : results) {
        item.setSrc(xmlData.getSrc());

        if (!item.getName().trim().equals("")
                && !item.getPrice().trim().equals("")
                && !item.getUrl().trim().equals("")) {

            if (s.add(item.getUrl())) {
                dao.insertToDB(item, xmlData.getOutput_DB());
            } else {
                system.out.println("url is repeating");
            }
        } else {
            System.out.println("first loop failedddd");
        }
    }
}

我在这里使用set但仍然在插入完成后我可能会得到一些重复的URL ...我无法理解这个问题。请帮我解决一下这个。

1 个答案:

答案 0 :(得分:1)

if (!item.getName().trim().equals("")
    && !item.getPrice().trim().equals("")
        && !item.getUrl().trim().equals(""))
{
    if (s.contains(item.getUrl())) {
        system.out.println("url is repeating");
    }
    else {
        dao.insertToDB(item, xmlData.getOutput_DB());
        s.add(item.getUrl());
    }
}
else {
    System.out.println("first loop failedddd");
}