【问题标题】:Directing the search depths in Crawler4j Solr在 Crawler4j Solr 中引导搜索深度
【发布时间】:2020-02-10 02:51:30
【问题描述】:

我试图让爬虫在连续 3 次尝试后每次找不到相关页面时“中止”搜索某个子域。提取页面的标题和文本后,我开始寻找正确的页面以提交到我的 solr 集合。 (我不想添加与此查询不匹配的页面)

public void visit(Page page)
{
    int docid = page.getWebURL().getDocid();
    String url = page.getWebURL().getURL();
    String domain = page.getWebURL().getDomain();
    String path = page.getWebURL().getPath();
    String subDomain = page.getWebURL().getSubDomain();
    String parentUrl = page.getWebURL().getParentUrl();
    String anchor = page.getWebURL().getAnchor();

    System.out.println("Docid: " + docid);
    System.out.println("URL: " + url);
    System.out.println("Domain: '" + domain + "'");
    System.out.println("Sub-domain: '" + subDomain + "'");
    System.out.println("Path: '" + path + "'");
    System.out.println("Parent page: " + parentUrl);
    System.out.println("Anchor text: " + anchor);
    System.out.println("ContentType: " + page.getContentType());

    if(page.getParseData() instanceof HtmlParseData) {
        String title, text;

        HtmlParseData theHtmlParseData = (HtmlParseData) page.getParseData();
        title = theHtmlParseData.getTitle();
        text = theHtmlParseData.getText();

        if (  (title.toLowerCase().contains(" word1 ") && title.toLowerCase().contains(" word2 "))  ||  (text.toLowerCase().contains(" word1 ") && text.toLowerCase().contains(" word2 ")) ) {
            //
            // submit to SOLR server
            //
            submit(page);

            Header[] responseHeaders = page.getFetchResponseHeaders();
            if (responseHeaders != null) {
                System.out.println("Response headers:");
                for (Header header : responseHeaders) {
                    System.out.println("\t" + header.getName() + ": " + header.getValue());
                }
            }

            failedcounter = 0;// we start counting for 3 consecutive pages

        } else {

            failedcounter++;

        }

        if (failedcounter == 3) {

            failedcounter = 0; // we start counting for 3 consecutive pages
            int parent = page.getWebURL().getParentDocid();
            parent....HtmlParseData.setOutgoingUrls(null);

        }

我的问题是,如何编辑此代码的最后一行,以便我可以检索父“页面对象”并删除其传出 url,以便抓取移动到其余子域。 目前我找不到可以让我从父 ID 到页面数据的函数,用于删除 url。

【问题讨论】:

    标签: java solr crawler4j


    【解决方案1】:

    visit(...) 方法作为processPage(...) 的最后一个语句之一被调用(WebCrawler 中的第 523 行)。

    传出链接已经添加到爬虫的frontier(并且可能在添加后立即被其他爬虫进程处理)。

    您可以通过调整 shouldVisit(...) 或(取决于确切的用例)在爬虫的 shouldFollowLinksIn(...) 中定义所描述的行为

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-21
      • 2015-10-11
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多