有缘网分布式爬虫案例:

修改 spiders/youyuan.py

在spiders目录下增加youyuan.py文件编写我们的爬虫,使其具有分布式:

# -*- coding:utf-8 -*-from scrapy.linkextractors import LinkExtractor
#from scrapy.spiders import CrawlSpider, Rule# 1. 导入RedisCrawlSpider类,不使用CrawlSpider
from scrapy_redis.spiders import RedisCrawlSpider
from scrapy.spiders import Rulefrom scrapy.dupefilters import RFPDupeFilter
from example.items import youyuanItem
import re# 2. 修改父类 RedisCrawlSpider
# class YouyuanSpider(CrawlSpider):
class YouyuanSpider(RedisCrawlSpider):name = 'youyuan'# 3. 取消 allowed_domains() 和 start_urls
##### allowed_domains = ['youyuan.com']
##### start_urls = ['http://www.youyuan.com/find/beijing/mm18-25/advance-0-0-0-0-0-0-0/p1/']# 4. 增加redis-keyredis_key = 'youyuan:start_urls'list_page_lx = LinkExtractor(allow=(r'http://www.youyuan.com/find/.+'))page_lx = LinkExtractor(allow =(r'http://www.youyuan.com/find/beijing/mm18-25/advance-0-0-0-0-0-0-0/p\d+/'))profile_page_lx = LinkExtractor(allow=(r'http://www.youyuan.com/\d+-profile/'))rules = (Rule(list_page_lx, follow=True),Rule(page_lx, follow=True),Rule(profile_page_lx, callback='parse_profile_page', follow=False),)# 5. 增加__init__()方法,动态获取allowed_domains()def __init__(self, *args, **kwargs):domain = kwargs.pop('domain', '')self.allowed_domains = filter(None, domain.split(','))super(youyuanSpider, self).__init__(*args, **kwargs)# 处理个人主页信息,得到我们要的数据def parse_profile_page(self, response):item = youyuanItem()item['header_url'] = self.get_header_url(response)item['username'] = self.get_username(response)item['monologue'] = self.get_monologue(response)item['pic_urls'] = self.get_pic_urls(response)item['age'] = self.get_age(response)item['source'] = 'youyuan'item['source_url'] = response.urlyield item# 提取头像地址def get_header_url(self, response):header = response.xpath('//dl[@class=\'personal_cen\']/dt/img/@src').extract()if len(header) > 0:header_url = header[0]else:header_url = ""return header_url.strip()# 提取用户名def get_username(self, response):usernames = response.xpath("//dl[@class=\'personal_cen\']/dd/div/strong/text()").extract()if len(usernames) > 0:username = usernames[0]else:username = "NULL"return username.strip()# 提取内心独白def get_monologue(self, response):monologues = response.xpath("//ul[@class=\'requre\']/li/p/text()").extract()if len(monologues) > 0:monologue = monologues[0]else:monologue = "NULL"return monologue.strip()# 提取相册图片地址def get_pic_urls(self, response):pic_urls = []data_url_full = response.xpath('//li[@class=\'smallPhoto\']/@data_url_full').extract()if len(data_url_full) <= 1:pic_urls.append("");else:for pic_url in data_url_full:pic_urls.append(pic_url)if len(pic_urls) <= 1:return "NULL"return '|'.join(pic_urls)# 提取年龄def get_age(self, response):age_urls = response.xpath("//dl[@class=\'personal_cen\']/dd/p[@class=\'local\']/text()").extract()if len(age_urls) > 0:age = age_urls[0]else:age = "0"age_words = re.split(' ', age)if len(age_words) <= 2:return "0"age = age_words[2][:-1]if re.compile(r'[0-9]').match(age):return agereturn "0"

分布式爬虫执行方式:

6. 在Master端启动redis-server:

redis-server

7. 在Slave端分别启动爬虫,不分先后:

scrapy runspider youyuan.py

8. 在Master端的redis-cli里push一个start_urls
redis-cli> lpush youyuan:start_urls http://www.youyuan.com/find/beijing/mm18-25/advance-0-0-0-0-0-0-0/p1/
9. 爬虫启动,查看redis数据库数据。

有缘网分布式爬虫案例2相关推荐

  1. 有缘网分布式爬虫案例

    有缘网分布式爬虫案例 # clone github scrapy-redis源码文件 git clone https://github.com/rolando/scrapy-redis.git# 直接 ...

  2. scrapy分布式爬虫案例

    关于 Redis Redis 是目前公认的速度最快的基于内存的键值对数据库 Redis 作为临时数据的缓存区,可以充分利用内存的高速读写能力大大提高爬虫爬取效率. 关于 scrapy-redis sc ...

  3. 问财网 股票信息爬虫案例

    股票爬虫案例 from selenium import webdriver from my_fake_useragent import UserAgent from lxml import etree ...

  4. [235]scrapy分布式爬虫scrapy-redis(二)

    ===============================================================Scrapy-Redis分布式爬虫框架================== ...

  5. Redis实现分布式爬虫

    redis分布式爬虫 概念:多台机器上可以执行同一个爬虫程序,实现网站数据的爬取 原生的scrapy是不可以实现分布式爬虫, 原因如下: 调度器无法共享 管道无法共享 scrapy-redis组件:专 ...

  6. 利用pyhton爬虫(案例3)--X房网的小房子们

    写了个小案例,顺便复习一下以前学的知识点. PS:复试之前绝不写爬虫案例了(对于现在的我来说,费脑又花时间),再写我吃XX. 文章目录 爬取X房网二手房信息 爬取步骤 URL特征 查看HTML页面源代 ...

  7. 中华英才网爬虫程序解析(4)-分布式爬虫redis

    欢迎来到爬虫高级兼实战教程,打开你的IDE,开始python之旅吧! redis数据库 redis也是一种数据库,我们用到他的一个数据类型,也就是list列表来进行我们的分布式爬虫,接下来截取部分代码 ...

  8. Scrapy分布式爬虫打造搜索引擎 - (三)知乎网问题和答案爬取

    Python分布式爬虫打造搜索引擎 基于Scrapy.Redis.elasticsearch和django打造一个完整的搜索引擎网站 推荐前往我的个人博客进行阅读:http://blog.mtiany ...

  9. scrapy-redis分布式爬虫全站爬取顶点小说网

    scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单分布式爬虫程序,该组件本质上提供了三大功能: scheduler - 调度器 dupefilter - URL去重 ...

最新文章

  1. php获取服务器文件路径,php获取服务器路径
  2. python爬虫原理-Python爬虫原理
  3. 文章内容页调用所属栏目地址的标签
  4. dubbo多网卡时,服务提供者的错误IP注册到注册中心导致消费端连接不上
  5. 日常生活小技巧 -- markdown编辑器
  6. boost::mp11::mp_copy_if_q相关用法的测试程序
  7. 信用卡逾期不还是否要坐牢?看法律是怎么规定的
  8. 关于Java序列化你应该知道的一切
  9. windows 2008 r2 系统默认80端口被系统占用的处理
  10. 应“云”而生--云时代的运维新理念
  11. python 基本数据类型之set
  12. 学习scrapy使用
  13. 【三维路径规划】基于matlab人工蜂群算法无人机三维路径规划【含Matlab源码 021期】
  14. 字体主题宝库:25款很好看的液晶数字字体下载
  15. 做手机APP测试,包括哪些测试要点?
  16. [论文学习]Learn to Dance with AIST++: Music Conditioned 3D Dance Generation
  17. JPEG算法 格式压缩方案
  18. GPS坐标偏移与转换
  19. CleanMyMac x2021中文版mac清理软件激活码下载
  20. 人机对战的猜拳游戏,用户通过输 入(1.剪刀 2.石头 3.布),机器随机生成(1.剪刀 2.石头 3.布),胜者积分, n 局以后通过积分的多少判定胜负。

热门文章

  1. Python: 装饰器的小例子
  2. Intent各种flag解析。
  3. java easyreport 导入excel、 txt 数据复合属性(二)
  4. 如何写出好的Java代码?
  5. Android Service LifeCycle
  6. linux中的开机启动
  7. 清空VS2003/VS2005最近打开解决方案记录
  8. Keys.js 官方使用说明
  9. Git 原理详解及实用指南
  10. 玩转Nodejs日志管理log4js