标签:set bsd 根据 pip port 端口 ext ack 爬虫框架
scrapy_redis目前应用最多的一个分布式爬虫框架,与普通的scrapy相比,只需要在原有代码的基础上稍作修改,增加一些简单的配置文件即可实现分布式的数据抓取。本文以1905电影网为例,详细的介绍常见的分布式爬虫的创建与配置。
首先通过scrapy框架,写好爬虫的基本功能部分。然后对爬虫继承的类进行简单的修改:
from scrapy_redis.spiders import RedisCrawlSpider # 导入RedisCrawlSpider(如果你用的是Spider,则导入RedisSpider) class DywSpider(RedisCrawlSpider): # 将自定义的爬虫继承自RedisCrawlSpider name = ‘dyw‘ redis_key = ‘start‘ # 设定redis_key,启动爬虫时需要用到 allowed_domains = [‘1905.com‘] # start_urls = [‘https://www.1905.com/mdb/film/list/o0d0p1.html‘] # 取消指定的起始url rules = ( Rule(LinkExtractor(allow=r‘o0d0p\d+\.html‘), callback=‘parse_item‘, follow=True), ) def parse_item(self, response): """ 页面解析 :param response: :return: """ li_list = response.xpath(‘/html/body/div[2]/div[1]/ul/li‘) for li in li_list: title = li.xpath(‘./div/p[1]/a/text()‘).get() item = FbsDywItem(title=title) # 实例化item yield item
然后在settings.py中添加配置信息,常见设置可以直接复制粘贴。将配置好的爬虫项目,完整的复制到每一台机器上。
ITEM_PIPELINES = { ‘scrapy_redis.pipelines.RedisPipeline‘: 400} # scrapy_redis已经封装好的ITEM_PIPELINS,也可以根据需求添加自定义管道,将数据存储在mysql或其它地方 DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘ # scrapy_redis的过滤器,对url进行去重 SCHEDULER = ‘scrapy_redis.scheduler.Scheduler‘ # scrapy_redis的调度器 SCHEDULER_PERSIST = True # True表示允许程序暂停,下次启动会沿用当前的request对象;False表示,每次启动程序都从头开始。建议为True REDIS_HOST = ‘192.168.31.62‘ # 指定主机的redis的ip REDIS_PORT = ‘6379‘ # 主机的redis的端口号,其他redis配置信息以同样的方式添加
同时,需要修改redis的配置信息。找到redis的安装文件,打开redis.windows.conf,
第56行,bind127.0.0.1 关闭默认绑定,可以注释掉 第70行,protected-mode no 关闭保护模式,将yes改为no 设置好后,其他计算机才能对主机的redis服务端进行访问
现在程序已经配置好,可以开始运行。
首先携带配置信息启动redis的服务端,在终端中输入,redis-server redis.windows.conf,如果报错,可能是redis并没有被添加到环境变量中,此时可以切换到redis的安装目录下再启动(配置文件信息可能需要输入完整路径);若还是报错,检查redis服务是否已经开启,任务管理器-服务-redis,关闭即可。
开启服务端后,再启动客户端,redis-cli。
运行每一台机器的爬虫程序,在终端中切换到项目中spiders文件夹下,输入scrapy runspider 爬虫文件名(***.py),回车运行。若配置无误,则会出现:2020-03-24 17:54:05 [scrapy.extensions.telnet] INFO: Telnet console listening on 127.0.0.1:6023,表示正在监听。此时,只需要将之前设定的redis_key和起始的url输入即可。切换到客户端,输入lpush redis_key(设定的key) 起始的url,回车运行,就可以看到爬虫程序已经开始跑起来了。
注意,如果发现只有一台机器在爬取,其他的都在等待,可能是因为爬取的速度快于request对象生成的速度,导致其他机器没有获取到request,可以增加一个专门抓取url的方法。在python3.7中,运行时可能会报错,callback没找到,可尝试切换为3.6版本。
标签:set bsd 根据 pip port 端口 ext ack 爬虫框架
原文地址:https://www.cnblogs.com/xtjiaoyou/p/12560574.html