这是我的代码?
class QuotesSpider(scrapy.Spider):
name = 'quotes'
allowed_domains = ['quotes.toscrape.com/']
start_urls = ['http://quotes.toscrape.com//']
def parse(self, response):
quotes = response.css('.quote')
for quote in quotes:
item = QuoteItem()
text = quote.css('.text::text').extract_first()
author = quote.css('.author::text').extract_first()
tags = quote.css('.tags .tag::text').extract()
item['text'] = text
item['author'] = author
item['tags'] = tags
yield item
next = response.css('.pager .next a::attr(href)').extract_first()
url = response.urljoin(next)
yield scrapy.Request(url=url, callback=self.parse)
我是scrapy的新手。我认为这总是递归的。但事实上它并没有。这就是为什么?
答案 0 :(得分:1)
这里的问题是scrapy
使用allowed_domains
作为正则表达式来确定传递的链接是否属于指定的域。
如果您只想允许来自该特定子域的请求,只需将字符串quotes.toscrape.com/
更改为quotes.toscrape.com
。
如果您想允许来自每个域的请求,也可以删除整个变量。