python Scrapy 框架 demo

devtools/2024/10/18 2:24:47/

文章目录

  • 前言
    • 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 HttpErrorclass 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() == "":continueif rank and title:baidu_item = BaiduHotsItem()baidu_item['rank'] = rank.strip()baidu_item['title'] = title.strip()yield baidu_itemdef errback_httpbin(self, failure):# 错误时进入此处self.logger.error(repr(failure))# 可以通过 failure 检查异常类型if failure.check(HttpError):response = failure.value.responseself.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 = TrueITEM_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.ppmy.cn/devtools/121181.html

相关文章

Linux 命令基础

基础命令 通用格式 home目录 在根目录下面 &#xff0c;家目录&#xff0c;Linux中会有多个用户使用&#xff0c;/home ls命令 直接输入ls 平铺显示当前工作目录下的内容 选项可以组合使用 -a all的意思&#xff0c;表示全部文件&#xff08;包括隐藏…

鸿蒙开发选择表情

鸿蒙开发选择表情 动态评论和聊天信息都需要用到表情&#xff0c;鸿蒙是没有提供的&#xff0c;得自己做 一、思路&#xff1a; 用表情字符显示表情&#xff0c;类似0x1F600代表笑脸 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 Colum…

Java定时器的使用与实际应用场景

Java定时器的使用与实际应用场景 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java中&#xff0c;java.util.Timer类和java.util.concurrent.ScheduledExecutorService接口提供了定时执行任…

Python 中的 os 模块

Python 中的 os 模块 在Python中&#xff0c;os 模块是一个内置的标准库&#xff0c;提供了许多与操作系统交互的功能。它允许你执行一系列操作&#xff0c;如文件和目录操作、环境变量管理等。要在Python脚本中使用os模块&#xff0c;你需要首先导入它。 一些常见的用法&…

(五)LAMP 平台部署和应用全指南

一、LAMP 平台 LAMP 平台作用和优势 作用:LAMP 平台是一个动态网站平台,为网站的开发和运行提供了强大的支持。优势: 开源免费,降低了开发和运营成本。配置灵活简单,方便开发者根据自己的需求进行定制。运行环境支持定制功能,满足不同网站的特殊需求。可靠稳定,保证了网…

C# 字符与字符串

本课要点&#xff1a; 1、字符类Char的使用 2、字符串类String的使用 3、可变字符串****StringBuilder 4、常见错误 一 何时用到字符与字符串 问题&#xff1a; 输出C#**课考试最高分&#xff1a;**98.5 输出最高分学生姓名&#xff1a;张三 输出最高分学生性别&#x…

java基础 day1

学习视频链接 人机交互的小故事 微软和乔布斯借鉴了施乐实现了如今的图形化界面 图形化界面对于用户来说&#xff0c;操作更加容易上手&#xff0c;但是也存在一些问题。使用图形化界面需要加载许多图片&#xff0c;所以消耗内存&#xff1b;此外运行的速度没有命令行快 Wi…

MetaJUI v0.4 遇到的一些问题及解决办法记录

1、Unity3d 版本 2022.3.29f1。 2、MetaJUI v0.4 的下载&#xff0c;https://download.csdn.net/download/xingchengaiwei/89334848 3、将MetaJUI v0.4解压&#xff0c;用Unity3d 打开项目&#xff0c;会出现如下问题&#xff0c;按照图中提示操作即可。 4、打开工程后会出现…