python Scrapy 框架 demo

news2024/9/30 9:17: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

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

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

import scrapy


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

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

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 文件可以用来处理抓取到的数据(例如,保存到数据库或文件):

class BaiduHotsPipeline:


    def process_item(self, item, spider):
        print(f"【{item['rank']}{item['title']}")
        return item
2.5. 修改 settings.py
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.coloradmin.cn/o/2179253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python+requests接口测试

pythonrequest 一、调用的方法 requests是一个第三方库 &#xff08;1&#xff09; a、下载地方库pip install requests b、pycaharm中下载 &#xff08;2&#xff09;导入requests库 &#xff08;3&#xff09;requests中的三种调用方法 第一种&#xff1a; requests.…

算法训练营打卡Day18

目录 二叉搜索树的最小绝对差二叉搜索树中的众数二叉树的最近公共祖先额外练手题目 题目1、二叉搜索树的最小绝对差 力扣题目链接(opens new window) 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差的绝对值的最小值。 示例&#xff1a; 思…

时间复杂度及空间复杂度(简略)

目录 时间复杂度空间复杂度 时间复杂度 计算时间复杂度时&#xff0c;我们只需计算大致执行次数&#xff0c;再用大O的渐进表示法就可以了 常见的复杂度为O(N),O(1),O(N^2)的几个情况这里就不提了&#xff0c;下面是几个相对来说需要分析的算法 算法1&#xff1a; // 计算str…

【Python报错已解决】TypeError: ‘int‘ object is not subscriptable

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

如何在实际开发中深入使用 yalantinglibs 编译期反射库

yaLanTingLibs 是阿里云开源的现代 C 基础工具库的集合&#xff0c;包括序列化、http、rpc、协程、编译期反射、metric 和日志等库&#xff0c;可以帮助 C 开发者快速构建高性能的 C 应用。2024 云栖大会操作系统技术 Workshop 上&#xff0c;阿里云智能集团高级技术专家、pure…

快手:数据库升级实践,实现PB级数据的高效管理|OceanBase案例

本文作者&#xff1a;胡玉龙&#xff0c;快手技术专家 快手在较初期采用了OceanBase 3.1版本成功替换了多个核心业务、数百套的MySQL集群。至2023年&#xff0c;快手的数据量已突破800TB大关&#xff0c;其中最大集群的数据量更是达到了数百TB级别。为此&#xff0c;快手将数据…

Docker安装consul + go使用consul + consul知识

1. 什么是服务注册和发现 假如这个产品已经在线上运行&#xff0c;有一天运营想搞一场促销活动&#xff0c;那么我们相对应的【用户服务】可能就要新开启三个微服务实例来支撑这场促销活动。而与此同时&#xff0c;作为苦逼程序员的你就只有手动去 API gateway 中添加新增的这…

基于AI的智能化渗透测试技术研究

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…

问题:vscode 打印中文时终端输出乱码

文章目录 问题分析解决 问题 在 vscode 编辑器中的终端运行出来的中文是乱码 分析 乱码原因&#xff1a;因windows中文版系统cmd编码默认为GBK&#xff0c;而vscode默认新建文件的编码为UTF-8所以会出现中文乱码情况 解决 终端下输入 chcp 查看当前的cmd编码设置。如图&…

在windows下编译 chromium 的问题汇总(103.0.5060.68 之四)

其实&#xff0c;按照chromium 官方文档来看&#xff0c;大概率是不会出错的&#xff0c;但由于各自的系统差异化&#xff0c;当中遇到的坑也是各不相同。 尤其是在国内的网络情况下&#xff0c;出错是再所难免的&#xff0c;关于这一点&#xff0c;chromium官方文档是没有提及…

哈希-01-数据分类处理

文章目录 1. 题目描述2. 思路3. 代码 1. 题目描述 信息社会&#xff0c;有海量的数据需要分析处理&#xff0c;比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。 采集输入大数据和分类规则&#xff0c;通过大数据分类处理程序&#xff0c;将大数据…

基于SSM+Vue+MySQL的在线视频学习系统

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网的飞速发展&#xff0c;在线视频学习已成为人们获取知识、提升技能的重要途径。然而&#xff0c;传统的视频学习平台往往存在内容管理不便、用户体验不佳等问题。因此&#xff0c;开发一款基于SSM&#xff08;SpringS…

12、echarts 没有显示折线图

一、问题描述 echarts 没有显示折线图&#xff0c;但是&#xff0c;有数据显示&#xff1a; 看图表展示&#xff0c;y轴数据全部没有显示&#xff0c;直接可以判定是数据结构出问题了。 检查 series.data[] 数据结构&#xff1a; dataList [{"dateStr":"202…

06.C/C++内存管理

在这里C的内存管理相较于C作出了许多升级&#xff0c;下面我们就来了解一下。 1.C/C内存分布 我们先来看一下下面的问题&#xff0c;温习一下C的内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1…

Web安全 - 跨站点请求伪造CSRF(Cross Site Request Forgery)

文章目录 OWASP 2023 TOP 10CSRF 导图CSRF的基本概念CSRF的工作原理常见CSRF攻击模式CSRF防御策略补充建议应用场景实战防御策略选择1. CSRF Token&#xff08;首选&#xff09;2. SameSite Cookie属性3. 验证Referer和Origin4. 多因素认证 实现方案CSRF Token实现SameSite Coo…

JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)

目录 Dialog对话框 介绍 使用 实际效果 Form表单 介绍 使用 实际效果 Dialog对话框 介绍 Dialog对话框&#xff1a;在保留当前页面状态的情况下&#xff0c;告知用户并承载相关操作。 Dialog 对话框组件可以在保留当前页面信息的状态下弹出一个对话框&#xff0c;并…

初始MYSQL数据库(8)—— JDBC编程

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; MYSQL 目录 JDBC的概念 JDBC的使用 加载驱动包 建立连接 创建 statement 对象 定义并执行SQL语句 处理结果集 关闭资源 SQL注入 …

taobao.item_get_appAPI接口原app数据测试指南

在电商竞争日益激烈的当下&#xff0c;数据成为了商家们争夺市场的重要武器。淘宝&#xff0c;作为中国最大的在线零售平台&#xff0c;其庞大的商品库和用户群体为商家提供了巨大的商机。为了帮助商家更好地了解市场动态&#xff0c;优化库存和营销策略&#xff0c;淘宝推出了…

详细分析CollUtil的基本知识(附Demo)

目录 前言1. 集合交并差2. CRUD3. 常用 前言 java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; CollUtil 是一个工具类&#xff0c;通常用于集合的操作&#xff0c;提供…

用友U8+CRM leadconversion.php SQL注入复现

0x01 产品描述&#xff1a; 用友U8-CRM是企业利用信息技术&#xff0c;是一项商业策略&#xff0c;它通过依据市场细分组织企业资源、培养以客户为中心的经营行为、执行以客户为中心的业务流程等手段来优化企业的客户满意度和获利能力。 0x02 漏洞描述&#xff1a; 用友 U8 CR…