首页 > 编程语言 >Python爬虫框架之Scrapy

Python爬虫框架之Scrapy

时间:2024-12-18 16:11:05浏览次数:8  
标签:spider 请求 Python self Scrapy 爬虫 scrapy Spider

Scrapy是一个用Python编写的强大的网络爬虫框架,用于高效地从网页中提取所需的数据。

一、安装Scrapy

  1. 确保已经安装了Python(建议使用Python 3.x)。可以通过以下命令来安装Scrapy:
    • 在命令行中使用pip install scrapy(如果使用的是Anaconda环境,可以使用conda install -c conda -forge scrapy)。

二、Scrapy的基本架构

  1. Spider(爬虫)
    • 这是Scrapy的核心组件,用于定义如何爬取网站。例如,你可以定义一个简单的Spider来爬取一个书籍网站的书名和作者信息。
    • 代码示例:
import scrapy

class BookSpider(scrapy.Spider):
    name = "book_spider"
    start_urls = ["https://example.com/books"]

    def parse(self, response):
        for book in response.css('div.book'):
            yield {
                'title': book.css('h2::text').get(),
                'author': book.css('p.author::text').get()
            }
  • 在这个示例中,name属性定义了Spider的名称,start_urls是开始爬取的URL列表。parse方法是处理响应(从网站获取的HTML内容)的回调函数,它使用CSS选择器来提取数据。
  1. Item(数据项)
    • 用于存储爬取到的数据。可以把它看作是一个Python字典,但具有更好的结构和可维护性。
    • 例如:
import scrapy

class BookItem(scrapy.Item):
    title = scrapy.Field()
    author = scrapy.Field()
  • 可以在Spider中使用yield关键字返回Item对象,然后通过管道(Pipeline)进行进一步处理。
  1. Pipeline(管道)
    • 主要用于处理Spider提取的数据,比如数据清洗、存储等操作。
    • 例如,将爬取到的书籍信息存储到数据库中:
class BookPipeline:
    def open_spider(self, spider):
        # 连接数据库等初始化操作
        self.connection = sqlite3.connect('books.db')
        self.cursor = self.connection.cursor()
        self.cursor.execute('CREATE TABLE IF NOT EXISTS books (title TEXT, author TEXT)')

    def process_item(self, item, spider):
        self.cursor.execute("INSERT INTO books VALUES (?,?)", (item['title'], item['author']))
        self.connection.commit()
        return item

    def close_spider(self, spider):
        # 关闭数据库连接等清理操作
        self.connection.close()
  • 要启用这个管道,需要在settings.py文件中配置ITEM_PIPELINES选项。
  1. Downloader Middleware(下载中间件)和Spider Middleware(爬虫中间件)
    • Downloader Middleware用于处理请求和响应,比如设置请求头、代理等。例如,设置随机的用户代理来避免反爬虫:
class RandomUserAgentMiddleware:
    def process_request(self, request, spider):
        user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36',
                       'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Firefox/88.0.1']
        request.headers['User - Agent'] = random.choice(user_agents)
  • Spider Middleware主要用于处理Spider的输入和输出,比如对Spider产生的请求和解析后的数据进行处理。

三、Scrapy的工作流程

  1. 首先,引擎(Engine)从Spider获取初始请求(start_urls中的请求),并将请求发送到调度器(Scheduler)。
  2. 调度器对请求进行排队,然后将请求发送到下载器(Downloader)。
  3. 下载器根据请求下载网页内容,并将响应返回给引擎。
  4. 引擎将响应发送给Spider进行处理,Spider通过parse等回调函数提取数据,并可以产生新的请求。
  5. 提取到的数据被发送到管道进行处理,新产生的请求会再次进入调度器排队,如此循环,直到没有新的请求。

四、Scrapy的优点

  1. 高效性
    • 采用异步I/O和多线程技术,能够快速地并发处理多个请求,大大提高了爬取速度。
  2. 灵活性
    • 可以方便地定制Spider来适应不同的网站结构,通过选择器(CSS选择器或XPath)精确地提取数据。
  3. 可扩展性
    • 中间件和管道机制使得可以很容易地扩展功能,如添加反爬虫策略、数据存储方式等。

五、Scrapy的应用场景

  1. 数据采集
    • 可以用于采集电商网站的商品信息(价格、评论等)、新闻网站的新闻内容、社交媒体的数据等。
  2. 搜索引擎索引构建
    • 帮助搜索引擎构建索引,通过爬取网页内容,提取关键词等信息,为搜索引擎提供数据。

标签:spider,请求,Python,self,Scrapy,爬虫,scrapy,Spider
From: https://www.cnblogs.com/java-note/p/18615191

相关文章

  • python脚本使用mozjpeg批量压缩图片
    安装mozjpegnpminstallmozjpeg-g压缩单个文件命令mozjpeg-quality75-outfileC:\\Users\\xxx\\Downloads\\img\\press\\pump1_1.jpgC:\\Users\\xxx\\Downloads\\img\\origin\\pump1_1.jpgmozjpeg-quality压缩质量-outfile输出路径输入路径批量压缩文件编写p......
  • 小麦病虫害识别与防治系统,resnet50,mobilenet模型【pytorch框架+python源码】
     更多目标检测、图像分类识别、目标追踪等项目可看我主页其他文章功能演示:小麦病虫害识别与防治系统,卷积神经网络,resnet50,mobilenet【pytorch框架,python源码】_哔哩哔哩_bilibili(一)简介小麦病虫害识别与防治系统是在pytorch框架下实现的,这是一个完整的项目,包括代码,数据集,......
  • Python中构建全局字典的详细指南
    在Python编程中,全局变量是指在整个程序运行期间都可以访问的变量。全局字典作为一种特殊的全局变量,可以存储各种类型的数据,包括字符串、数字、列表、元组等,这使得它在数据管理和跨模块通信方面非常有用。本文将详细介绍如何在Python中构建和使用全局字典,包括理论概述和代码示例......
  • 【python高级】322-Python装饰器
    闭包的作用就是为了编写装饰器装饰器的本质就是一个闭包装饰器定义就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数。装饰器的功能特点:①不修改已有函数的源代码②不修改已有函数的调用方式③给已有函数增加额外的功能闭包这么编程装饰器的?装饰器的雏形......
  • 爬虫js逆向-数据解密
    本文所用网站企名片科创平台在爬虫中只有运用js逆向才算是真正的入门爬虫,在这里我介绍一种简单的数据解密运用到的js逆向,打开网页是这样的,通过分析下面的新闻在网页源代码里面没有是后端发送的的数据,然后打开开发者工具进行抓包,分析之后要抓取的网页是这个然后分析数据携带......
  • 2024最详细Python、Pycharm安装教程来了!
    在开始安装Python之前,让我们先准备好以下内容:一台电脑(Windows、Mac或Linux系统)稳定的网络连接【安装包领取方式在文末!!】一、进入Python官网首页,下载Python选择Python3.10.5,下载64位的版本 二、下载完成后,进行安装1.双击Python-3.10.5-amd64.exe2.选择Custom......
  • Python 装饰器是什么
    Python中的装饰器是一种设计模式,用于在不修改原始函数代码的情况下,给函数添加额外的功能。装饰器本质上是一个函数,它接受一个函数作为参数并返回一个新的函数。装饰器可以在不修改原始函数定义的情况下,增加函数的行为。装饰器的基本语法如下:```python@decoratordeffunction_to_......
  • Python城市管理执法软件系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍pycharm毕业设计项目框架支持:flask/djangoPython版本:python3.7.7开发软件:PyCharm......
  • 【matplotlib 库画雷达图】你知道怎么用python画雷达图、蜘蛛网图?对于精度展示、模型
    【matplotlib库画雷达图】你知道怎么用python画雷达图、蜘蛛网图?对于精度展示、模型对比非常重要。附代码及解释。【matplotlib库画雷达图】你知道怎么用python画雷达图、蜘蛛网图?对于精度展示、模型对比非常重要。附代码及解释。文章目录【matplotlib库画雷达图】......
  • Python的系统之眼:sys库的奥秘
    文章目录Python的系统之眼:sys库的奥秘背景:为何sys库不可或缺?什么是sys库?如何安装sys库?5个简单的库函数使用方法5个场景使用代码说明3个常见bug及解决方案总结Python的系统之眼:sys库的奥秘背景:为何sys库不可或缺?在Python的世界里,sys库是一个不可或缺的标准库,它提......