Запретить определенные URL - PullRequest
2 голосов
/ 11 марта 2019

В настоящее время я использую Scrapy для своего проекта в репозитории вузов, где мне нужно получить внешнюю ссылку для каждого университета. Есть ли способ для меня, чтобы запретить определенные URL-адреса, такие как «google.com» и «twitter.com». Ниже то, что у меня есть на данный момент. Я новичок в этом, поэтому любая помощь будет оценена. Спасибо!

 import scrapy 

    class UtmSpider(scrapy.Spider):
        name = 'utm'
        start_urls = ['http://eprints.utm.my/id/eprint/']


        def start_requests(self):
            yield scrapy.Request('http://eprints.utm.my/id/eprint/', self.parse)

        def parse(self, response):
            for href in response.xpath('//a/@href').getall():
                yield scrapy.Request(response.urljoin(href), self.parse)

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Если ваш паук прост, то решение от Swift будет работать просто отлично. Если у вашего паука / пауков достаточно кода, проверка URL-адресов каждый раз, когда вы хотите отправить запрос, загрязнит ваш код. В этом случае вы можете использовать конвейер DownloaderMiddleware. https://docs.scrapy.org/en/latest/topics/downloader-middleware.html Если вы ищете «IgnoreRequest», вы найдете описание того, как реализовать DownloaderMiddleware, который сможет отбрасывать определенные запросы.

0 голосов
/ 11 марта 2019
ignore = ['google', 'twitter']
def parse(self, response):
    for href in response.xpath('//a/@href').getall():
        for kw in ignore:
            if kw not in href.lower():
                yield scrapy.Request(response.urljoin(href), self.parse)

В соответствии с запросом

РЕДАКТИРОВАТЬ:

Вы спросили, как можно исключить определенные ссылки, содержащие текст, например, приведенные вами примеры, Google и Twitter.

Я не изменил то, что делает ваш код, но просто добавил условное утверждение, которое проверит, содержит ли href ключевые слова.

Мы создаем список (наш список исключенных терминов).Затем нам нужно будет повторять этот список каждый раз, когда мы хотим проверить ссылку, поэтому чем короче список ключевых слов, тем лучше.

Если значение ключевого слова не является частью строки href, мы передаем и продолжаемитерация ссылки href.В противном случае мы выдаем его вместо этого.

Надеюсь, это поможет

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