首页 > 解决方案 > 使用 google bot 的网页收集器

问题描述

我正在继续一个在我的大学已经进行了几年的项目。该项目所做的一项活动是使用 google bot 收集一些网页。

由于一个我无法理解的问题,该项目没有通过这部分。已经对可能发生的事情进行了很多研究,如果它是过时的代码的某些部分。

代码采用 Java 编写,并使用 Maven 进行项目管理。我试图从 maven 的“pom”中更新一些信息。我已经尝试更改使用机器人的代码部分,但没有任何效果。

我正在发布无法正常工作的代码部分:

private List<JSONObject> querySearch(int numSeeds, String query) {
    List<JSONObject> result = new ArrayList<>();
    start=0;
    do {
        String url = SEARCH_URL + query.replaceAll(" ", "+") + FILE_TYPE + "html" + START + start;);
        Connection conn = Jsoup.connect(url).userAgent("Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)").timeout(5000);
        try {     
            Document doc = conn.get();
            result.addAll(formatter(doc);
        } catch (IOException e) {
            System.err.println("Could not search for seed pages in IO.");
            System.err.println(e);
        } catch (ParseException e) {
            System.err.println("Could not search for seed pages in Parse.");
            System.err.println(e);
        }
        start += 10;
    } while (result.size() < numSeeds);
    return result;
}

一些变量的作用:

    private static final String SEARCH_URL = "https://www.google.com/search?q=";
    private static final String FILE_TYPE = "&fileType="; 
    private static final String START = "&start=";

    private QueryBuilder queryBuilder;

    public GoogleAjaxSearch() {
        this.queryBuilder = new QueryBuilder();
    }

在这部分没问题之前,它会与机器人连接并可以从 google 获取 html。问题是分离找到的内容并只获取应该在("h3.r> a")之间的链接。它在这部分中使用result.addAll(formatter(doc)

public List<JSONObject> formatter(Document doc) throws ParseException {
        List<JSONObject> entries = new ArrayList<>();

        Elements results = doc.select("h3.r > a");

        for (Element result : results) {
            //System.out.println(result.toString());

            JSONObject entry = new JSONObject();
            entry.put("url", (result.attr("href").substring(6, result.attr("href").indexOf("&")).substring(1)));
            entry.put("anchor", result.text());

因此,当它到达这部分时:Elements results = doc.select ("h3.r> a"),可能找不到 h3 并且不能通过不进入 for 循环来增加“结果”列表。然后返回 querysearch 函数并重试,不增加结果列表。然后,进入一个无限循环,试图获取请求的数据并且永远找不到。

如果这里有人可以帮助我,我已经尝试了一段时间,我不知道还能做什么。提前致谢。

标签: javahtmlmavenprojectgooglebot

解决方案


推荐阅读