start_requests
简化前,我们需要定义一个方法:start_requests(self),然后经过这个方法不断循环发送请求:
def start_requests(self): urls = [ 'http://lab.scrapyd.cn/page/1/', 'http://lab.scrapyd.cn/page/2/', ] for url in urls: yield scrapy.Request(url=url, callback=self.parse)
简化后,以上的链接可以写在:start_urls这个常量里面,是不是省了好多事,人生是不是又美满了一大截?
start_urls = [ # 另外一种写法,无需定义start_requests方法 'http://lab.scrapyd.cn/page/1/', 'http://lab.scrapyd.cn/page/2/', ]
但是!上帝给你开一扇门,就会给你关另一扇门,用简化的方法,我们必须定义一个方法为:def parse(self, response),方法名一定是:parse,这样的话用简写的方式就能愉快的工作了
完整代码如下:
""" scrapy初始Url的两种写法, 一种是常量start_urls,并且需要定义一个方法parse() 另一种是直接定义一个方法:star_requests() """ import scrapy class simpleUrl(scrapy.Spider): name = "simpleUrl" start_urls = [ #另外一种写法,无需定义start_requests方法 'http://lab.scrapyd.cn/page/1/', 'http://lab.scrapyd.cn/page/2/', ] # 另外一种初始链接写法 # def start_requests(self): # urls = [ #爬取的链接由此方法通过下面链接爬取页面 # 'http://lab.scrapyd.cn/page/1/', # 'http://lab.scrapyd.cn/page/2/', # ] # for url in urls: # yield scrapy.Request(url=url, callback=self.parse) # 如果是简写初始url,此方法名必须为:parse def parse(self, response): page = response.url.split("/")[-2] filename = 'mingyan-%s.html' % page with open(filename, 'wb') as f: f.write(response.body) self.log('保存文件: %s' % filename)