zoukankan      html  css  js  c++  java
  • scrapy之spider模块

    scrapy中的spider的用法 :

      1、scrapy命令行可以传参数给构造器

    scrapy crawl myspider -a category=electronics

      构造器接收传入的参数

    import scrapy
    
    class MySpider(Spider):
    name = 'myspider'
    
    def __init__(self, category=None, *args, **kwargs):
    super(MySpider, self).__init__(*args, **kwargs)
    self.start_urls = ['http://www.example.com/categories/%s' % category]
    # ...

      2、spider.Spider: 在系统生成的脚本或自己编写的脚本都必须要继承Spider类,功能是调用start_urls/start_requests并将结果给parse处理
        allowd_domains:当offsiteMiddleware启用时,不在其内的域名不会被爬取

      3、spider默认的运行规则:

        1、spider启动

        2、运行start_requests(),此方法使用get方法请求url,仅会被scrapy调用一次

        3、start_requests调用make_requests_from_url(url)

        4、start_urls中的url被请求,结果返回给parse 函数处理

      scrapy默认使用get方法请求url,那当我要post登陆网站,再爬取数据,怎么办呢?

      可以通过改写start_requests()方法来实现,改写了scrapy默认的运行规则

    def start_requests(self):
        return [scrapy.FormRequest("http://www.example.com/login",
                                   formdata={'user': 'john', 'pass': 'secret'},
                                   callback=self.logged_in)]
    
    def logged_in(self, response):
        # here you would extract links to follow and return Requests for
        # each of them, with another callback
        pass

      4、parser():是scrapy 处理response的默认方法,负责返回处理的数据

    scrapy-reids:

      1、修改settings

    SCHEDULER = "scrapy_redis.scheduler.Scheduler"
    DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
    ITEM_PIPELINES = {
        'scrapy_redis.pipelines.RedisPipeline': 300
    }
    REDIS_URL = 'redis://user:pass@hostname:9001'

        

      

  • 相关阅读:
    rails中输出excel
    Rails IDE 有很多选择,但是具体到ubuntu 64bit 选择的余地就不多了,这里选择Aptana Studio 3 Beta
    linux中查看系统资源占用情况的命令
    GIT GUI使用
    linux下的c 环境配置vim
    oracle11 忘记密码
    Aptana_Studio 介绍和应用
    linux root命令忘记以及挂载U盘
    程序员创业生死一线 最后归宿在哪里?
    如何使用Log4j? .
  • 原文地址:https://www.cnblogs.com/kongzhagen/p/8393749.html
Copyright © 2011-2022 走看看