当前位置:   article > 正文

windows下scrapy-redis环境搭建与远程连接_安装完scrapy_测试远程连接redis

安装完scrapy_测试远程连接redis

前言

本测试中使用两台电脑,一台win10(作为主机/服务器端),一台win8(作为爬虫端)。
在测试中,win10作为服务器,win8作为爬虫端,win8可以连接win10的redis数据库。但是反过来就不行,至今没找到问题的原因,猜测可能是系统设置的问题。还请大神指教。

scrapy-redis环境配置

Master(win10,服务器/主机)

redis安装

  • 首先安装redis,在页面中下载.msi或者.zip。服务端和爬虫端都需要下载,推荐下载.zip格式。
  • 将下载好的.zip文件解压,修改文件夹名字为Redis,测试中解压的文件夹目录为D:\Program Files\Redis。
  • 将redis安装目录添加到系统变量中。

在这里插入图片描述

  • 打开D:\Program Files\Redis\redis.windows.conf和redis.windows-service.conf文件,修改:
  1. 注释掉bind 127.0.0.1。

在这里插入图片描述

  1. 把protected-mode yes改为protected-mode no。

在这里插入图片描述

启动redis服务

  • 有两种启动redis服务,建议用第一种方式启动。(服务端需开启redis服务,爬虫端不需开启)
    1.在Redis目录下,在命令行输入: redis-server .\redis.windows.conf。若在任意目录下输入,需要指定redis.windows.conf的路径。
    2.先把redis服务加载到系统服务中:redis-server --service-install redis.windows-service.conf --loglevel verbose
    再启动redis服务:redis-server --service-start
    终止服务:redis-server --service-stop

第2种方式会在系统服务中添加redis服务,会一直存在,直至删除。如需删除服务,输入:redis-server --service-uninstall

slave端(win8,爬虫端)

redis安装

  • 参考服务端的安装。

编写scrapy-redis爬虫

建议先编写好scrapy爬虫代码,然后基于scrapy爬虫代码改写为scrapy-redis分布式爬虫。
本测试基于scrapy crawl模板。

  • 修改spider.py
  1. 注释掉allowed_domains和start_urls,添加一个redis_keys=‘xxx’。因为没有指定start_url,后续会在主机上以xxx为键值添加start_url。
import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider


class SinaNewsSpider(RedisCrawlSpider):
    name = 'sina_news'
    # allowed_domains = ['sina.com.cn']
    # start_urls = ['http://sina.com.cn/']
    redis_key = 'myspider'

    rules = (
        Rule(LinkExtractor(allow=r'http[s]?://.*\.sina\.com\.cn/.*\.[s]?html'), callback='parse_item', follow=True),
    )

    def parse_item(self, response):
        item = {}
        title = response.css('.main-content h1' or '.swp-tit h2').xpath('./text()').get()
        if title:
            print(title)
        else:
            print('*'*20, response.url)
        #item['domain_id'] = response.xpath('//input[@id="sid"]/@value').get()
        #item['name'] = response.xpath('//div[@id="name"]').get()
        #item['description'] = response.xpath('//div[@id="description"]').get()
        return item
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 修改settings.py
    在settings在添加如下代码。
# 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy-redis组件自己的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True

#192.168.1.3为测试中win10的ip地址,需根据实际主机IP地址修改
REDIS_HOST = "192.168.1.3"
REDIS_PORT = 6379
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

分布式爬取

开启服务并测试连接

  • 在主机/服务端开启scrapy-redis服务:**redis-server .\redis.windows.conf **。本测试win10。

    在这里插入图片描述

  • 爬虫端测试连接redis-cli -h 192.168.1.3。本测试win8。
    如果能连接,就代表本机可以访问远程数据库。

    在这里插入图片描述

爬虫端爬取

  • 在pycharm命令行输入scrapy crawl sina_news开始爬取。

    在这里插入图片描述

  • 最后一行提示Telnet console listening on 127.0.0.1:6023,表明爬虫端在等待服务端发送requet,因为在服务端中myspider键值不存在value值,所以爬虫端拿不到request请求,无法爬取。此时,需要在服务端连接服务端本地的redis数据库,输入lpush myspider https://www.sina.com.cn/。给键值myspider添加链接地址。

    在这里插入图片描述

  • 之后在爬虫端成功得到服务端的request,开始爬取。
    因为在sina_news.py中提取网页连接的正则写的不完全正确,所以有些网页爬取不到title,因为是做测试,所以不打算修改了。

    在这里插入图片描述

信息处理

  • 因为爬取的信息一般来说要保存在其他关系型数据库中,但是并不一定要保存在redis中,所以没有必要使用scrapy_redis下的pipline。

第一次写博客,如有疏漏的地方,请提出一起讨论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/433016
推荐阅读
相关标签
  

闽ICP备14008679号