scrapy基础知识之 RedisCrawlSpider:

这个RedisCrawlSpider类爬虫继承了RedisCrawlSpider,能够支持分布式的抓取。因为采用的是crawlSpider,所以需要遵守Rule规则,以及callback不能写parse()方法。

同样也不再有start_urls了,取而代之的是redis_key,scrapy-redis将key从Redis里pop出来,成为请求的url地址。

from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor

from scrapy_redis.spiders import RedisCrawlSpider

class MyCrawler(RedisCrawlSpider):

    name = ‘mycrawler_redis‘
    redis_key = ‘mycrawler:start_urls‘

    rules = (
        # follow all links
        Rule(LinkExtractor(), callback=‘parse_page‘, follow=True),
    )

    # __init__方法必须按规定写,使用时只需要修改super()里的类名参数即可
    def __init__(self, *args, **kwargs):
        # Dynamically define the allowed domains list.
        domain = kwargs.pop(‘domain‘, ‘‘)
        self.allowed_domains = filter(None, domain.split(‘,‘))

        # 修改这里的类名为当前类名
        super(MyCrawler, self).__init__(*args, **kwargs)

    def parse_page(self, response):
        return {
            ‘name‘: response.css(‘title::text‘).extract_first(),
            ‘url‘: response.url,
        }

注意:

同样的,RedisCrawlSpider类不需要写allowd_domainsstart_urls

  1. scrapy-redis将从在构造方法__init__()里动态定义爬虫爬取域范围,也可以选择直接写allowd_domains
  2. 必须指定redis_key,即启动爬虫的命令,参考格式:redis_key = ‘myspider:start_urls‘
  3. 根据指定的格式,start_urls将在 Master端的 redis-cli 里 lpush 到 Redis数据库里,RedisSpider 将在数据库里获取start_urls。

执行方式:

  1. 通过runspider方法执行爬虫的py文件(也可以分次执行多条),爬虫(们)将处于等待准备状态:

    scrapy runspider mycrawler_redis.py

  2. 在Master端的redis-cli输入push指令,参考格式:

    $redis > lpush mycrawler:start_urls http://www.dmoz.org/

  3. 爬虫获取url,开始执行。
 
时间: 2024-10-11 00:43:45

scrapy基础知识之 RedisCrawlSpider:的相关文章

scrapy基础知识之发送POST请求:

可以使用 yield scrapy.FormRequest(url, formdata, callback)方法发送POST请求. 如果希望程序执行一开始就发送POST请求,可以重写Spider类的start_requests(self) 方法,并且不再调用start_urls里的url. class mySpider(scrapy.Spider): # start_urls = ["http://www.example.com/"] def start_requests(self):

scrapy基础知识之 使用FormRequest.from_response()方法模拟用户登录:

通常网站通过 实现对某些表单字段(如数据或是登录界面中的认证令牌等)的预填充 使用Scrapy抓取网页时,如果想要预填充或重写像用户名.用户密码这些表单字段, 可以使用 FormRequest.from_response() 方法实现. 下面是使用这种方法的爬虫例子: import scrapy class LoginSpider(scrapy.Spider): name = 'example.com' start_urls = ['http://www.example.com/users/lo

scrapy基础知识之下载中间件使用案例:

1. 创建middlewares.py文件. Scrapy代理IP.Uesr-Agent的切换都是通过DOWNLOADER_MIDDLEWARES进行控制,我们在settings.py同级目录下创建middlewares.py文件,包装所有请求. import random import base64 from settings import USER_AGENTS from settings import PROXIES # 随机的User-Agent class RandomUserAgen

scrapy基础知识之 scrapy 三种模拟登录策略:

注意:模拟登陆时,必须保证settings.py里的 COOKIES_ENABLED (Cookies中间件) 处于开启状态 COOKIES_ENABLED = True或 # COOKIES_ENABLED = False 策略一:直接POST数据(比如需要登陆的账户信息) # -*- coding: utf-8 -*- import scrapy class Renren1Spider(scrapy.Spider): name = "renren1" allowed_domains

scrapy基础知识之 pycharm 调试小技巧:

在项目根目录下新建main.py文件,用于调试 from scrapy.cmdline import executeexecute(["scrapy","crawl","MySpider"])

scrapy基础知识之 Scrapy 和 scrapy-redis的区别:

Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件). pip install scrapy-redis Scrapy-redis提供了下面四种组件(components):(四种组件意味着这四个模块都要做相应的修改) Scheduler Duplication Filter Item Pipeline Base Spider sc

scrapy基础知识之 关于爬虫部分一些建议:

1.尽量减少请求次数,能抓列表页就不抓详情页,减轻服务器压力,程序员都是混口饭吃不容易. 2.不要只看 Web 网站,还有手机 App 和 H5,这样的反爬虫措施一般比较少. 3.实际应用时候,一般防守方做到根据 IP 限制频次就结束了,除非很核心的数据,不会再进行更多的验证,毕竟成本的问题会考虑到. 4.如果真的对性能要求很高,可以考虑多线程(一些成熟的框架如 Scrapy都已支持),甚至分布式.. https://segmentfault.com/a/1190000005840672(携程技

1.scrapy基础知识

一.基础函数 1. 二.json文件函数 1. json.dumps():将Python对象编码成JSON字符串 json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw) 2. js

scrapy基础知识之防止爬虫被反的几个策略::

动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息) 禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为)(可以通过COOKIES_ENABLED 控制 CookiesMiddleware 开启或关闭) 设置延迟下载(防止访问过于频繁,设置为 2秒 或更高) Google Cache 和 Baidu Cache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获