第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码...
发布日期:2021-09-05 12:41:13 浏览次数:1 分类:技术文章

本文共 3793 字,大约阅读时间需要 12 分钟。

第三百五十七节,Python分布式爬虫打造搜索引擎Scrapy精讲—利用开源的scrapy-redis编写分布式爬虫代码

 

scrapy-redis是一个可以scrapy结合redis搭建分布式爬虫的开源模块

 

scrapy-redis的依赖

  • Python 2.7, 3.4 or 3.5,Python支持版本
  • Redis >= 2.8,Redis版本
  • Scrapy >= 1.1,Scrapy版本
  • redis-py >= 2.10,redis-py版本,redis-py是一个Python操作Redis的模块,scrapy-redis底层是用redis-py来实现的

 

下载地址:https://pypi.python.org/pypi/scrapy-redis/0.6.8

我们以scrapy-redis/0.6.8版本为讲

 

一、安装scrapy-redis/0.6.8版本的依赖

  首先安装好scrapy-redis/0.6.8版本的依赖关系模块和软件

 

二、创建scrapy项目

  执行命令创建项目:scrapy startproject fbshpch

 

三、将下载的scrapy-redis-0.6.8模块包解压,解压后将包里的crapy-redis-0.6.8\src\scrapy_redis的scrapy_redis文件夹复制到项目中

 

 

四、分布式爬虫实现代码,普通爬虫,相当于basic命令创建的普通爬虫

注意:分布式普通爬虫必须继承scrapy-redisRedisSpider

#!/usr/bin/env python# -*- coding:utf8 -*-from scrapy_redis.spiders import RedisSpider    # 导入scrapy_redis里的RedisSpider类import scrapyfrom scrapy.http import Request                 #导入url返回给下载器的方法from urllib import parse                        #导入urllib库里的parse模块class jobboleSpider(RedisSpider):               # 自定义爬虫类,继承RedisSpider类    name = 'jobbole'                            # 设置爬虫名称    allowed_domains = ['blog.jobbole.com']       # 爬取域名    redis_key = 'jobbole:start_urls'            # 向redis设置一个名称储存url    def parse(self, response):        """        获取列表页的文章url地址,交给下载器        """        # 获取当前页文章url        lb_url = response.xpath('//a[@class="archive-title"]/@href').extract()  # 获取文章列表url        for i in lb_url:            # print(parse.urljoin(response.url,i))                                             #urllib库里的parse模块的urljoin()方法,是自动url拼接,如果第二个参数的url地址是相对路径会自动与第一个参数拼接            yield Request(url=parse.urljoin(response.url, i),                          callback=self.parse_wzhang)  # 将循环到的文章url添加给下载器,下载后交给parse_wzhang回调函数        # 获取下一页列表url,交给下载器,返回给parse函数循环        x_lb_url = response.xpath('//a[@class="next page-numbers"]/@href').extract()  # 获取下一页文章列表url        if x_lb_url:            yield Request(url=parse.urljoin(response.url, x_lb_url[0]),                          callback=self.parse)  # 获取到下一页url返回给下载器,回调给parse函数循环进行    def parse_wzhang(self, response):        title = response.xpath('//div[@class="entry-header"]/h1/text()').extract()  # 获取文章标题        print(title)

 

 

五、分布式爬虫实现代码,全站自动爬虫,相当于crawl命令创建的全站自动爬虫

注意:分布式全站自动爬虫必须继承scrapy-redisRedisCrawlSpider

#!/usr/bin/env python# -*- coding:utf8 -*-from scrapy_redis.spiders import RedisCrawlSpider    # 导入scrapy_redis里的RedisCrawlSpider类import scrapyfrom scrapy.linkextractors import LinkExtractorfrom scrapy.spiders import Ruleclass jobboleSpider(RedisCrawlSpider):               # 自定义爬虫类,继承RedisSpider类    name = 'jobbole'                                 # 设置爬虫名称    allowed_domains = ['www.luyin.org']              # 爬取域名    redis_key = 'jobbole:start_urls'                 # 向redis设置一个名称储存url    rules = (        # 配置抓取列表页规则        # Rule(LinkExtractor(allow=('ggwa/.*')), follow=True),        # 配置抓取内容页规则        Rule(LinkExtractor(allow=('.*')), callback='parse_job', follow=True),    )    def parse_job(self, response):  # 回调函数,注意:因为CrawlS模板的源码创建了parse回调函数,所以切记我们不能创建parse名称的函数        # 利用ItemLoader类,加载items容器类填充数据        neir = response.css('title::text').extract()        print(neir)

 

 

六、settings.py文件配置

# 分布式爬虫设置SCHEDULER = "scrapy_redis.scheduler.Scheduler"                  # 使调度在redis存储请求队列DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"      # 确保所有的蜘蛛都共享相同的过滤器通过Redis复制ITEM_PIPELINES = {    'scrapy_redis.pipelines.RedisPipeline': 300                 # 存储在redis刮项后处理}

 

 

七、执行分布式爬虫

  1、运行命令:scrapy crawl jobbole(jobbole表示爬虫名称)

  2、启动redis,然后cd到redis的安装目录,

    执行命令:redis-cli -h 127.0.0.1 -p 6379  连接一个redis客户端

    在连接客户端执行命令:lpush jobbole:start_urls http://blog.jobbole.com/all-posts/  ,向redis列队创建一个起始URL

    说明:lpush(列表数据) jobbole:start_urls(爬虫里定义的url列队名称) http://blog.jobbole.com/all-posts/(初始url)

 

 

八、scrapy-redis编写分布式爬虫代码原理

 

 

其他使用方法和单机版爬虫一样 

 

 

转载地址:https://blog.csdn.net/weixin_34239169/article/details/85935182 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:分布式架构实践——负载均衡 - 简书
下一篇:处理ftp服务器 在重启后ftp客户端不能连接访问的问题

发表评论

最新留言

很好
[***.229.124.182]2024年03月07日 23时50分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java xml dom解析xml_Java DOM解析器 - 解析XML文档 2019-04-21
java编码解析解析_java如何解析如下的字符串编码? 2019-04-21
java byte转int原理_java中int与byte数组互转代码详细分析 2019-04-21
java list keystore_Java / Keystore验证签名证书 2019-04-21
java中的错误流_关于java中流关闭的问题 2019-04-21
java课题研究方法和技术途径_课题研究的基本方法有哪些? 2019-04-21
javascript嵌入java_如何用Javascript動態嵌入Java applet ? 2019-04-21
java代码写xml简单_从Java写入XML文档 – 简单 2019-04-21
java二叉树最短路径之和_[数据结构与算法]求给定二叉树的最小深度。最小深度是指树的根结点到最近叶子结点的最短路径上结点的数量。... 2019-04-21
安卓r.java有什么用_android R.java文件介绍 2019-04-21
mysql 主从数据库技术_MySQL 主从复制详解 2019-04-21
java过滤小写字母的正则_AJPFX总结关于Java中过滤出字母、数字和中文的正则表达式... 2019-04-21
mysql 表字段 pk_Doctrine / MySql与多列PK表的关系 2019-04-21
七牛上传php_PHP如何上传文件到七牛的方法代码 2019-04-21
php+7+php+5.6,CentOS 7 + PHP 5.6.12 2019-04-21
jsonrpc php使用,php-JsonRPC 2019-04-21
imagemagick+php版本,php版本 5.2.14 按照论坛里搜的imagemagick教程安装不成功 2019-04-21
mac selenium php,Mac配置selenium3自动化测试环境 2019-04-21
php盲注漏洞修复,织梦dedecms注入漏洞pm.php修复方法 2019-04-21
ora 01461 php oracle,Oracle ORA-01461 异常解决 2019-04-21