Scrapy框架入门:轻松爬取网页数据 ️

本文详细介绍了如何使用Scrapy框架进行Python网络爬虫开发,包括安装、项目创建、编写爬虫、数据提取与存储,以及配置Scrapy设置。通过实例演示了爬取4399小游戏网站的游戏信息。
摘要由CSDN通过智能技术生成

在这篇文章中,我们将深入探讨Scrapy框架的基础入门,帮助你快速上手Python中的这一强大的网络爬虫工具。Scrapy不仅提供了一种快速抓取网页的方式,还让数据的提取和存储变得异常简单。我们将通过一个实际的例子——爬取4399小游戏网站的游戏信息,来展示Scrapy的基本使用方法。🎮🕷️

Scrapy框架介绍 🌐

Scrapy是一个用Python实现的应用框架,专为网页数据抓取、处理和存储而生。它基于Twisted异步网络框架,能够处理大量的数据以及复杂的网络请求。Scrapy的高效和易用性,使其成为许多数据科学家和网络爬虫开发者的首选工具。🛠️

安装Scrapy 🔧

安装Scrapy非常简单,前提是你的计算机上已经安装了Python环境。Scrapy支持Python 3.6及以上版本,安装命令如下:

pip install scrapy

创建Scrapy项目 📦

创建一个Scrapy项目也非常直观。只需要在终端中运行以下命令,就可以生成一个名为game的项目:

scrapy startproject game

这个命令会创建一个包含Scrapy项目基本结构的目录,包括用于放置爬虫代码的spiders目录。

编写爬虫 🕸️

Scrapy的核心在于它的爬虫(Spider),它负责从网页中提取所需的信息。创建一个爬虫的命令如下:

cd game
scrapy genspider xiaoyouxi 4399.com

这会在game/spiders目录下创建一个名为xiaoyouxi的爬虫文件。

提取数据 📝

Scrapy使用选择器(Selectors)来提取数据,支持XPath和CSS选择器。例如,提取游戏名称和类别的代码如下:

name = response.xpath("//ul[@class='n-game cf']/li/a/b/text()").extract_first()
category = response.xpath("./em/a/text()").extract_first()

存储数据 💾

Scrapy提供了多种存储解决方案。最简单的方式是直接将爬取的数据导出到JSON或CSV文件中:

scrapy crawl xiaoyouxi -o games.json

运行爬虫 🚀

最后,运行爬虫只需要一个简单的命令:

scrapy crawl xiaoyouxi

运行结果

在这里插入图片描述

实现思路 🧠

通过以上步骤,我们可以总结Scrapy爬虫的基本实现思路:

  1. 项目和爬虫的创建:使用Scrapy的命令行工具快速创建项目框架和爬虫文件。
  2. 编写爬虫逻辑:在爬虫文件中定义爬取的URLs、解析方法和提取数据的逻辑。
  3. 数据提取:利用XPath或CSS选择器从HTML中提取所需的数据。
  4. 数据存储:将提取的数据存储到文件或数据库中。
  5. 爬虫运行:通过命令行启动Scrapy爬虫,开始数据的爬取和存储过程。

Scrapy的强大之处在于它提供了一套完整的框架来处理网页爬取、数据提取和存储等一系列过程,极大地提高了开发效率。

具体代码

xiaoyouxi.py

import scrapy


class XiaoyouxiSpider(scrapy.Spider):
    name = "xiaoyouxi"  # 爬虫名
    allowed_domains = ["4399.com"]  # 允许的域名
    start_urls = ["https://www.4399.com/flash/"]  # 起始url

    def parse(self, response):  # 解析函数
        # game_name = response.xpath("//ul[@class='n-game cf']/li/a/b/text()").extract() # 从网页中提取游戏名 extract
        #  <Selector query="//ul[@class='n-game cf']/li/a/b/text()" data='白方块过圆圈'> # 一个Selector对象
        # print(game_name)
        li_list = response.xpath("//ul[@class='n-game cf']/li")
        for item in li_list:
            name = item.xpath("./a/b/text()").extract_first()  # 提取游戏名
            category = item.xpath("./em/a/text()").extract_first()  # 提取游戏类别
            date = item.xpath("./em/text()").extract_first()  # 时间

            dic = {
                "name": name,
                "category": category,
                "date": date
            }
            yield dic  # 返回数据 yield: 生成器 作用:返回数据

pipelines.py

# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter

'''
    管道文件 默认关闭需要在settings.py中开启
    作用:对爬虫爬取的数据进行处理
    1. 数据清洗
    2. 数据存储
    3. 数据去重
    4. 数据验证
    5. 数据筛选
    6. 数据转换
'''


class GamePipeline:
    def process_item(self, item, spider):  # 处理item
        print(item)
        # print(spider.name)
        return item


class NewPipeline:
    def process_item(self, item, spider):  # 处理item
        # 网站名
        item['webname'] = "4399小游戏"
        return item

settings.py

# Scrapy settings for game project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://docs.scrapy.org/en/latest/topics/settings.html
#     https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://docs.scrapy.org/en/latest/topics/spider-middleware.html
'''
    爬虫配置文件
    作用:配置爬虫的一些参数
    1. 请求头
    2. 代理
    3. IP
    4. 爬取速度
    5. 爬取深度
    6. 爬取范围
'''
BOT_NAME = "game" # 爬虫名

SPIDER_MODULES = ["game.spiders"] # 爬虫模块
NEWSPIDER_MODULE = "game.spiders" # 新爬虫模块

LOG_LEVEL = "WARNING"
# 日志的级别:CRITICAL、ERROR、WARNING、INFO、DEBUG


# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "game (+http://www.yourdomain.com)" # 用户代理

# Obey robots.txt rules
ROBOTSTXT_OBEY = True # 是否遵守robots协议

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32 # 并发请求数

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3  # 下载延迟
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 同一个域名的并发请求数
#CONCURRENT_REQUESTS_PER_IP = 16 # 同一个IP的并发请求数

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False # 是否开启cookie

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False # 是否开启telnet控制台

# Override the default request headers: # 请求头
#DEFAULT_REQUEST_HEADERS = { # 请求头
#    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", # 接受的数据类型
#    "Accept-Language": "en", # 接受的语言
#}

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = { # 爬虫中间件
#    "game.middlewares.GameSpiderMiddleware": 543, # 默认开启
#}

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = { # 下载中间件
#    "game.middlewares.GameDownloaderMiddleware": 543, # 默认开启
#}

# Enable or disable extensions # 扩展文件
# See https://docs.scrapy.org/en/latest/topics/extensions.html # 扩展文件
#EXTENSIONS = { # 扩展文件
#    "scrapy.extensions.telnet.TelnetConsole": None, # 默认开启
#}

# Configure item pipelines # 管道文件
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html # 管道文件


ITEM_PIPELINES = { # 管道文件
    # key 是管道的优先级 0-1000 之间 数字越小 优先级越高
    # 值是管道的路径
   "game.pipelines.GamePipeline": 300,
   "game.pipelines.NewPipeline": 299,
}

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True # 自动限速
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5 # 初始下载延迟
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60 # 在高延迟的情况下,设置的最大下载延迟
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # 平均每秒并发请求数
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False # 是否开启自动限速的debug模式

# Enable and configure HTTP caching (disabled by default) # 是否开启缓存
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True # 是否开启缓存
#HTTPCACHE_EXPIRATION_SECS = 0 # 缓存过期时间
#HTTPCACHE_DIR = "httpcache"  # 缓存目录
#HTTPCACHE_IGNORE_HTTP_CODES = [] # 忽略的HTTP状态码
#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"

# Set settings whose default value is deprecated to a future-proof value
REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7" # default: 'scrapy.utils.request_fingerprint.request_fingerprint'
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor" # default: 'twisted.internet.selectreactor.SelectReactor'
FEED_EXPORT_ENCODING = "utf-8" # default: 'utf-8'

结语 🌟

Scrapy框架的学习曲线相对平缓,对于初学者来

说,通过实践中不断地尝试和错误,可以快速上手并掌握。而对于经验丰富的开发者来说,Scrapy的高度可定制性和强大的功能,能够帮助他们构建复杂的爬虫项目。

希望这篇文章能帮助你入门Scrapy,开启你的爬虫之旅!如果你觉得本文有用,请不吝点赞和分享。有任何问题或想法,欢迎在评论区留言交流。🌈💬

免责声明 ⚠️

本文提供的信息和代码示例仅供学习和研究目的使用。使用Scrapy框架进行网页爬取时,请始终遵守目标网站的robots.txt文件规则,尊重网站版权和数据使用政策。未经网站明确允许,不得使用爬虫收集数据进行任何形式的商业利用或违法活动。

作者不对因使用本文内容而导致的任何直接或间接后果负责。使用者应自行承担使用本文提供的代码和技术时的风险。在执行任何网络爬取任务之前,建议详细了解相关法律法规,以免触犯法律。


希望这篇文章和免责声明能够帮助你更好地理解和使用Scrapy框架,同时也提醒大家在使用技术时要有法律意识,确保自己的行为合法合规。祝你在爬虫的世界中探索愉快!🚀🌟

  • 30
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Scrapy是一个基于Python的开源网络爬虫框架,它可以快速高效地从网站上提取结构化数据Scrapy框架拥有强大的数据提取、数据处理和数据存储功能,支持异步网络请求和分布式爬取。如果你想了解如何使用Scrapy框架进行网络爬取,可以按照以下步骤进行。 1. 安装Scrapy 使用pip命令安装Scrapy: ``` pip install scrapy ``` 2. 创建一个Scrapy项目 在命令行中使用以下命令创建一个新的Scrapy项目: ``` scrapy startproject projectname ``` 其中projectname是你的项目名称。 3. 定义爬虫 在Scrapy项目中,你需要定义一个或多个爬虫来指定你要爬取的网站、如何进行爬取以及如何处理爬取到的数据。在Scrapy中,爬虫是一个Python类,需要继承自Scrapy中的Spider类,并重写一些方法来实现爬虫的逻辑。 以下是一个简单的爬取百度首页的爬虫代码: ```python import scrapy class BaiduSpider(scrapy.Spider): name = 'baidu' start_urls = ['https://www.baidu.com'] def parse(self, response): title = response.xpath('//title/text()').extract_first() print(title) ``` 在上面的代码中,BaiduSpider类继承自Spider类,定义了爬虫的名称为baidu,开始爬取的URL为https://www.baidu.com。在parse方法中,使用XPath表达式提取了百度首页的title标签内容,并打印输出。 4. 运行爬虫 在命令行中使用以下命令运行爬虫: ``` scrapy crawl baidu ``` 其中baidu是爬虫的名称。 5. 数据处理和存储 在爬虫中,你可以使用Scrapy提供的Item类来定义你要爬取的数据结构,并使用Pipeline类来对爬取到的数据进行处理和存储。以下是一个简单的Pipeline类的代码: ```python class BaiduPipeline(object): def process_item(self, item, spider): title = item['title'] with open('baidu.txt', 'a', encoding='utf-8') as f: f.write(title + '\n') return item ``` 在上面的代码中,BaiduPipeline类实现了process_item方法,该方法用于处理爬取到的数据。在这个例子中,我们将爬取到的title内容写入到一个文本文件中。 6. 配置文件 在Scrapy项目中,你可以通过修改settings.py文件中的配置来控制爬虫的行为。例如,可以设置爬虫的下载延迟、请求头、是否遵守Robots协议等。 以上就是Scrapy框架入门的基本步骤。如果你想深入了解Scrapy框架的更多功能和用法,可以参考Scrapy官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值