【发布时间】:2016-07-15 09:33:36
【问题描述】:
我正在使用 Scrapy 1.1.0 和 Python 3.5 从网站上抓取数据。 以下代码正在运行...
class ImdbSpider(scrapy.Spider):
name = "imdbFav"
allowed_domains = ["http://www.imdb.com"]
start_urls = [
"http://www.imdb.com/title/tt0203166/"
]
recommendRegex = re.compile(r'\/title\/([A-Za-z0-9]*)')
def parse(self, response):
for recommend in response.xpath('//div[@class="rec_page"]/div[@class="rec_item"]/a/@href').extract():
mo = self.recommendRegex.search(recommend)
recommendId = mo.group(1)
link = "http://www.imdb.com/title/" + recommendId
print(link)
yield scrapy.Request(link, callback=self.parse, dont_filter=True)
enter code here
但是...我不知道为什么如果 dont_filter=False 不调用请求回调。 文档说:
当您想要多次执行相同的请求时使用此选项,以忽略重复过滤器。小心使用它,否则你会陷入爬行循环。
但我请求的不是相同的网址。这里发生了什么?
感谢朋友们!
【问题讨论】:
-
最后检查你的蜘蛛数据。你可能有一个非 0
offsite/filtered。您需要在allowed_domains中使用域名,而不是 URL。所以使用allowed_domains = ["imdb.com"] -
你能发布你的日志吗?我刚刚尝试过,它工作正常,但是您的回调只是重定向到相同的解析方法,并且您几乎陷入无限递归,因为您在这里没有产生任何项目。我没有看到任何过滤的请求。
-
嗨,保罗!你是对的,这只是允许的域!谢谢!
标签: python python-3.x web-scraping scrapy