您的位置:

scrapy爬虫框架全面解析

一、scrapy爬虫框架图

scrapy是Python语言写成的爬虫框架,它结构清晰且具有高度的可定制化能力。以下是scrapy爬虫框架的实现原理图:

    +-------------------------------------------------+
    |                                                 |
    |    Scheduler        +--------+    Spider         |
    |    --------->      |        |   --------->       |
    |                    | Scrapy |                   |
    |    Item Pipeline   | Engine |   Downloader      |
    |    --------->      |        |   <---------      |
    |                    +--------+                   |
    |                                                 |
    +-------------------------------------------------+

二、scrapy爬虫框架结构主要包括

Scrapy框架主要包括以下5个组件:

1.引擎 (Scrapy Engine):负责控制各组件之间的数据流,包括调度器、下载器以及爬虫。

2.调度器 (Scheduler):负责接收引擎传递过来的数据请求,并将请求放入队列中让下载器去下载。

3.爬虫 (Spider):负责定义爬取网站的逻辑和网站如何进行解析,生成可爬取的数据及应对各种异常。

4.下载器 (Downloader):负责下载爬虫需要的网页,并将网页返回给引擎,同时支持通过配置随机更换user-agent,来防止被封禁。

5.管道 (Item Pipeline):负责处理引擎传递过来的数据,支持对数据的清洗、格式转换和持久化操作。

三、scrapy爬虫框架面试题

面试时常出以下几个问题:

1. scrapy怎么实现去重?

通过调度器和去重过滤器实现,可以利用集合、Redis、数据库等进行去重。

2. 如何对代理池进行维护?

可以使用开源框架Scrapy——ProxyPool进行维护,实现自动扫描和测试代理IP可用性,从而不断更新代理池。

3. 如何处理分页数据?

在请求中添加页码参数,并重写start_requests方法来动态生成请求,将所有数据的请求全部添加至调度器中,让调度器去调度下载器进行请求。

四、scrapy爬虫框架包含的组件

在实际爬虫开发中,我们还可以使用以下两个组件:

1.中间件 (Middleware):可以对爬取过程中的Request和Response进行处理,如添加随机User-Agent头、IP代理等。

2.扩展 (Extension):提供了一系列的扩展API,可以自定义Scrapy的各个环节的实现来完善框架。

五、scrapy爬虫框架流程

1.定义爬虫解析规则。

注:通过分析网站的查询语言,选择正确的解析方法来爬取目标信息。

2.定义数据保存管道。

注:爬取的数据可以直接保存在CSV文件、MongoDB数据库、MySQL数据库等存储介质中。

3.创建爬虫并配置参数。

注:如果需要,可以在这个阶段为爬虫添加更多的中间件和扩展。

4.启动Scrapy引擎。

注:在引擎中调用start_requests()方法启动Scrapy。

六、scrapy爬虫框架安装

1. 安装Scrapy

pip install scrapy

2. 安装Scrapy-Redis (可选)

pip install scrapy-redis

七、scrapy爬虫框架有几个模块

Scrapy 框架主要有以下几个子模块:

1. scrapy.spiders:爬虫模块

2. scrapy.selector:XPath 和 CSS 查询器

3. scrapy.exceptions:异常处理模块

4. scrapy.utils:包含一些常用的 Scrapy 工具类

八、scrapy爬虫框架不指定域名可以吗

可以,Scrapy 爬虫框架允许爬取一个或多个指定的域名的网页,也可以在不指定域名的情况下进行爬取。在 spiders/ 目录下创建一个名为 argument.py 文件:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.http import Request

class ArgumentSpider(scrapy.Spider):
    name = 'argument'

    def start_requests(self):
        # 定义爬取的URL列表
        urls = [
            'http://www.example.com/',
            'http://www.example.org/',
            'http://www.example.net/',
        ]
        for url in urls:
            yield Request(url=url, callback=self.parse)

    def parse(self, response):
        """
        解析函数
        """
        pass

九、scrapy爬虫框架获取虎扑nba

以获取虎扑NBA新闻为例:

1.创建项目。

scrapy startproject huPu

2.在huPu/spiders目录下创建hupu.py文件:

import scrapy

class HupuSpider(scrapy.Spider):
    name = 'hupu'
    #爬虫运行的起始url
    allowed_domains = ['voice.hupu.com']
    start_urls = ['https://voice.hupu.com/nba/1']

    def parse(self, response):
        #所有的帖子列表
        post_list = response.xpath('//div[@class="news-list"]/ul/li')
        for post in post_list:
            item = {}
            #标题
            item['title'] = post.xpath('./a/text()').extract_first()
            #链接
            item['href'] = post.xpath('./a/@href').extract_first()
            #时间
            item['date'] = post.xpath('./span/text()').extract_first()

            #爬取详情页
            yield scrapy.Request(url=item['href'], callback=self.parse_detail, meta={'item': item})

        #翻页,-1表示去掉下一页
        next_url = response.xpath('//div[@class="page"]/a[@class="hp-next-page"]/@href')
        if next_url:
            url = 'https://voice.hupu.com/nba/' + next_url.extract_first().strip('/')
            yield scrapy.Request(url=url, callback=self.parse)

    def parse_detail(self, response):
        item = response.meta['item']
        #详情
        item['detail'] = response.xpath('//div[contains(@class,"artical-content")]/text() | //div[contains(@class,"artical-content")]/p/text()').extract()
        yield item

3.执行爬虫。

scrapy crawl hupu

十、python爬虫框架scrapy选取相关小标题

1. scrapy结构图

2. scrapy包含的组件

3. scrapy的使用面试题

4. scrapy的启动流程

5. scrapy安装方法

6. scrapy包含的几个模块

7. scrapy不指定域名可不可以爬取

8. scrapy爬取虎扑nba新闻演示