基于 pyspider 搭建分布式集群爬虫流程

背景介绍

pyspider 架构,大概的流程如下图所示:

pyspider

 

整个 pyspider 的各个模块间的任务传递是由**消息队列**传输的,其中任务的调度则是由「scheduler」模块控制,所以按作者的意思,除了「scheduler」调度模块只能单点,其他的「fetcher」,「processor」,甚至是「monitor & webui」,都可以实现多实例分布式部署。

这样一来分布式 pyspider 的瓶颈就在单点的 「scheduler」 节点的消费能力了,实际跑起来观察后发现确实「processor」到「scheduler」发送任务的队列经常消费不过来。

言归正传

之前将单机的 pyspider 部署在一台机子上,这一台负责「数据存储」,「消息队列」,「任务调度」,「URL请求」,「页面处理」全部的爬虫相关任务,导致 CPU 利用率一直很高。
所以现在单独开了一台机子,专门负责「URL请求」和「页面处理」,即上述的「fetcher」和「processor」模块。

主机地址、数据库、消息队列

  • 爬虫机器1: 192.168.1.33
  • 爬虫机器2: 192.168.1.71
  • 数据库: mongodb://192.168.1.33:27017
  • 消息队列: redis://192.168.1.33:6379

依赖安装

  • docker & docker-compose
  • docker pull pyspider
  • docker pull redis
  • docker pull mongodb

非爬虫部分配置

  • docker 配置网络接口:docker network create --driver bridge pyspider

  • 数据库服务:我使用 mongoDB,由于之前就把服务起起来了,所以我没有进行 docker 封装,如果你是新起一个分布式爬虫,建议数据库服务也使用Docker。

  • 消息队列服务:redis。命令:docker run --network=pyspider --name redis -d -p 6379:6379 redis

  • 注意: 我下面用的非原生 pyspider,因为我需要依赖一些 pyspider 没有的库,请注意替换 (my/pyspider</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的。 如果要使用 PySpider 写一个爬虫,首先需要安装 PySpider。你可以使用 pip 安装: ``` pip install pyspider ``` 然后就可以开始编写爬虫了。 爬虫一般分为四个部分: 1. **爬取策略**:确定爬取的目标网站、爬取的数据以及爬取的顺序。 2. **网络请求**:使用 Python 的网络库(如 requests、urllib 等)向目标网站发送网络请求,获取网页内容。 3. **HTML 解析**:使用 Python 的 HTML 解析库(如 Beautiful Soup、pyquery 等)解析网页内容,提取出想要的数据。 4. **数据存储**:将提取出的数据存储到文件、数据库或其他存储介质中。 下面是一个使用 PySpider 写的简单爬虫的示例: ```python import pyspider # 定义爬虫类 class Spider(pyspider.Spider): # 定义爬虫的名称和爬取的目标网站 name = 'my_spider' start_urls = ['http://www.example.com/'] # 定义爬虫的爬取策略 def on_start(self): self.crawl(self.start_urls[0], callback=self.index_page) # 定义爬虫的回调函数,处理爬取到的数据 def index_page(self, response): # 使用 Beautiful Soup 解析网页内容 soup = BeautifulSoup(response.text, 'html.parser') # 提取需要 ### 回答2: 使用Pyspider编写一个爬虫非常简单。在使用之前,我们需要确保已经安装Python和Pyspider,可以使用pip命令进行安装。 首先,我们需要导入必要的模块和类。在Pyspider中,我们需要使用三个类:CrawlSpider类,BaseHandler类和PhantomJSHandler类。 ``` from pyspider.libs.base_handler import * from pyspider.libs.phantomjs_handler import * ``` 接下来,我们需要创建一个Handler类,该类将继承BaseHandler类。在这个类中,我们可以定义我们要爬取的网站和解析器。例如,我们可以定义一个`on_start`方法来指定初始URL。 ``` class MySpiderHandler(BaseHandler): crawl_config = { 'headers': { 'User-Agent':'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)' } } def on_start(self): self.crawl('http://www.example.com', callback=self.index_page) def index_page(self, response): # 解析网页并提取所需信息 pass ``` 然后,我们需要实例化这个爬虫类,并使用`phantomjs`参数指定使用PhantomJS作为浏览器引擎。 ``` if __name__ == '__main__': configure_logging() phantomjs_handler = PhantomJSHandler() phantomjs_handler.on_start() ``` 最后,可以在命令行中运行脚本来启动爬虫。 ``` $ python spider.py ``` 这就是使用Pyspider编写爬虫的基本步骤。当然,根据实际需求,我们还可以添加更多的功能和功能扩展。 ### 回答3: Pyspider是一个基于Python开发的强大的爬虫框架,可以帮助我们方便地爬取网页数据。下面是一个简单示例,用300字中文回答如何用Pyspider写个爬虫: 首先,我们需要安装Pyspider。在命令行中使用pip install pyspider进行安装。 接下来,我们创建一个名为spider的Python文件。在文件中,我们首先导入必要的库,比如from pyspider.libs.base_handler import * 然后,我们创建一个名为MySpider的类,继承BaseHandler。在这个类中,我们需要定义一些必要的属性和方法。 1. start_urls: 爬虫的起始链接,可以是一个列表或者字符串。 2. crawl_config: 爬虫的配置,比如深度、并发数量等。 在类中,我们需要定义一个on_start方法,用于指定爬虫启动时要执行的操作。比如可以使用self.crawl方法从起始链接开始爬取数据。 我们还需要定义一个on_response方法,用于处理每个请求的响应。在这个方法中,我们可以使用response.doc(如果需要解析HTML)或response.text(如果是JSON数据)来获取返回的内容,并对其进行解析和处理。 此外,我们还可以在类中定义其他辅助方法,比如解析HTML或JSON数据的方法,保存数据的方法等。 最后,我们需要在文件的最后添加一行代码,如下所示: if __name__ == '__main__': MySpider().run() 这样,我们的爬虫就可以通过运行python spider.py命令来启动了。 以上是一个简单的Pyspider爬虫示例,当然在实际应用中可能还需要更复杂的逻辑和处理。通过学习Pyspider的文档和示例,我们可以进一步掌握如何使用Pyspider来开发更强大的爬虫

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值