当前位置: 首页 > news >正文

Scrapy入门教程

Scrapy入门教程:打造高效爬虫的第一步

1. 引言

在当今的网络世界中,信息是无价的资源。而爬虫工具则是获取这些资源的有力武器。Scrapy 是 Python 生态系统中最强大的爬虫框架之一,它不仅功能强大,而且易于扩展,适用于各种复杂的爬虫任务。本文将带你从零开始,了解和使用 Scrapy,逐步构建属于你自己的高效爬虫。

2. 什么是Scrapy?

Scrapy 是一个用于提取网站数据的开源和协作的 Python 爬虫框架。它设计用于高效且简单地提取所需的数据,并支持大规模的数据抓取。Scrapy 的设计目标包括简化代码复用、使开发者能专注于编写爬取逻辑而非繁琐的请求管理或响应处理。

3. 安装Scrapy

在开始使用 Scrapy 之前,你需要确保你的系统已经安装了 Python。推荐使用 Python 3.7 及以上版本。

你可以通过以下命令来安装 Scrapy:

pip install scrapy

安装完成后,可以通过以下命令确认 Scrapy 是否安装成功:

scrapy

如果看到 Scrapy 的帮助文档输出,说明安装成功。

4. 创建第一个Scrapy项目

首先,在你的工作目录下创建一个新的 Scrapy 项目:

scrapy startproject myproject

这将会在当前目录下创建一个名为 myproject 的文件夹,并生成 Scrapy 项目的基本结构。

项目结构如下:

myproject/scrapy.cfgmyproject/__init__.pyitems.pymiddlewares.pypipelines.pysettings.pyspiders/__init__.py

每个文件和文件夹都有特定的作用:

  • scrapy.cfg:项目的配置文件。
  • items.py:定义爬取的数据结构。
  • middlewares.py:用于定义和处理请求或响应的中间件。
  • pipelines.py:用于定义数据处理流程,如保存到数据库。
  • settings.py:全局配置文件,如设置并发数、请求头等。
  • spiders/:存放所有的爬虫代码。
5. 编写第一个爬虫

接下来,我们将创建一个简单的爬虫,用于爬取网站的数据。假设我们要抓取一个名为 quotes.toscrape.com 的网站上的名人名言。

spiders/ 目录下创建一个名为 quotes_spider.py 的文件,并输入以下内容:

import scrapyclass QuotesSpider(scrapy.Spider):name = "quotes"start_urls = ['http://quotes.toscrape.com/page/1/',]def parse(self, response):for quote in response.css('div.quote'):yield {'text': quote.css('span.text::text').get(),'author': quote.css('span small::text').get(),'tags': quote.css('div.tags a.tag::text').getall(),}next_page = response.css('li.next a::attr(href)').get()if next_page is not None:yield response.follow(next_page, self.parse)
6. 运行爬虫

编写完爬虫后,可以通过以下命令来运行它:

scrapy crawl quotes

这个爬虫将会抓取每一页的名言,并输出到终端中。

7. 提取和处理数据

Scrapy 提供了多种方法来提取网页数据,常用的有 CSS 选择器和 XPath。你可以根据你的需求选择适合的方法。例如,在上述代码中,我们使用了 CSS 选择器提取名言的文本、作者和标签。

8. 数据存储

Scrapy 支持将数据存储为 JSON、CSV 等格式,只需在运行爬虫时指定输出文件即可。例如:

scrapy crawl quotes -o quotes.json

这将会将爬取的数据保存到 quotes.json 文件中。

9. 处理多页面抓取

在实际项目中,通常需要处理多个页面的数据抓取。Scrapy 的 response.follow 方法可以帮助你在不同页面之间导航,并递归地抓取数据。

在上面的示例中,我们使用了 response.follow 方法递归抓取每一页的数据,直到没有下一页为止。

10. 使用 Scrapy Shell 进行调试

Scrapy 提供了一个强大的交互式命令行工具——Scrapy Shell,可以方便地调试和测试你的爬虫。你可以使用以下命令进入 Scrapy Shell:

scrapy shell 'http://quotes.toscrape.com/page/1/'

在 Scrapy Shell 中,你可以使用 CSS 选择器或 XPath 直接提取网页数据,方便调试爬虫代码。

11. 处理请求和响应

Scrapy 提供了强大的中间件机制,你可以通过自定义中间件来处理请求和响应。中间件可以用来处理诸如随机用户代理、请求重试等操作。

12. 使用 Pipelines 处理数据

Scrapy 的 Pipelines 用于对抓取到的数据进行进一步的处理或保存到数据库中。在 pipelines.py 中定义的 pipeline 类将会自动调用并处理每一条数据。

例如,你可以将数据保存到 MongoDB 中:

import pymongoclass MongoPipeline:def open_spider(self, spider):self.client = pymongo.MongoClient("mongodb://localhost:27017/")self.db = self.client["quotes_db"]def close_spider(self, spider):self.client.close()def process_item(self, item, spider):self.db["quotes"].insert_one(dict(item))return item
13. 调整爬虫设置

Scrapy 提供了丰富的配置选项,可以通过 settings.py 文件进行调整。例如,你可以设置下载延迟、并发请求数、用户代理等。

# 设置下载延迟为2秒
DOWNLOAD_DELAY = 2# 设置用户代理
USER_AGENT = 'my-scrapy-bot (+http://mywebsite.com)'
14. 总结

通过本文,你已经了解了 Scrapy 的基础知识,并且成功创建了一个简单的爬虫。Scrapy 是一个非常灵活且功能强大的工具,适用于从简单到复杂的各种爬虫任务。随着你对 Scrapy 的进一步学习,你将会发掘更多的高级特性,例如分布式爬虫、异步处理、自定义中间件等。

接下来,你可以尝试使用 Scrapy 爬取自己感兴趣的网站,并将数据存储到数据库或文件中。不断练习和探索,Scrapy 将成为你在数据采集领域的强大工具。

相关文章:

Scrapy入门教程

Scrapy入门教程:打造高效爬虫的第一步 1. 引言 在当今的网络世界中,信息是无价的资源。而爬虫工具则是获取这些资源的有力武器。Scrapy 是 Python 生态系统中最强大的爬虫框架之一,它不仅功能强大,而且易于扩展,适用…...

Microsoft VBA Excel VBA学习笔记——双重筛选+复制数值1.0

问题场景 CountryProductCLASS 1CLASS 2CLASS 3CLASS 4CLASS 5CLASS 6…USApple0.3641416030.8918210610.0591451990.7320110290.0509636560.222464259…USBanana0.2300833330.4027262180.1548836670.2988904860.7802326210.028592635…CNApple0.7762370470.5075548320.481978…...

谷歌反垄断官司败诉后,或又面临被拆分风险?

KlipC报道:上周8月5日,美国法院裁定谷歌的搜索业务违反了美国反垄断法,非法垄断在线搜索和搜索文本广告市场。据悉,胜诉的美国司法部正在考虑拆分谷歌。其他选项包括强制谷歌与竞争对手分享更多数据,以及防止其在人工智…...

数据结构入门——06树

1.树 树(Tree)非线性数据结构,它是n(n≥0)个节点的有限集合,它满足两个条件 : 有且仅有一个特定的称为根(Root)的节点; 其余的节点可以分为m(m…...

FFmpeg源码:av_packet_move_ref、av_packet_make_refcounted函数分析

一、av_packet_move_ref函数 (一)av_packet_move_ref函数的声明 av_packet_move_ref函数声明在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavcodec/packet.h中: /*** Move every field in src to ds…...

12 中断

12 中断 1、内核中断编程2、顶半部和底半部机制2.1 任务的相关概念2.1.1 分类2.1.2 优先级2.1.3 进程调度2.1.4 休眠sleep 2.2 顶半部和底半部实现机制2.2.1 顶半部特点2.2.2 底半部特点2.2.3 底半部实现方法之:tasklet2.2.4 底半部实现机制之工作队列2.2.5 底半部实现机制之软…...

经典算法题总结:十大排序算法,外部排序和Google排序简介

十大排序算法 就地性:顾名思义,原地排序通过在原数组上直接操作实现排序,无须借助额外的辅助数组,从而节省内存。通常情况下,原地排序的数据搬运操作较少,运行速度也更快。 稳定性:稳定排序在完…...

服务器是什么?怎么选择适合自己的服务器?

在这个数字化的世界中,我们每天都在与各种网站打交道,浏览新闻、购物、看视频等。你是否曾经好奇过,这些网站是如何运行的?它们又是如何实现随时随地可访问的呢? 在这背后,有一个神秘的角色在默默地支撑着…...

区块链技术的应用场景

区块链技术是一种分布式数据库或公共分类账的形式,它保证了数据的完整性和透明性。它最初是为了支持比特币这种加密货币而被发明的,但现在已经被广泛应用于多种领域,包括供应链管理、投票系统、数字身份验证等。 基本概念 区块 (Block) 区块…...

凤凰端子音频矩阵应用领域

凤凰端子音频矩阵,作为一种集成了凤凰端子接口的音频矩阵设备,具有广泛的应用领域。以下是其主要应用领域: 一、专业音响系统 会议系统:在会议室中,凤凰端子音频矩阵能够处理多个话筒和音频源的信号,实现…...

LeetCode-字母异位词分组

题目描述 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "na…...

《Linux运维总结:基于x86_64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:《Linux运维篇:Linux系统运维指南》 一、部署背景 由于业务系统的特殊性,我们需要面对不同的客户部署业务系统&#xff0…...

WPF动画

补间动画:动画本质就是在一个时间段内对象尺寸、位移、旋转角度、缩放、颜色、透明度等属性值的连续变化。也包括图形变形的属性。时间、变化的对象、变化的值 工业应用场景:蚂蚁线、旋转、高度变化、指针偏移、小车 WPF动画与分类 特定对象处理动画过…...

大数据系列之:统计hive表的详细信息,生成csv统计表

大数据系列之:统计hive表的详细信息,生成csv统计表 一、获取源数据库、源数据库类型、hive数据库名称二、获取hive数据库名、hive表名、数仓层级、空间、维护者信息三、统计hive表信息四、统计源库信息五、合并hive表信息六、生成csv统计表七、完整代码一、获取源数据库、源数…...

flutter 画转盘

import package:flutter/material.dart; import dart:math;const double spacingAngle 45.0; // 每两个文字之间的角度 // 自定义绘制器,ArcTextPainter 用于在圆弧上绘制文字 class ArcTextPainter extends CustomPainter {final double rotationAngle; // 动画旋…...

图像识别,图片线条检测

import cv2 import numpy as np # 读取图片 img cv2.imread(1.png)# 灰度化 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 边缘检测 edges cv2.Canny(gray, 100, 200) 当某个像素点的梯度强度低于 threshold1 时,该像素点被认为是非边缘;当梯度强度…...

python crawler web page

npm install or pip install 插件 import json import time from openpyxl import load_workbook from pip._vendor import requests from bs4 import BeautifulSoup import pandas as pd import re import xlsxwriter 設置request header header {user-agent: Mozilla/5.0…...

基于QT实现的TCP连接的网络通信(客户端)

上篇介绍了QT实现网络通信的服务器端,还没看服务器的朋友们先去上篇了解,这篇我来实现一下客户端的实现。 首先还是新建一个项目 选择mainwindow类 在通信前将.pro文件的第一行代码中追加network 窗口搭建 在mainwindow.ui中完成一下窗口的搭建 首先在…...

Vue2中watch与Vue3中watch对比

上一节说到了 computed计算属性对比 ,虽然计算属性在大多数情况下更合适,但有时也需要一个自定义的侦听器。这就是为什么 Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时&#…...

Web 3 一些常见术语

目录 Provider 提供者Signer 签名者Transaction 交易Contract 合约Receipt 收据 首先,从高层次上对可用对象的类型及其负责的内容有一个基本的了解是很有用的。 Provider 提供者 一个 Provider 是与区块链的只读连接,允许查询区块链状态,例…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

MODBUS TCP转CANopen 技术赋能高效协同作业

在现代工业自动化领域&#xff0c;MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步&#xff0c;这两种通讯协议也正在被逐步融合&#xff0c;形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

rnn判断string中第一次出现a的下标

# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...