Направление глубины поиска в Crawler4j Solr - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь заставить сканер "прервать" поиск в определенном поддомене каждый раз, когда он не находит релевантную страницу после 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-адреса, чтобы обход переместился к остальным поддоменам. В настоящее время я не могу найти функцию, которая может перевести меня из родительского идентификатора в данные страницы для удаления URL.

1 Ответ

0 голосов
/ 22 апреля 2020

Метод visit(...) вызывается как один из последних операторов processPage(...) (строка 523 в WebCrawler).

Исходящие ссылки уже добавлены в frontier искателя (и могут быть обработаны другими процессами искателя, как только они будут добавлены).

Вы можете определить поведение, описанное путем настройки shouldVisit(...) или (в зависимости от точного варианта использования) в shouldFollowLinksIn(...) гусеничного механизма

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...