Scrapy не сканирует все страницы - PullRequest
3 голосов
/ 05 декабря 2011

Я пытаюсь сканировать сайты очень простым способом.Но Scrapy не сканирует все ссылки.Я объясню сценарий следующим образом -

main_page.html -> содержит ссылки на a_page.html, b_page.html, c_page.htmla_page.html -> содержит ссылки на a1_page.html, a2_page.htmlb_page.html -> содержит ссылки на b1_page.html, b2_page.htmlc_page.html -> содержит ссылки на c1_page.html, c2_page.htmla1_page.html -> содержит ссылку на b_page.htmla2_page.html -> содержит ссылку на c_page.htmlb1_page.html -> содержит ссылку на a_page.htmlb2_page.html -> содержит ссылку на c_page.htmlc1_page.html -> содержит ссылку на a_page.htmlc2_page.html -> содержит ссылку на main_page.html

Я использую следующее правило в CrawlSpider -

Rule(SgmlLinkExtractor(allow = ()), callback = 'parse_item', follow = True))

Но результаты сканирования выглядят следующим образом -

ОТЛАДКА: Сканировано(200) http://localhost/main_page.html> (реферер: нет) 2011-12-05 09: 56: 07 + 0530 [test_spider] ОТЛАДКА: Сканировано (200) http://localhost/a_page.html> (реферер: http://localhost/main_page.html) 2011-12-05 09: 56: 07 + 0530 [test_spider] ОТЛАДКА: Сканировано (200) http://localhost/a1_page.html> (реферер: http://localhost/a_page.html) 2011-12-05 09: 56: 07 + 0530 [test_spider] ОТЛАДКА: Сканировано (200) http://localhost/b_page.html> (реферир: http://localhost/a1_page.html) 2011-12-05 09: 56: 07 + 0530 [test_spider] ОТЛАДКА: Сканировано (200) http://localhost/b1_page.html> (реферер: http://localhost/b_page.html) 2011-12-05 09:56: 07 + 0530 [test_spider] ИНФОРМАЦИЯ: Закрывающий паук (готово)

Не сканируются все страницы.

Примечание: я выполнил сканирование в BFO, как былоуказано в Scrapy Doc.

Чего мне не хватает?

Ответы [ 3 ]

5 голосов
/ 05 декабря 2011

Scrapy по умолчанию отфильтровывает все повторяющиеся запросы.

Вы можете обойти это, используя (пример):

yield Request(url="test.com", callback=self.callback, dont_filter = True)

dont_filter (логическое значение) - указывает, что планировщик не должен фильтровать этот запрос.Это используется, когда вы хотите выполнить один и тот же запрос несколько раз, чтобы игнорировать фильтр дубликатов.Используйте это с осторожностью, иначе вы попадете в ползущие петли.По умолчанию False.

Также см. Запрос документации объекта

3 голосов
/ 05 декабря 2011

У меня была похожая проблема сегодня, хотя я использовал собственный паук.Оказалось, что веб-сайт ограничивал мое сканирование, потому что мой пользовательский агент был scrappy-bot

, попробуйте изменить свой пользовательский агент и повторите попытку.Измените его на возможно известный браузер

Еще одна вещь, которую вы можете попробовать, это добавить задержку.Некоторые веб-сайты не допускают удаления, если время между запросами слишком мало.Попробуйте добавить DOWNLOAD_DELAY из 2 и посмотрите, поможет ли это

Дополнительная информация о DOWNLOAD_DELAY в http://doc.scrapy.org/en/0.14/topics/settings.html

0 голосов
/ 20 сентября 2016

Возможно, многие URL являются дубликатами. Скрапия избегает дубликатов, так как она неэффективна. Из того, что я вижу из вашего объяснения, поскольку вы используете следующее правило URL, конечно, есть много дубликатов.

Если вы хотите быть уверенным и увидеть доказательство в журнале, добавьте это к своему settings.py.

DUPEFILTER_DEBUG = True

И вы увидите такие строки в журнале:

2016-09-20 17:08:47 [scrapy] ОТЛАДКА: Отфильтрованный дубликат запроса: http://www.example.org/example.html>

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