网站首页 > java教程 正文
前言:Scrapy是啥?
Scrapy 是 Python 一个非常强大的爬虫框架,特点是:
数据抓取效率极高
支持分层设计:代码组织清晰
内置队列、内置缓存
支持代理/重试/反爬方案
一句话:用于构建大规模、高性能爬虫系统的首选框架。
学习本来就不是一蹴而就的事,不过只要你肯练、敢用,坚持,你一定能看到变化!
快速启动Scrapy项目
步骤1:安装Scrapy
pip3 install scrapy
步骤2:创建Scrapy项目
scrapy startproject quotesbotcd quotesbot
目录结构:
实战案例:爬取quotes.toscrape.com
步骤3:创建spider
scrapy genspider quotes quotes.toscrape.com
步骤4:修改spiders/quotes.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :Fish
@File :D21.py
@Date :2025/6/22 20:24
@Author : malijie
"""
import scrapy
class QuotesSpider(scrapy.Spider):
name = "quotes"
start_urls = ['https://quotes.toscrape.com']
def parse(self, response):
for quote in response.css('div.quote'):
yield {
'text': quote.css('span.text::text').get(),
'author': quote.css('small.author::text').get(),
'tags': quote.css('div.tags a.tag::text').getall(),
}
步骤5:启动爬虫
在quotesbot下执行
scrapy crawl quotes -o quotes.json
输出格式支持
· JSON,CSV,XML
scrapy crawl quotes -o quotes.csv
scrapy crawl quotes -o quotes.xml
高阶技巧
1.添加缓存:避免重复爬取
HTTPCACHE_ENABLED = True
2.使用代理IP
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
}
HTTP_PROXY = 'http://127.0.0.1:8080'
完整的settings.py
# Scrapy settings for quotesbotcd 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
BOT_NAME = "quotesbotcd"
SPIDER_MODULES = ["quotesbotcd.spiders"]
NEWSPIDER_MODULE = "quotesbotcd.spiders"
ADDONS = {}
# Crawl responsibly by identifying yourself (and your website) on the user-agent
# USER_AGENT = "quotesbotcd (+http://www.yourdomain.com)"
# Obey robots.txt rules
ROBOTSTXT_OBEY = True
# 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
# Disable cookies (enabled by default)
# COOKIES_ENABLED = False
# Disable Telnet Console (enabled by default)
# TELNETCONSOLE_ENABLED = False
# 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 = {
# "quotesbotcd.middlewares.QuotesbotcdSpiderMiddleware": 543,
# }
# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
# 使用代理IP
DOWNLOADER_MIDDLEWARES = {
'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 1,
}
HTTP_PROXY = 'http://127.0.0.1:8080'
# 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 = {
"quotesbotcd.pipelines.MySQLPipeline": 300,
}
# 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
# 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 = []
# HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"
# Set settings whose default value is deprecated to a future-proof value
FEED_EXPORT_ENCODING = "utf-8"
3.输出到MySQL
使用经典的 pymysql + pipeline合作写入数据库,此处不展开,需要可单独出文。
pandas读取爬取结果效果图
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :Fish
@File :test.py
@Date :2025/6/22 20:54
@Author : malijie
"""
import pandas as pd
df = pd.read_json("quotes.json")
print(df.head())
实际场景
· 日志自动抓取
· 科研资料批量引用
· 网站评论/热度数据分析
· 网站价格监控
总结
Scrapy 是开发者和数据分析师的最好助手。开发效率高,解耦功能强,多项爬取一齐管理,能够快速打造一套完整的数据抓取系统。
下期预告
《每天一个 Python 库:httpx 异步请求实战,快速接口体验第一名!》
点赞收藏评论 支持更新,我会续续更新更多实用 Python 库和案例!
猜你喜欢
- 2025-07-07 网络爬虫:Python动态网页爬虫2种技术方式及示例
- 2025-07-07 Python 爬虫框架Scrapy 简单介绍(python中的爬虫框架)
- 2025-07-07 神龙IP一文带你了解分布式网络爬虫
- 2025-07-07 你们想要的Python爬虫教程来了:从原理到实践
- 2025-07-07 Python开发爬虫的常用技术架构(python网络爬虫开发)
- 2025-07-07 Python 网络爬取的时候使用那种框架
- 2025-07-07 15个最受欢迎的Python开源框架!(python开源框架排行)
- 2025-07-07 Node.js+Puppeteer:新一代动态爬虫利器,高效抓取不再难!
- 2025-07-07 零基础小白如何学爬虫技术?看一遍就会的详细教程!
- 2025-07-07 Scrapy爬虫框架 批量抓取数据轻轻松松啦~
你 发表评论:
欢迎- 最近发表
-
- Java内存溢出紧急处理:10个必知的Linux命令快速定位OOM
- 面试常问的 25+ 个 Linux 命令(linux面试命令大全)
- Java堆外内存溢出紧急处理实战:Linux命令定位与Spring Boot解决
- java开发常用的Linux命令,高频的没你想象的多
- Java 应用 CPU 飙升?8 个 Linux 命令组合拳快速锁定异常线程
- Java 开发者线上问题排查常用的 15 个 Linux 命令
- Java程序员必备的Linux命令:让你的工作效率翻倍
- Java程序员必备的Linux命令全解析
- [超全整理] Java 程序员必备的 100 条 Linux 命令大全
- SAP ABAP资源导航(sap aatp)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)