用start_url毕竟数量太少,如果我引入一个大列表显然不合适,所以我考虑用start_requests来做,覆盖这个方法.
比如我知道小说站的获取列表,我可以一开始就引入到start_requests,然后抓取前100个目录.
# 书目录
def start_requests(self):
for num in range(1,100):
yield scrapy.Request('https://www.xxx.com/allvisit_' + str(num) + '.htm', callback=self.parse)
# 获取每一本书的URL
def parse(self, response):
book_urls = response.xpath('//*[@id="content"]/div/div[2]/div/ul/li/span[3]/a/@href').extract()
for book_url in book_urls:
yield Request(book_url,callback=self.parse_read)
这时候,显然短时间内采集了大量的书名连接,很快就得出有40K的连接需要爬.
处于道德起见,应该把爬虫的速率下降一些,不然爬死了别人网站可不好.