scrapy start_url(初始链接)简写

时间:2018-01-02 17:40作者:scrapy中文网阅读:

上面的栗子我们已经成功的创建了一个scrapy项目,并且成功的运行了它,结果是我们下载了两个html页面,虽然有点杀鸡用牛刀的赶脚,但还是希望诸位把目光聚焦在scrapy运行的流程上面,懂了整体的流程,细节便不攻自破,也就灰常简单了,上面的项目中我们还有另外一种玩法,也就是可以简化我们的: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)

github地址scrapyTest项目下的:simpleStartUrl

评论去哪里了?

由于搜狐畅言广告越来越丧心病狂,用它一个评论,半个网页都被它占领,感觉已经把灵魂出卖给了魔鬼!SO,为了息众怒小编只能暂且关闭评论,若您实在想找我说话,欢迎关注公众号,给我留言,么么哒!