从零开始学python(十五)大厂必用feapder框架

前言

今天讲述很多大厂都在用的feapder框架,前面更新了十四个从零开始学python的系列文章,分别是
1.编程语法必修篇
2.网络编程篇
3.多线程/多进程/协程篇
4.MySQL数据库篇
5.Redis数据库篇
6.MongoDB数据库篇
7.机器学习篇
8.全栈开发篇
9.Numpy/pandas/matplotlib篇
10.Hadoop篇
11.Spark篇
12.爬虫工程师篇
13.爬虫工程师自动化和抓包篇
14.scrapy框架篇

本系列文根据以下学习路线展开讲述:

从零开始学python到高级进阶路线图主页

一丶feapder任务调度机制

Feapder是一个基于Python的开源网络爬虫框架,具有任务调度、请求管理、数据解析等功能。其中,任务调度机制是Feapder框架的核心组成部分之一,用于管理和调度爬虫任务的执行。

任务调度机制的核心概念是任务队列(Task Queue),它用于存储待执行的任务,并按照指定的优先级和调度策略来决定任务的执行顺序。Feapder框架使用Redis作为任务队列的存储后端,并通过调度器(Scheduler)来管理任务队列的操作。

下面是Feapder框架任务调度机制的详细解释:

1.任务队列(Task Queue)

Feapder使用Redis作为任务队列的存储后端。任务队列中存储了待执行的任务,每个任务包含了要爬取的网址、爬虫名称、优先级等信息。当爬虫启动时,它会从任务队列中获取待执行的任务,并开始执行。

2.调度器(Scheduler)

调度器是任务调度机制的核心组件,用于管理任务队列。它负责从任务队列中获取待执行的任务,并根据任务的优先级和调度策略来确定任务的执行顺序。调度器还负责将已执行的任务返回给任务队列,以便可以对其进行后续处理。

Feapder框架中的调度器实现了多个调度策略,包括先进先出(FIFO)、优先级(Priority)和随机(Random)等。开发者可以根据实际需求选择适合的调度策略。

3.爬虫任务(Spider Task)

爬虫任务是任务调度机制的核心对象,表示待执行的爬虫任务。每个爬虫任务包含了要爬取的网址、待执行的爬虫名称、任务优先级等信息。爬虫任务由调度器从任务队列中获取,并通过调度器分发给相应的爬虫执行。当爬虫完成任务后,会将任务返回给调度器,从而完成任务的生命周期。

4.爬虫执行过程

当Feapder框架启动时,调度器会从任务队列中获取待执行的任务。然后,根据调度策略和任务优先级,将任务分发给相应的爬虫进行执行。爬虫执行任务后,会返回任务的执行结果给调度器。调度器根据任务的状态进行下一步的调度决策,继续获取下一个待执行的任务,并分发给爬虫继续执行。这样,任务的执行和调度就形成了一个循环,直到任务队列中没有待执行的任务为止。

通过任务调度机制,Feapder框架可以高效地管理和调度大量的爬虫任务,并实现灵活的任务优先级和调度策略。

二丶Feapder中间件实现异常处理

在Feapder框架中,中间件(Middleware)是一种拦截和处理请求以及响应的机制,用于在请求发送和响应解析过程中进行额外的处理。中间件可以用于实现异常处理、请求过滤、请求修改、日志记录等功能。

下面是Feapder框架中间件实现异常处理的详细解释:

1.异常处理中间件(Exception Middleware)

异常处理中间件是一种特殊类型的中间件,用于捕获和处理爬虫请求过程中可能出现的异常情况。当请求过程中发生异常时,异常处理中间件会捕获异常并进行相应的处理,如记录日志、重试请求等。

2.异常处理中间件的实现

在Feapder框架中,可以自定义异常处理中间件,实现自己的异常处理逻辑。可以通过继承BaseMiddleware并重写相应的方法来实现异常处理中间件。

  • process_request(request, spider) 方法用于处理请求发送之前的逻辑。在该方法中,可以对请求进行一些预处理,或者进行异常处理的初始化操作。

  • process_response(request, response, spider) 方法用于处理请求响应的逻辑。在该方法中,可以对响应进行一些处理,或者捕获和处理请求过程中可能出现的异常情况。

  • process_exception(request, exception, spider) 方法用于处理请求过程中发生的异常情况。在该方法中,可以针对特定的异常类型进行相应的处理,如记录日志、重试请求等。

3.配置异常处理中间件

在Feapder框架的配置文件中,可以指定使用哪些中间件以及它们的顺序。对于异常处理中间件,可以将其添加到中间件列表中,并指定其顺序。Feapder框架在执行请求过程时,会按照中间件列表的顺序依次调用相应的中间件方法。

通过中间件机制,Feapder框架提供了灵活的异常处理能力。开发者可以自定义异常处理中间件,并根据自己的需求进行定制化的异常处理逻辑。

三丶框架对接selenium实现自动化

feapder是一个基于Python的爬虫框架,它提供了一些方便的工具和接口,可以帮助开发者快速构建爬虫。其中,feapder框架对接selenium实现自动化是其重要的功能之一。

Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作,比如点击、输入、滚动等。在爬虫中,我们可以利用Selenium来模拟用户的操作,从而实现一些需要登录或者需要执行JavaScript代码的爬虫任务。

下面是feapder框架对接selenium实现自动化的详细步骤:

1.安装Selenium和ChromeDriver

在使用Selenium之前,需要先安装Selenium和ChromeDriver。Selenium可以通过pip安装,ChromeDriver需要根据自己的Chrome浏览器版本下载对应的驱动程序。

2.创建SeleniumDownloader

在feapder中,我们可以通过创建SeleniumDownloader来实现对接Selenium。SeleniumDownloader是一个下载器,它可以在下载网页时使用Selenium来模拟用户的操作。

from feapder.downloader import SeleniumDownloader

downloader = SeleniumDownloader(
    chrome_executable_path="path/to/chromedriver",
    headless=False,  # 是否使用无头浏览器
    load_images=False,  # 是否加载图片
    window_size=(1920, 1080),  # 浏览器窗口大小
    timeout=30,  # 超时时间
)

3.创建Spider

在feapder中,我们可以通过创建Spider来实现爬虫任务。在Spider中,我们可以使用SeleniumDownloader来下载网页,并且可以在下载前或下载后执行一些自定义的操作。

from feapder import Spider

class MySpider(Spider):
    def start_requests(self):
        yield self.request(url="https://www.baidu.com", callback=self.parse)

    def parse(self, request, response):
        # 使用SeleniumDownloader下载网页
        response = self.download(request, downloader_cls=SeleniumDownloader)

        # 在下载前或下载后执行一些自定义的操作
        driver = response.meta["driver"]
        driver.execute_script("alert('Hello, world!')")

        # 解析网页
        ...

if __name__ == "__main__":
    MySpider.start()

在上面的代码中,我们使用SeleniumDownloader下载了百度首页,并在下载后执行了一个JavaScript脚本,弹出了一个提示框。

4.配置Selenium

在使用Selenium时,我们需要配置一些选项,比如浏览器窗口大小、超时时间等。在feapder中,我们可以通过在Spider中定义selenium_options属性来配置Selenium。

from selenium.webdriver.chrome.options import Options

class MySpider(Spider):
    selenium_options = Options()
    selenium_options.add_argument("--disable-gpu")
    selenium_options.add_argument("--disable-dev-shm-usage")
    selenium_options.add_argument("--disable-extensions")
    selenium_options.add_argument("--disable-infobars")
    selenium_options.add_argument("--disable-notifications")
    selenium_options.add_argument("--disable-popup-blocking")
    selenium_options.add_argument("--disable-setuid-sandbox")
    selenium_options.add_argument("--disable-web-security")
    selenium_options.add_argument("--ignore-certificate-errors")
    selenium_options.add_argument("--no-sandbox")
    selenium_options.add_argument("--start-maximized")
    selenium_options.add_argument("--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36")

    def start_requests(self):
        ...

在上面的代码中,我们定义了一些常用的Selenium选项,比如禁用GPU加速、禁用扩展、禁用通知等。

5.使用代理

在爬虫中,我们经常需要使用代理来隐藏自己的IP地址。在feapder中,我们可以通过在Spider中定义proxy_pool属性来使用代理。

class MySpider(Spider):
    proxy_pool = ["http://127.0.0.1:8888", "http://127.0.0.1:8889"]

    def start_requests(self):
        ...

在上面的代码中,我们定义了两个代理地址,feapder会自动从中选择一个代理来访问网页。

6.使用Cookie

在爬虫中,我们经常需要使用Cookie来模拟登录状态。在feapder中,我们可以通过在Spider中定义cookie_pool属性来使用Cookie。

class MySpider(Spider):
    cookie_pool = [
        {"name": "name1", "value": "value1", "domain": "domain1.com"},
        {"name": "name2", "value": "value2", "domain": "domain2.com"},
    ]

    def start_requests(self):
        ...

在上面的代码中,我们定义了两个Cookie,feapder会自动将它们添加到请求头中。

7.使用自定义的SeleniumDownloader

在feapder中,我们可以通过继承SeleniumDownloader来实现自定义的下载器。在自定义的下载器中,我们可以重写一些方法,比如before_download、after_download等,来实现一些自定义的操作。

from feapder.downloader import SeleniumDownloader

class MyDownloader(SeleniumDownloader):
    def before_download(self, request):
        # 在下载前执行一些自定义的操作
        ...

    def after_download(self, request, response):
        # 在下载后执行一些自定义的操作
        ...

class MySpider(Spider):
    downloader_cls = MyDownloader

    def start_requests(self):
        ...

在上面的代码中,我们定义了一个自定义的下载器MyDownloader,并在Spider中使用它来下载网页。

8.总结

通过以上步骤,我们可以在feapder框架中对接Selenium,实现自动化爬虫任务。在使用Selenium时,我们需要注意一些问题,比如浏览器窗口大小、超时时间、代理、Cookie等。同时,我们也可以通过自定义的SeleniumDownloader来实现一些自定义的操作。

四丶feapder分布式采集

Feapder是一个基于Python的分布式爬虫框架,它支持多种数据存储方式,包括MySQL、MongoDB、Redis等。Feapder框架的分布式采集功能可以让多个爬虫节点同时工作,提高爬取效率。

下面是Feapder框架分布式采集的详细介绍:

1.安装Feapder框架

首先需要安装Feapder框架,可以使用pip命令进行安装:

pip install feapder

2.创建爬虫项目

使用Feapder框架创建一个爬虫项目非常简单,只需要继承Feapder类并实现相应的方法即可。下面是一个简单的爬虫示例:

from feapder import Spider

class MySpider(Spider):
    def start_requests(self):
        yield self.request("http://www.example.com")

    def parse(self, request, response):
        print(response.text)

在这个示例中,我们创建了一个名为MySpider的爬虫类,它继承自Feapder类。在start_requests方法中,我们发送了一个请求并将其返回。在parse方法中,我们打印了响应的文本内容。

3.配置分布式采集

要启用分布式采集功能,需要在配置文件中设置相应的参数。下面是一个示例配置文件:

# 配置文件
name: my_spider
log_level: INFO
redis:
  host: 127.0.0.1
  port: 6379
  db: 0
  password: ""
  queue_name: my_spider
  max_tasks: 100
  concurrency: 10

在这个配置文件中,我们设置了Redis作为任务队列的存储方式,并指定了队列名称、最大任务数和并发数等参数。

4.启动爬虫节点

要启动爬虫节点,需要使用Feapder命令行工具。首先需要安装Feapder命令行工具:

pip install feapder-cli

然后使用feapder命令启动爬虫节点:

feapder run my_spider

在这个命令中,我们指定了要运行的爬虫名称为my_spider。

5.提交任务

要提交任务,可以使用Feapder框架提供的TaskQueue类。下面是一个示例:

from feapder import TaskQueue

queue = TaskQueue()
queue.put("http://www.example.com")

在这个示例中,我们创建了一个TaskQueue对象,并向其中提交了一个任务。

6.运行爬虫

当任务提交完成后,可以使用Feapder框架提供的run方法来运行爬虫:

from feapder import run_spider

run_spider(MySpider)

在这个示例中,我们使用run_spider方法来运行MySpider爬虫。

7.查看结果

当爬虫运行完成后,可以查看爬取的结果。Feapder框架支持多种数据存储方式,包括MySQL、MongoDB、Redis等。可以根据需要选择相应的存储方式。

以上就是Feapder框架分布式采集的详细介绍。使用Feapder框架可以轻松实现分布式爬虫,提高爬取效率。

相关推荐
蒙娜丽宁5 分钟前
《Python OpenCV从菜鸟到高手》——零基础进阶,开启图像处理与计算机视觉的大门!
python·opencv·计算机视觉
光芒再现dev7 分钟前
已解决,部署GPTSoVITS报错‘AsyncRequest‘ object has no attribute ‘_json_response_data‘
运维·python·gpt·语言模型·自然语言处理
王俊山IT7 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。9 分钟前
c++多线程
java·开发语言
小政爱学习!11 分钟前
封装axios、环境变量、api解耦、解决跨域、全局组件注入
开发语言·前端·javascript
好喜欢吃红柚子20 分钟前
万字长文解读空间、通道注意力机制机制和超详细代码逐行分析(SE,CBAM,SGE,CA,ECA,TA)
人工智能·pytorch·python·计算机视觉·cnn
小馒头学python25 分钟前
机器学习是什么?AIGC又是什么?机器学习与AIGC未来科技的双引擎
人工智能·python·机器学习
k093326 分钟前
sourceTree回滚版本到某次提交
开发语言·前端·javascript
神奇夜光杯34 分钟前
Python酷库之旅-第三方库Pandas(202)
开发语言·人工智能·python·excel·pandas·标准库及第三方库·学习与成长
Themberfue36 分钟前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·