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'

 

    

  

转载于:https://www.cnblogs.com/kongzhagen/p/8393749.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值