当前位置:   article > 正文

如何进行一个scrapy-redis爬虫_scrapy-redis如何写入redis

scrapy-redis如何写入redis

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

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

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

1.cd + 工程文件路径

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

3.cd redishongniang

4.scrapy genspider -t  crawl  hongniang hongniang.com

只有最后一步不一样

然后我们进入工程

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

  1. from scrapy_redis.spiders import RedisCrawlSpider
  2. from scrapy.spiders import Rule
  3. from scrapy.linkextractors import LinkExtractor

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

  1. class HongniangSpider(RedisCrawlSpider):
  2. name = 'hongniang'
  3. allowed_domains = ['hongniang.com']
  4. # start_urls = ['http://hongniang.com/']
  5. redis_key = 'hongniangspider:start_urls'
  6. page_link = LinkExtractor(allow=r'http://www.hongniang.com/index/search?sort=0&wh=0&sex=2&starage=1&province=河南&city=郑州&page=1')
  7. person_link =LinkExtractor(allow=r'http://www.hongniang.com/user/member/id/\d+')
  8. rules = (
  9. Rule(page_link,True),
  10. Rule(person_link,callback='get_detail',follow=False)
  11. )

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

  1. def get_detail(self,response):
  2. print('---------------------')
  3. print(response.url)
  4. header = response.xpath('//img[@id="pic_"]/@src').extract_first('')
  5. print(header)
  6. name = response.xpath('//div[@class="name nickname"]/text()').extract_first('')
  7. print(name)
  8. age = response.xpath('//div[@class="info2"]//ul[1]/li[1]/text()').extract_first('')
  9. print(age)
  10. height = response.xpath('//div[@class="info2"]//ul[2]/li[1]/text()').extract_first('')
  11. print(height)
  12. item = RedishongniangItem()
  13. item['header'] = header
  14. item['name'] = name
  15. yield item

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

from ..items import RedishongniangItem

来进行操作

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

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

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

  1. ITEM_PIPELINES = {
  2. 'redishongniang.pipelines.RedishongniangPipeline': 300,
  3. 'scrapy_redis.pipelines.RedisPipeline': 400,
  4. }

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

  1. DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
  2. # 使用scrapy__redis的调度器,不适用scrapy默认的调度器
  3. 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下就会发现抓取的数据

 

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号