百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Python利器Scrapy入门:3分钟搞定网页数据抓取,小白变大神!

ccwgpt 2025-04-07 12:46 36 浏览 0 评论

还在手动复制粘贴网页信息?效率太低,还容易出错!想自动获取某个电商网站的最新价格?想批量下载一堆图书的简介?或者想实时追踪新闻头条?

想象一下,只需要几行Python代码,就能让一个自动化”小助手”帮你把整个网站的数据唰唰唰地抓下来,整理得整整齐齐,是不是很酷?

今天,老铁就带你认识一款Python爬虫领域的”瑞士军刀”——Scrapy框架,让你轻松从网页抓取数据,告别重复劳动,迈入自动化数据采集的大门!哪怕你是编程小白,看完这篇也能快速上手!

一、Scrapy是什么?为什么它这么牛?

简单来说,Scrapy 是一个为了爬取网站数据、提取结构性数据而编写的应用框架。你可以把它想象成一个高度优化的、装备精良的”数据搬运工队长”。

它内部主要有两个核心大将:

  1. Spider(爬虫): 这就是一线”侦察兵”,负责访问你指定的网页(URL),然后按照你给的指令(比如用CSS选择器),精准地找到并”抓取”你需要的数据,比如文章标题、商品价格、发布日期等等。
  2. Pipeline(管道): 这是后勤”处理中心”。Spider抓到原始数据(Item)后,就交给Pipeline。Pipeline可以对数据进行清洗、验证、去重,最后把你想要的数据存起来,比如保存成咱们常用的Excel能打开的CSV文件,或者存入数据库。



为啥推荐Scrapy?

  • 快! Scrapy采用异步处理,能同时处理多个请求,爬取效率超高。
  • 强! 内置了各种常用功能,如自动请求调度、处理Cookie和Session、应对重定向等。
  • 灵活! 可定制性强,可以通过中间件、扩展等轻松添加新功能。
  • 自动化! 结合Python,轻松构建自动化数据采集流水线,紧跟2025技术趋势!

咱们今天就用一个简单的BookScraper工具(基于Scrapy)作为例子,看看它是怎么把某书店网站
http://somebooks.someone.com/ 上的书籍信息抓下来的

(注:数据只作为演示用)

提醒:工具虽好,但请遵纪守法,切勿做触碰红线的事情!!!

二、实战演练:BookScraper工具抓书过程拆解

这个BookScraper小工具的目标就是:访问一个在线书店网站,把每本书的名字、价格、评分、库存状态、链接和描述都抓取下来,最后保存成一个CSV表格。



整个过程主要分三步:

Step 1: Spider出马,精准定位(books_spider.py)

Spider是整个抓取任务的起点和核心执行者。

  • 出发点 (start_urls): 告诉Spider从哪个网址开始访问,这里就是书店首页。
  • 找目标 (parse方法):Spider访问首页后,会调用parse方法。这个方法就像给Spider配了”火眼金睛”。它使用CSS选择器(一种网页元素的定位语法,比如h3 a::attr(title)就是说”找到h3标签里的a标签,并提取它的title属性值”)来找到页面上每一本书的信息块。提取出书名、价格、评分、库存和详情页链接。
  • 提示:爬虫绕不开HTML元素分析
# books_spider.py 简化示例
import scrapy
from ..items import ToscrapeBookItem # 导入定义好的数据结构

class ToscrapeBooksSpider(scrapy.Spider):
    name = "toscrape_books"
    start_urls = ["http://somebooks.someone.com/"]

    def parse(self, response):
        # 找到页面里所有包含书本信息的 
块 books_on_page = response.css('article.product_pod') for book in books_on_page: item = ToscrapeBookItem() # 创建一个容器准备装数据 # 用 CSS 选择器提取信息 item['title'] = book.css('h3 a::attr(title)').get() item['price'] = book.css('p.price_color::text').re_first(r"lb([\\d.]+)") # 提取价格数字 item['url'] = response.urljoin(book.css('h3 a::attr(href)').get()) # 拼接完整的详情页 URL # **重点**: 请求访问详情页,并指定回调函数处理详情页响应 yield scrapy.Request( url=item['url'], callback=self.parse_book_details, # 下一步交给这个函数处理 cb_kwargs={'item': item} # 把当前提取到的部分信息传过去 ) # 寻找"下一页"的链接,如果有就继续请求 next_page = response.css('li.next a::attr(href)').get() if next_page is not None: yield response.follow(next_page, callback=self.parse) # 继续调用 parse 处理下一页 def parse_book_details(self, response, item): # 这个函数专门处理详情页 # 提取书籍描述 item['content'] = response.css('#product_description + p::text').get(default='').strip() yield item # 把包含描述的完整 item 交给 Pipeline



  • 追根究底 (parse_book_details方法):拿到详情页链接后,Spider会再次发出请求。这次响应回来后,会调用parse_book_details方法,专门负责提取详情页里的书籍描述。最后,把包含所有信息(书名、价格、描述等)的完整Item(数据容器)交给下一步处理。
  • 翻山越岭 (处理分页):parse方法还会检查页面上有没有”下一页”的按钮。如果有,它会自动生成访问下一页的请求,并再次调用parse方法处理新页面,直到所有页面都被爬完。

Step 2: Pipeline接力,数据处理与保存 (pipelines.py)

Spider辛辛苦苦抓来的数据(Item),现在轮到Pipeline出场进行最后的处理和收尾工作。

  • 准备仓库 (open_spider方法): 在爬虫启动时,这个方法会被调用一次。它负责创建output_data目录(如果不存在),并打开一个CSV文件(toscrape_books_data.csv),然后写入表头(就是告诉CSV文件每一列是什么数据,比如title, price等)。
  • 加工入库 (process_item方法):每当Spider抓取到一本书的完整信息(一个Item)时,这个方法就会被调用。它接收到Item后,会按照open_spider里定好的表头顺序,把Item里的数据(书名、价格等)提取出来,排成一排。最后,调用CSV库的功能,把这一排数据作为新的一行写入到之前打开的CSV文件中。
# pipelines.py 简化示例
import csv
import os
from itemadapter import ItemAdapter

class CSVPipeline:
    def open_spider(self, spider):
        save_dir = 'output_data'
        os.makedirs(save_dir, exist_ok=True)
        file_path = os.path.join(save_dir, f'{spider.name}_data.csv')
        self.file = open(file_path, 'w', newline='', encoding='utf-8-sig')
        self.writer = csv.writer(self.file)
        # 假设 headers 是 ['title', 'price', 'rating', 'availability', 'url', 'content']
        self.headers = ['title', 'price', 'rating', 'availability', 'url', 'content'] # 实际代码会动态获取
        self.writer.writerow(self.headers) # 写入表头

    def close_spider(self, spider):
        self.file.close() # 爬虫结束时关闭文件

    def process_item(self, item, spider):
        adapter = ItemAdapter(item)
        # 按照表头顺序准备数据行
        row = [adapter.get(header) for header in self.headers]
        self.writer.writerow(row) # 将数据写入 CSV 文件的一行
        return item # **必须返回 item**,不然数据流就断了



  • 收尾工作 (close_spider方法): 当所有数据都抓取并处理完毕,爬虫准备收工时,这个方法被调用,负责关闭之前打开的CSV文件,确保所有数据都已安全写入。

Step 3: 启动!运行BookScraper工具

在项目目录下打开终端(命令行),输入简单的命令即可启动爬虫:

scrapy crawl toscrape_books

等待片刻,爬虫就会自动完成访问网页、提取数据、保存到CSV的全部流程。完成后,你会在output_data目录下找到一个toscrape_books_data.csv文件,里面就是抓取到的所有书籍信息啦!

效果是这样子滴:

三、进阶玩法与避坑指南

掌握了基础的Spider和Pipeline,你就打开了Scrapy世界的大门!

还能怎么玩?

  • 模拟登录: 抓取需要登录才能看的内容?Scrapy有招!
  • 下载文件/图片: 不止文本,图片、文档照样抓。
  • 对抗反爬: 设置代理IP、更换User-Agent(浏览器标识),跟网站”斗智斗勇”。
  • 结合AI: 把抓来的大量文本数据喂给大模型,做情感分析、内容摘要、甚至用AIGC生成新内容!自动化办公、内容创作都能用上。

新手注意避坑:

  • 遵守规则 (robots.txt): 爬虫虽好,但要讲武德。先查看网站的robots.txt文件,看哪些页面不允许爬取。切勿过度频繁请求,给网站服务器造成压力。做个有道德的爬虫开发者!
  • 遵纪守法: 请遵守法律法规,切勿做触碰红线的事情!!!
  • User-Agent: 有些网站会拒绝默认的Scrapy请求标识。可以在settings.py里把它改成常见的浏览器标识,假装自己是普通用户。
  • 动态内容 (JavaScript): 如果网页内容是靠JavaScript加载出来的(页面刚打开时看不到,要等一会儿才显示),基础Scrapy可能抓不到。这时需要请出更强大的工具,如Selenium或Playwright(这些是后话)。
  • 反爬机制: 遇到验证码、IP被封禁等情况,说明网站有反爬措施。这需要更复杂的策略来应对,是爬虫进阶路上必然会遇到的挑战。


(这个图帮你理解Scrapy内部请求、下载、响应、解析的基本循环)

总结

Scrapy框架就像一个强大的乐高套件,Spider负责找到并拿起你想要的”积木块”(数据),Pipeline则负责把这些积木块清洗、整理、并搭建成你最终想要的”模型”(如CSV文件)。

通过bookscraper这个小例子,我们看到了Scrapy如何自动化地完成网页数据抓取任务。虽然只是冰山一角,但足以展示其强大和便捷。

Python爬虫技术是数据时代的必备技能之一。掌握Scrapy,无论是做数据分析、自动化办公,还是进行AI训练,都能让你如虎添翼!

觉得有用?赶紧告诉给需要的朋友吧!对Scrapy或Python爬虫有任何问题,欢迎留言交流,老铁看到会回复的!后面还有更多Python和AI实战干货分享!

相关推荐

如何让老师看完文章后还啧啧称奇?满分作文有框架,这3点是关键

历年来语文考试中,作文的分数都占着相当大的一个比例,同时作文也是最容易拉开差距的一个模块。别人拿满分,而你却只有20分左右,分数的差距就是这样拉开的。作文想拿很高的分数却是不容易,但不是完全不可能的事...

小学作文写作技巧和方法,万能公式框架法。家长收藏

小学语文老师用心整理,将写作框架编成万能公式。作文的写作是语文学习中的重要一环,从小学到初中再到高中,作文一直是语文考试中占分比重最高的部分。小学阶段的语文写作相对来说比较简单,主要是打基础,但是很多...

如何用爆款改写技巧提升文章吸引力结构重塑:打破原文框架悬念前

如何用爆款改写技巧提升文章吸引力?结构重塑:打破原文框架悬念前置法-在开头设置悬念或提出反常识的结论,吸引读者注意力。例如,将“接纳不完美是治愈的开始”改写为“天天逼自己当完美超人?别杠了!生活本就...

守护袁昆:是否有必要按框架去写文章,拍摄剪辑视频?

(文/守护袁昆)如今不管是写文章还是剪辑视频,越来越多的朋友喜欢用框架、用脚本,作为互联网创作者,我们是否有必要按框架去写文章,拍摄剪辑短视频呢?其实在内容创作过程中,是否使用框架始终是一个充满争议的...

揭秘!爆款文章的秘密:让读者无法抗拒的文章框架

说说我自己一开始写文章都会犯一个毛病,文章,通常是想到哪里,写到哪里,“管不住字儿”。这样往往会出现以下问题绊住我们继续写下去1、很容易,写着就跑偏了,最终出来的成品和最初的设想偏离很大2、会写得很慢...

想要写出逻辑清晰的文章,你需要掌握哪些写作结构

想要写出好文章,就必须要了解文章的结构和框架。一篇文章结构清晰,读者就很容易跟上作者的思路,看出文章的重点内容。如果你对新媒体的文章有进行过研究,你就会发现很多公众号的文章结构都是类似的。所以你需要掌...

写作结构拆解:从选题到框架,如何让文章说服力翻倍?

你有没有想过,为什么有些文章能轻松获得很高的阅读量,而你的文章却始终无人问津?其实,写出爆款文章并没有想象中那么难。关键在于选择一个吸引人的主题,并用一个清晰的写作框架,通过2-3个有力的子观点支撑...

申论怎么写?结构怎么弄?这篇文章是最基本的好文章框架

写作总被吐槽逻辑混乱?三步搭建框架法,新手也能写出漂亮文章

一、结构决定论:信息传递的桥梁写作者和读者之间始终存在一道隐形的鸿沟。作者脑海中的想法如同一棵枝繁叶茂的大树,但直接倾倒给读者时,往往只剩下零散的枝叶,信息在传达过程中的丢失,作者输出的和读者读到的不...

如何搭建文章框架:新手写作者很有必要看

#头条深一度-深度阅读计划#见面好呀,我是潼臻~37岁,边上班边带娃的二胎妈妈藏起生活里的琐碎,期望你我都能遇到更好的自己~~~~~~~~~~~~~~~~~~果然多读书是可以真切学习到有用的东西最近把...

模型上下文协议(MCP)的可视化向导

最近,模型上下文协议(MCP)引起了广泛关注。你一定听说过它。今天,让我们来了解一下它是什么。直观地说,MCP就像是AI应用的USB-C接口。正如USB-C提供了一种标准化的方式,用于将...

97个人放一页PPT!用对Smartart架构图直接开挂!

从讯飞出差回来的路上,在高铁上看到一条微博,关于红楼梦人物的思维导图:下面很多家长说,帮助很大,能帮助上学的孩子梳理清人物关系,我看了下,清楚是清楚,但真的不太好看!作为一名PPT博主,我就顺带在高...

技术架构规范与实践(二)架构设计示例

1.逻辑架构1.1领域概念1.2宏观应用架构1.3宏观流程1.4微服务拆分与分层2.技术架构3.开发架构3.1后端技术栈分类名称版本描述后端框架/组件JavaJdk8(openjdk:8u342)后...

倾斜柱模板安装加固

1、适用范围:呈梯形逐层向内侧倾斜的框架柱。2、工艺流程:定位放线-配模-校正梁位置-安装加固。3、工艺方法:(1)定位放线首先现场技术管理人员对每颗不同标高的梁底、梁中边线及200mm控制线进行平面...

地基与基础工程、主体工程节点构造

#去班味吧#桩头凿除环切法工艺说明:1、根据桩头预留长度(深入承台10cm)放样桩顶标高,施工人员根据测量结果在基桩上用红油漆标注环切线;2、在切割线以上部分桩底,人工用钢钎打入桩底约15cm,打入时...

取消回复欢迎 发表评论: