首先,我们开始创建一个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下就会发现抓取的数据