Вот простой скрап-паук
import scrapy
class ExampleSpider(scrapy.Spider):
name = "dmoz"
allowed_domains = ["https://www.dmoz.org"]
start_urls = ('https://www.dmoz.org/')
def parse(self,response):
yield scrapy.Request(self.start_urls[0],callback=self.parse2)
def parse2(self, response):
print(response.url)
Когда вы запускаете программу, метод parse2 не работает и не выводит response.url. Затем я нашел решение этой проблемы в ветке ниже.
Почему мой второй запрос не вызывается в методе синтаксического анализа моего scrapy spider
Просто мне нужно было добавить dont_filter = True в качестве аргумента в методе запроса, чтобы функция parse2 работала.
yield scrapy.Request(self.start_urls[0],callback=self.parse2,dont_filter=True)
Но в примерах, приведенных в документации по scrapy и во многих учебных пособиях по YouTube, они никогда не использовали аргумент dont_filter = True в методе scrapy.Request, и все же их вторая функция синтаксического анализа работает.
Взгляните на это
def parse_page1(self, response):
return scrapy.Request("http://www.example.com/some_page.html",
callback=self.parse_page2)
def parse_page2(self, response):
# this would log http://www.example.com/some_page.html
self.logger.info("Visited %s", response.url)
Почему мой паук не может работать, если не добавлен dont_filter = True? Что я делаю неправильно ? Какие повторяющиеся ссылки мой паук отфильтровал в моем первом примере?
P.S. Я мог бы решить эту проблему в ветке QA, которую я опубликовал выше, но мне не разрешено комментировать, если у меня нет 50 репутации (бедный я !!)
dont_filterбуквально означает игнорировать этот фильтр для этого единственного запроса. - person Granitosaurus   schedule 15.08.2016allowed_domainsдолжен указывать домены, а не URL-адреса, поэтому это должно бытьallowed_domains = ["dmoz.org"]- person paul trmbrth   schedule 16.08.2016