python Scrapy 框架 demo

news/2024/9/30 0:18:30 标签: python, scrapy, 开发语言

文章目录

  • 前言
    • python Scrapy 框架 demo
      • 1. 安装
      • 2. 百度热搜爬取demo
        • 2.1. 初始化项目
        • 2.2. 修改 items.pyitems.py
        • 2.3. 创建 spiders/baidu_spider.py
        • 2.4. 修改 pipelines.py
        • 2.5. 修改 settings.py
      • 3. settings.py 相关配置说明
      • 4. 启动爬虫测试

前言

  如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
  而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!


python_Scrapy__demo_6">python Scrapy 框架 demo

1. 安装

安装 Scrapy
首先,确保你已经安装了 Scrapy,可以使用 pip 进行安装:

pip install scrapy

在这里插入图片描述
验证 Scrapy 是否安装成功
成功安装 Scrapy 后,运行以下命令验证:

scrapy version

在这里插入图片描述

2. 百度热搜爬取demo

2.1. 初始化项目

首先,启动一个 Scrapy 项目:
scrapy startproject baidu_hots
在这里插入图片描述
初始后的项目结构:
在这里插入图片描述
结构说明:

baidu_hots/                  ----外层目录
    ├── baidu_hots/          ----Scrapy框架的用户自定义python代码
    │   ├── __init__.py
    │   ├── items.py         ----Items代码模板(继承类)
    |   ├── middlewares.py   ----Middlewares代码模板(继承类)(扩展功能)
    │   ├── pipelines.py     ----代码模版(继承类)
    │   ├── settings.py      ----scrapy爬虫的配置文件
    │   └── spiders/         ----代码模板(继承类)
    │       ├── __init__.py
    ├── scrapy.cfg           ----部署scrapy爬虫的配置文件

2.2. 修改 items.pyitems.py

用于定义我们将爬取的数据结构:

python">import scrapy


"""
用于定义我们将爬取的数据结构:
"""
class BaiduHotsItem(scrapy.Item):
    rank = scrapy.Field()
    title = scrapy.Field()
2.3. 创建 spiders/baidu_spider.py

在 spiders/ 目录下创建一个爬虫文件 baidu_spider.py

python">import scrapy
from baidu_hots.items import BaiduHotsItem
import pdb  # 导入调试库


from scrapy.spidermiddlewares.httperror import HttpError




class BaiduSpider(scrapy.Spider):
    name = 'baidu_hots'
    allowed_domains = ['top.baidu.com']
    start_urls = ['https://top.baidu.com/board?platform=pc&sa=pcindex_entry']


    def parse(self, response):
        hot_search_items = response.css('div.active-item_1Em2h')
        for item in hot_search_items:
            rank = item.css('div.sign-index_mtI7K::text').get()
            title = item.css('div.c-single-text-ellipsis::text').get()
            # pdb.set_trace()  # 设置断点
            if rank is None or rank.strip() == "":
                continue
            if rank and title:
                baidu_item = BaiduHotsItem()
                baidu_item['rank'] = rank.strip()
                baidu_item['title'] = title.strip()


                yield baidu_item


    def errback_httpbin(self, failure):
        # 错误时进入此处
        self.logger.error(repr(failure))


        # 可以通过 failure 检查异常类型
        if failure.check(HttpError):
            response = failure.value.response
            self.logger.error(f'HttpError on {response.url}')
2.4. 修改 pipelines.py

pipelines.py 文件可以用来处理抓取到的数据(例如,保存到数据库或文件):

python">class BaiduHotsPipeline:


    def process_item(self, item, spider):
        print(f"【{item['rank']}{item['title']}")
        return item
2.5. 修改 settings.py
python">BOT_NAME = "baidu_hots"
SPIDER_MODULES = ["baidu_hots.spiders"]
NEWSPIDER_MODULE = "baidu_hots.spiders"
ROBOTSTXT_OBEY = True

ITEM_PIPELINES = {
    "baidu_hots.pipelines.BaiduHotsPipeline": 300,
}

REQUEST_FINGERPRINTER_IMPLEMENTATION = "2.7"
TWISTED_REACTOR = "twisted.internet.asyncioreactor.AsyncioSelectorReactor"
FEED_EXPORT_ENCODING = "utf-8"
LOG_ENABLED = True
LOG_LEVEL = 'INFO'  # 可以改为 DEBUG 来查看详细的调试信息
LOG_FILE = 'scrapy_log.txt'

3. settings.py 相关配置说明

项目和模块相关配置
BOT_NAME = “baidu_hots”: 定义你的 Scrapy 项目的名称。在 Scrapy 中,项目名通常被用于标识爬虫和某些自动生成的路径。
SPIDER_MODULES = [“baidu_hots.spiders”]: 告诉 Scrapy 爬虫(spider)模块存放的路径,通常会在项目的 spiders 文件夹中。
NEWSPIDER_MODULE = “baidu_hots.spiders”: 创建新的爬虫时,Scrapy 会自动将爬虫生成在这个模块下。

请求和响应相关配置

ROBOTSTXT_OBEY = True: 是否遵守 robots.txt 文件。robots.txt 是网站管理员用于指示爬虫哪些内容是允许爬取的,设置为 True 则遵守这些规则。

CONCURRENT_REQUESTS = 16: 同时处理的最大请求数量,默认值是 16。如果需要更多并发请求,可以调高此值。

DOWNLOAD_DELAY = 3: 设置每个请求之间的延迟(以秒为单位),避免对目标站点造成压力。默认没有延迟,可以根据需要调整。

CONCURRENT_REQUESTS_PER_DOMAIN = 16 和 CONCURRENT_REQUESTS_PER_IP = 16: 分别指定对每个域名或每个 IP 的最大并发请求数。如果需要爬取大量内容,可以增加这个值。

Cookies 和调试相关配置

COOKIES_ENABLED = False: 是否启用 Cookies。默认是启用的。如果不需要 Cookies,可以设置为 False 以禁用。

TELNETCONSOLE_ENABLED = False: 是否启用 Telnet 控制台。默认是启用的,但大多数项目中不需要这个功能,设置为 False 关闭。

请求头相关配置

DEFAULT_REQUEST_HEADERS: 设置默认的请求头,这里通常会设置 User-Agent 和 Accept-Language。这个配置项被注释掉了,说明它使用默认请求头。如果需要自定义,可以启用并设置。

爬虫和下载中间件配置

SPIDER_MIDDLEWARES 和 DOWNLOADER_MIDDLEWARES: 用于启用或禁用特定的爬虫或下载中间件。中间件是拦截和处理请求与响应的特殊组件。你可以通过修改这些项来添加、删除或修改中间件。

Item 管道相关配置

ITEM_PIPELINES = {“baidu_hots.pipelines.BaiduHotsPipeline”: 300}: 用于配置 Item 管道。这里启用了 BaiduHotsPipeline 管道,并且优先级为 300。Scrapy 中多个管道可以有不同的优先级,数值越低优先级越高。

自动限速(AutoThrottle)配置

AUTOTHROTTLE_ENABLED = True: 是否启用自动限速功能。这个功能可以自动根据服务器的响应速度调整爬取速度,避免对服务器造成过大压力。

AUTOTHROTTLE_START_DELAY = 5: 初始的下载延迟时间。开启 AutoThrottle 后,Scrapy 会在每次请求间隔时动态调整这个值。

AUTOTHROTTLE_MAX_DELAY = 60: 最大下载延迟时间。如果服务器响应非常慢,延迟可以增加到这个值。

AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0: 设置 Scrapy 试图在目标服务器上保持的并发请求数。

HTTP 缓存相关配置

HTTPCACHE_ENABLED = True: 是否启用 HTTP 缓存。启用后,Scrapy 会缓存请求的响应数据,以便在多次运行时重用,减少对目标服务器的请求。

HTTPCACHE_EXPIRATION_SECS = 0: 缓存的过期时间,以秒为单位。0 表示不会过期。

HTTPCACHE_DIR = “httpcache”: 缓存存放的目录。

HTTPCACHE_IGNORE_HTTP_CODES = []: 指定哪些 HTTP 响应代码不应该被缓存,比如你可以忽略 404 错误。

HTTPCACHE_STORAGE = “scrapy.extensions.httpcache.FilesystemCacheStorage”: 指定缓存存储的方式。这里使用的是文件系统缓存。

日志相关配置

LOG_ENABLED = True: 是否启用日志。设置为 True 启用日志输出。

LOG_LEVEL = ‘INFO’: 日志级别。可以设置为 DEBUG、INFO、WARNING、ERROR、CRITICAL。你目前设置为 INFO,如果需要更多调试信息,可以设置为 DEBUG。

LOG_FILE = ‘scrapy_log.txt’: 指定日志文件的路径。如果不指定,日志会输出到控制台。这里将日志输出到 scrapy_log.txt 文件。

其他配置

REQUEST_FINGERPRINTER_IMPLEMENTATION = “2.7”: 使用最新的请求指纹算法(自 Scrapy 2.7 开始提供)。这个算法用于为每个请求生成唯一的指纹以避免重复爬取。

TWISTED_REACTOR = “twisted.internet.asyncioreactor.AsyncioSelectorReactor”: 使用 AsyncioSelectorReactor 作为 Scrapy 的事件循环机制,提供异步支持。

FEED_EXPORT_ENCODING = “utf-8”: 输出的文件编码设置为 utf-8。

4. 启动爬虫测试

scrapy crawl <spider_name>

其中<spider_name> 是你在爬虫文件中定义的爬虫名称,通常在爬虫类中通过 name 属性指定。

在这里插入图片描述


http://www.niftyadmin.cn/n/5683951.html

相关文章

优青博导团队/免费指导/数据分析//论文润色/组学技术服务 、表观组分析、互作组分析、遗传转化实验、生物医学

&#x1f31f; 教授团队领衔&#xff0c;全方位科研服务 &#x1f680; 一站式科研解决方案 &#x1f4c8; 加速科研进程&#xff0c;让成果不再等待 &#x1f4dd; 专业分析 定制服务 科研成功 &#x1f468;‍&#x1f52c; 立即行动&#xff0c;让科研成果跃然纸上 业务领…

《艾迪芬奇的记忆》风灵月影修改器使用指南:深探家族秘史的另类途径

沉浸在《艾迪芬奇的记忆》那扣人心弦的故事同时&#xff0c;若想以不同视角重新体验这段非凡旅程。 那么&#xff0c;风灵月影修改器或许能提供独特的方式&#xff1a; 1.获取并安装修改器&#xff1a; 请从官方认可的平台下载风灵月影修改器&#xff0c;正确安装后启动。 风…

数据结构双链表和循环链表

目录 一、循环链表二、双向链表三、循环双向链表 一、循环链表 循环链表就是首尾相接的的链表&#xff0c;就是尾节点的指针域指向头节点使整个链表形成一个循环&#xff0c;这就弥补了以前单链表无法在后面某个节点找到前面的节点&#xff0c;可以从任意一个节点找到目标节点…

算法题题解:分隔链表

Problem: 86. 分隔链表 题目描述&#xff1a; 给定一个链表和一个值 x&#xff0c;要求将链表重新排列&#xff0c;所有小于 x 的节点放在前面&#xff0c;所有大于或等于 x 的节点放在后面。要求保留节点的相对顺序。 解题思路&#xff1a; 因为是链表而不是数组&#xff0c…

企业级移动应用管理平台哪个好?

在当今数字化转型的浪潮中&#xff0c;企业级移动应用管理平台&#xff08;Enterprise Mobile Application Management, EMAM&#xff09;已成为许多企业提升运营效率、加强团队协作与提高工作灵活性的关键工具。这类平台帮助企业安全、有效地管理和部署移动应用程序&#xff0…

C#基于SkiaSharp实现印章管理(10)

向PDF文件插入印章图片比之前实现的向图片文件插入印章麻烦得多。   最初的想法是使用PDF浏览控件在线打开PDF文件&#xff0c;然后在控件中实现鼠标移动时动态显示印章&#xff0c;点击鼠标时向当前PDF页面的鼠标点击位置插入图片。由于是.net 8的Winform项目&#xff0c;选…

分布式数据库——HBase基本操作

启动HBase: 1.启动hadoop,进入hadoop的sbin中 cd /opt/hadoop/sbin/ 2.初始化namenode hdfs namenode -format 3.启动hdfs ./start-all.sh 4.启动hbase cd /opt/hbase/bin ./start-hbase.sh 5.使用jps查看进程 jps 以下图片则是hbase启动成功~ 运行HBase ./hbase sh…

“卷”智能, 从高质量算力开始

算力即国力&#xff0c;这已是产业共识。 当人工智能浪潮席卷全球之际&#xff0c;大家深刻感受到发展算力产业的重要性和紧迫性&#xff0c;高质量的人工智能算力已经与国家竞争、产业升级和企业转型息息相关。 去年&#xff0c;《算力基础设施高质量发展行动计划》的颁布&a…