赞
踩
首先,我们开始创建一个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下就会发现抓取的数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。