如何进行一个scrapy-redis爬虫

首先,我们开始创建一个scrapy-redis的工程

就拿中国红娘网来举例,要创建一个爬取百度页面的scrapy-redis工程

前几步和创建普通的scrapy工程一样分别为

1.cd + 工程文件路径

2.scrapy startproject redishongniang(工程文件夹名字)

3.cd redishongniang

4.scrapy genspider -t  crawl  hongniang hongniang.com

只有最后一步不一样

然后我们进入工程

在进行工程之前我们要先引入需要的包

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

 然后我们使爬虫的类继承自RedisCrawlSpider,并且将start_urls注销或者删除加上redis_keys 以及制定爬虫规则,具体代码如下

class HongniangSpider(RedisCrawlSpider):
    name = 'hongniang'
    allowed_domains = ['hongniang.com']
    # start_urls = ['http://hongniang.com/']
    redis_key = 'hongniangspider:start_urls'

    page_link = LinkExtractor(allow=r'http://www.hongniang.com/index/search?sort=0&wh=0&sex=2&starage=1&province=河南&city=郑州&page=1')

    person_link =LinkExtractor(allow=r'http://www.hongniang.com/user/member/id/\d+')

    rules = (
        Rule(page_link,True),
        Rule(person_link,callback='get_detail',follow=False)
    )

 在规则中的最后,我们用callback调用了一个方法,我们创建这个方法来对我们需要的数据进行获取

    def get_detail(self,response):
        print('---------------------')
        print(response.url)

        header = response.xpath('//img[@id="pic_"]/@src').extract_first('')
        print(header)
        name = response.xpath('//div[@class="name nickname"]/text()').extract_first('')
        print(name)
        age = response.xpath('//div[@class="info2"]//ul[1]/li[1]/text()').extract_first('')
        print(age)
        height = response.xpath('//div[@class="info2"]//ul[2]/li[1]/text()').extract_first('')
        print(height)

        item = RedishongniangItem()
        item['header'] = header
        item['name'] = name


        yield item

在这之前我们不要忘记了将数据打包的操作,即在开头引入

from ..items import RedishongniangItem

来进行操作

一切完成后点击进入 items.py 中,进行对数据封装

class RedishongniangItem(scrapy.Item):
    # define the fields for your item here like:
    # name = scrapy.Field()
    header = scrapy.Field()
    name = scrapy.Field()

完成后进入 settings.py,将管道文件解注释,并且在管道文件中加入这样一个一个管道用来连接RedisDesktopManager数据库

ITEM_PIPELINES = {
   'redishongniang.pipelines.RedishongniangPipeline': 300,
    'scrapy_redis.pipelines.RedisPipeline': 400,
}

并且在settings.py文件中加上以下代码

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 使用scrapy__redis的调度器,不适用scrapy默认的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

这样我们的代码就完成了,然后我们队代码进行运行操作,来获取数据

首先 ,我们需要先连接服务器

打开终端,找到当时下载好的redis文件夹的路径 cd 进入

cd C:\Users\Administrator\Desktop\redis
redis-server redis.windows.conf

这样服务器就连接了,切记,服务器打开以后不要关闭

然后,我们再打开一个终端,来输入 scrapy crawl hongniang来运行代码,此时,我们会发现,代码没有运行,处于一个等待加载的状态,这个状态需要我们去下达任务的操作

我们需要再打开一个终端,cd 到当时下载好的redis文件夹的路径

cd C:\Users\Administrator\Desktop\redis
redis-cli
lpush mycrawler:start_urls https://github.com/rmax/scrapy-redis.git

最后一句命令是lpush + redis_key的内容 + 爬虫网站的具体网址

然后回车

这时你会发现你运行爬虫代码的那个终端开始爬取数据

这时你打开RedisDesktopManager数据库就会在相应的table下就会发现抓取的数据

猜你喜欢

转载自blog.csdn.net/weixin_42539547/article/details/81709772