Scrapy LinkExtractor не может найти существующий URL - PullRequest
1 голос
/ 01 октября 2019

У меня есть такой сканер:

class SkySpider(CrawlSpider):
    name = "spider_v1"
    allowed_domains = [
        "atsu.edu",
    ]

    start_urls = [
        "http://www.atsu.edu",
    ]

    rules = (
        Rule(
            INFO_LINKS_EXTRACTOR,
            follow=True,
            callback='parse_item',
          ),
     )
    def parse_item(self, response):
        print("ENTERED!")
        item = SportsScraperItem()
        item["contact"] = self._parse_contact(response)
        return item

В моем helpers.py У меня есть:

from scrapy.linkextractors import LinkExtractor


def _r(string):
    return f"(.*?)(\b{string}\b)(.*)"


INFO_LINKS_EXTRACTOR = LinkExtractor(
    allow=(
        _r('about'),
    ),
    unique=True,
)

Я знаю, что Ацу. edu имеет ссылку https://www.atsu.edu/about-atsu/,, но мой экстрактор, похоже, не видит его, и метод parse_item() не запускается. Что я тут не так делаю?
РЕДАКТИРОВАТЬ 1 : Журналы :

2019-10-01 15:40:58 [scrapy.core.engine] INFO: Spider opened
2019-10-01 15:40:58 [scrapy.extensions.logstats] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min)
2019-10-01 15:40:58 [steppersspider_v1] INFO: Spider opened: steppersspider_v1
2019-10-01 15:40:58 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023
2019-10-01 15:40:59 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.atsu.edu/robots.txt> from <GET http://WWW.ATSU.EDU/robots.txt>
2019-10-01 15:41:05 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/robots.txt> (referer: None)
2019-10-01 15:41:11 [scrapy.downloadermiddlewares.redirect] DEBUG: Redirecting (301) to <GET https://www.atsu.edu/> from <GET http://WWW.ATSU.EDU>
2019-10-01 15:41:15 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/robots.txt> (referer: None)
2019-10-01 15:41:19 [scrapy.core.engine] DEBUG: Crawled (200) <GET https://www.atsu.edu/> (referer: None)
2019-10-01 15:41:19 [steppersspider_v1] DEBUG: Saved file steppers-www.atsu.edu.html
2019-10-01 15:41:20 [scrapy.core.engine] INFO: Closing spider (finished)
2019-10-01 15:41:20 [scrapy.statscollectors] INFO: Dumping Scrapy stats:

РЕДАКТИРОВАТЬ 2
Вот , как я протестировал это регулярное выражение на regexp101.com.

РЕДАКТИРОВАТЬ 3
Рабочая функция для регулярного выражения:

def _r(string):
    return r"^(.*?)(\b{string}\b)(.*)$".format(string=string)

1 Ответ

2 голосов
/ 01 октября 2019

По умолчанию средства извлечения ссылок ищут только теги a и area. Похоже, ссылки, которые вы ищете, находятся в тегах li.

Вам необходимо передать параметр tags в конструктор экстрактора ссылок с нужными тегами. Например:

tags=('a', 'area', 'li')

См. https://doc.scrapy.org/en/latest/topics/link-extractors.html#module-scrapy.linkextractors.lxmlhtml

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