zoukankan      html  css  js  c++  java
  • scrapy-scrapy如何打开页面?[转]

    一、首先我们来看scrapy spider如何打开页面:

    要打开页面,我们用的是手,同样scrapy也有一个得力助手:spider;至于spider如何打开页面,且听我娓娓道来,如果一上来就噼里啪啦的给诸位说scrapy spiders需要继承神马类、神马方法、神马常量,我想很多喷油都会觉得莫名其妙,就像一个巴掌突然打来一样,所以这里我试图用知其所以然的方式让你知其然!很多文档写得莫名其妙,就是作者一上来就用这种方式,让本来懂的你却越看越凌乱,究其原因就是很多作者重于形,却轻于意,说得具体点就是注重实现,而不注重为什么要这样实现,就像spiders的内部结构一来就告诉你要继承这个、这个……,却没告诉你为什么要继承,如果能稍加解释,那小白们就更容易接受了!

    scrapy1.5中文文档


    那我们先说说人如何scrapy如何打开页面,我们一般是用爪爪,首先搜索、然后点击、然后又点击,就这样不断搜索、不断点击然后就到了,比如搜淘宝2月13号套套销量,是不是首先百度搜索:淘宝,然后点击进去,然后搜索:套套,然后就到了。毕竟蜘蛛不会用键盘、鼠标,因此不能用这样的方式,何况这样的方式太慢。那蜘蛛到底如何打开页面呢?很简单,蜘蛛从互联网的本质出发,我们浏览页面都是一个:发送请求、返回请求的过程,比如点击淘宝,然后淘宝就打开,其实就是这么一个过程(这是网络的基础原理,不熟悉的诸位度娘一下);那蜘蛛要发送请求,那总得要有请求链接,如果木有,蜘蛛肯定得不到返回,那页面也就打不开了,因此引出了scrapy spiders的第一个必须的常量:

    start_urls

    上面的文档《scrapy start_url》已经详细介绍过,URL有两种写法,一种作为类的常量、一种作为start_requests(self)方法的常量,无论哪一种写法,URL都是必须的!有了URL那就可以发送请求了,也就类似我们的点击页面、然后打开页面的过程,那这一个过程肯定要有个方法或来完成;如果URL是定义在start_request(self)这个方法里面,那我们就要使用: yield scrapy.Request 方法发送请求:如下:

    import scrapy
    class simpleUrl(scrapy.Spider):
        name = "simpleUrl"
    
        # 另外一种初始链接写法
        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)
    

      

    这样写的一个麻烦之处就是我们需要处理我们的返回,也就是我们还需要写一个callback方法来处理response;因此大多数我们都是把URL作为类的常量,然后再加上另外一个方法:

    parse(response)

    使用这个方法来发送请求,可以看到里面有个参数已经是:response(返回),也就是说这个方自动化的完成了:request(请求页面)-response(返回页面)的过程,我们就不必要再写函数接受返回,所以这样就比较方便了!

    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 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)
    

      


       

    好了,这就是scrapy打开页面的方法;页面打开后是不是我们就该提取数据了?那scrapy如何提取?

  • 相关阅读:
    [转]The Machine SID Duplication Myth (and Why Sysprep Matters)
    The Machine SID Duplication Myth (and Why Sysprep Matters)
    [转]Shell(Bash) mysql数据库操作
    [转]GNU Sourcehighlight 语法高亮代码
    [原]DRBD双主模式问题
    mpstat
    DRBD试用
    drbd双主模式问题
    虚IP的添加和删除
    为什么5%的技术人员开发效率是其他95%的20倍?
  • 原文地址:https://www.cnblogs.com/brady-wang/p/9699196.html
Copyright © 2011-2022 走看看