网易首页 > 网易号 > 正文 申请入驻

Python 爬虫:20 行代码,从练手网站开始

0
分享至

八月份我写过一篇《AI + 爬虫》,聊的是概念——AI 会怎么改变这门手艺。

这次来点能动手的:从零写你的第一个爬虫。

但开始之前,必须先说一件比写代码更重要的事。

一、第一个爬虫,千万别拿真实网站练手

大多数人学爬虫是这样开局的:找了个大网站,写代码一跑——要么报错,要么啥也抓不到。

然后就开始怀疑自己不适合编程。

问题不在你,在目标选错了。原因有两个:

第一,技术上你学不到东西。

真实网站几乎都有反爬:请求头校验、频率限制、动态加载、验证码。新手一上来就撞这些,等于还没学会走路就去跑障碍赛。你花三天搞清楚的东西,可能和"爬虫"本身一点关系都没有。

第二,合规上有风险。

不是所有网站都欢迎你抓。robots.txt 写了不许抓的地方,就别抓;网站服务条款明确禁止的,也别碰。新手最容易忽略这一点,而这恰恰是最要紧的。

好消息是:有一批网站,是专门建出来给你练手的。

二、认识一下我们的练习场

推荐一个:books.toscrape.com

它是一个专门为学爬虫的人做的练习站——一个假书店,1000 本书、分成 50 页。

它的存在目的就是让人练爬取,所以你抓它,不算给别人添麻烦,也完全不涉及合规问题。

学爬虫的第一课,就该在这种地方上。

三、第一步:把网页"拿"下来

爬虫的本质就两步:把网页拿下来 → 把想要的数据挑出来。

先做第一步。装好 Python 后,在命令行执行:

pip install requests beautifulsoup4 lxml

然后写下第一段代码:

```python

import requests

url = "http://books.toscrape.com/"

resp = requests.get(url, timeout=15)

print(resp.status_code) # 200 表示成功

print(len(resp.text)) # 网页内容的字符数

跑一下,你会看到 `200` 和一串数字。

这意味着你已经拿到整个网页的 HTML 了——爬虫最基础的一步,就这么简单。

> 小提示:加 `timeout` 是好习惯,避免网络卡住时程序一直死等。

四、第二步:把数据挑出来

现在的难题是:HTML 是一大坨标签,怎么找到"书名"和"价格"?

先别写代码,先找规律。

在浏览器里打开这个网站,把鼠标悬停在任意一本书上 → 右键 →检查(Inspect)。你会看到每一本书都包在一个标签里,长这样:

A Light in the Attic

£51.77

In stock

规律一下就出来了:每本书都是一个 `article`,书名在它里面的 `h3`,价格在 `price_color` 里,评分藏在 `star-rating` 的 class 名里,库存看 `instock`。

这一步才是爬虫真正的核心能力——不是写代码,是"看懂网页结构,找到重复规律"。

规律找到了,代码就是翻译:

```python

from bs4 import BeautifulSoup

soup = BeautifulSoup(resp.text, "lxml")

for item in soup.select("article.product_pod"):

title = item.h3.a["title"] # 书名

price = item.select_one("p.price_color").text # 价格

stock = item.select_one("p.instock").text.strip() # 库存

print(title, price, stock)

跑一下,20 本书的信息就列出来了。

五、第三步:翻页 + 存成表格

上面的代码只抓了第一页。想抓更多,就得翻页。

翻页的规律也一样——点一下"下一页",看地址栏怎么变的。你会发现它变成了 `page-2.html`、`page-3.html`。

那循环一下就行:

```python

import time

from bs4 import BeautifulSoup

import requests

print("开始抓取…")

for page in range(1, 4): # 先抓 3 页试试

url = f"http://books.toscrape.com/catalogue/page-{page}.html"

resp = requests.get(url, timeout=15)

soup = BeautifulSoup(resp.text, "lxml")

for item in soup.select("article.product_pod"):

title = item.h3.a["title"]

price = item.select_one("p.price_color").text

print(title, price)

time.sleep(1) # 礼貌间隔:每次请求之间停一下

注意最后那行 `time.sleep(1)`。

这不是可有可无的——它是爬虫的基本礼貌,也是保护你自己的手段。请求太快,服务器压力大,你也容易被封。哪怕对方是练习站,这个习惯也要从一开始就养成。

最后一步,把数据存下来:

```python

import csv

with open("books.csv", "w", newline="", encoding="utf-8-sig") as f:

writer = csv.writer(f)

writer.writerow(["书名", "价格"])

writer.writerow([title, price])

`encoding="utf-8-sig"` 这个细节别省——不加的话,中文用 Excel 打开会是乱码。

六、这就是你的第一个爬虫

把上面的东西合起来,不到 30 行,你就完成了一件完整的事:

访问网页 → 解析结构 → 循环翻页 → 存成文件。

我在自己的电脑上实测跑了一遍,3 页抓了 60 本书,CSV 正常生成,前几本长这样:

A Light in the Attic £51.77

Tipping the Velvet £53.74

Soumission £50.10

Sharp Objects £47.82

七、新手最容易踩的五个坑

一,拿真实大站练手。前面说过了,这是最常见的死法。

二,不看 robots.txt。网站根目录下的 `robots.txt` 文件,写明了哪些能抓、哪些不能。动手前先看一眼,这是行规。

三,不留间隔猛发请求。一秒几十次,等于在对方面前刷存在感。轻则被封,重则被认定为攻击。

四,用正则硬解 HTML。新手常想用字符串替换去抠数据,页面稍一变就全废。用解析库,别硬来。

五,抓了就不管。数据存下来不检查,结果里面一堆空值、重复、错位——抓取只占三分之一,检查数据才是剩下的三分之二。

写在最后:关于"能爬"和"该爬"

技术本身没有对错,但用技术是有边界的。三条底线,值得记住:

第一,看规矩。robots.txt 不让抓的,别抓;网站明确禁止的,别碰。

第二,看数据。别碰个人隐私信息——这不是技术问题,是法律问题。

第三,看用途。抓下来的公开数据拿来做分析、做研究,是一回事;拿去商用、转载、转卖,是另一回事。

能把数据抓下来,不代表你就该抓。这个判断,比会写代码重要得多。

最后说句实在话:爬虫入门真的不难,难的是每次都记着上面那三条。

本文代码均为本人在练习站点上的实测示例,仅供学习交流,请遵守目标网站的 robots.txt 与服务条款。

评论区聊聊:你的第一个爬虫,是拿哪个网站练的手?

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
甲醛白菜仅一个月,毒竹笋又被爆,目的地被扒,更荒唐的还在后面

甲醛白菜仅一个月,毒竹笋又被爆,目的地被扒,更荒唐的还在后面

深度解析热点
2026-09-18 23:34:20
敬一丹当天在哈尔滨开颅手术,包ICU专机回京

敬一丹当天在哈尔滨开颅手术,包ICU专机回京

雪中风车
2026-09-16 15:23:29
中国高层绝对有高人,层层进逼,一步步往前挤,把主动权抢过来

中国高层绝对有高人,层层进逼,一步步往前挤,把主动权抢过来

小马姨
2026-09-17 11:23:43
巴基斯坦军方发言人公开表示:关于胡塞武装袭击沙特,巴方将“不惜一切”支持沙特,包括协助保卫沙特境内宗教圣地麦加和麦地那

巴基斯坦军方发言人公开表示:关于胡塞武装袭击沙特,巴方将“不惜一切”支持沙特,包括协助保卫沙特境内宗教圣地麦加和麦地那

吉刻新闻
2026-09-19 09:25:03
打一针,几乎不再骨折!《细胞》重磅突破:骨质疏松迎来新疗法

打一针,几乎不再骨折!《细胞》重磅突破:骨质疏松迎来新疗法

徐德文科学频道
2026-09-18 16:57:30
如果中国不让步,就驱逐中方外交官!日本话音刚落,空军王炸登场

如果中国不让步,就驱逐中方外交官!日本话音刚落,空军王炸登场

安珈使者啊
2026-09-18 09:57:19
国安再迎德国新援!上赛季曾效力德乙球队,将接过于大宝帅印

国安再迎德国新援!上赛季曾效力德乙球队,将接过于大宝帅印

体坛鉴春秋
2026-09-19 15:46:38
0-3德比惨败!10.8亿豪门夏窗引援全球第一却创耻辱纪录 3轮只拿1分

0-3德比惨败!10.8亿豪门夏窗引援全球第一却创耻辱纪录 3轮只拿1分

狍子歪解体坛
2026-09-19 04:58:09
男单八强出炉:国乒2人晋级!日本险些全军覆没,德法各2人过关

男单八强出炉:国乒2人晋级!日本险些全军覆没,德法各2人过关

乒烧泳球
2026-09-19 15:55:14
长江里倒了15天黑泥,企业罚85.7万:这笔账,网友越算越不明白

长江里倒了15天黑泥,企业罚85.7万:这笔账,网友越算越不明白

社会日日鲜
2026-09-19 13:51:40
三股冷空气!雨雨雨!江苏最新……

三股冷空气!雨雨雨!江苏最新……

新浪财经
2026-09-19 13:44:14
CCTV5直播:调整!赛程:中国女排1-4决赛时间敲定,日本女排强势

CCTV5直播:调整!赛程:中国女排1-4决赛时间敲定,日本女排强势

十三哥侃大山
2026-09-19 09:51:12
CBA最新消息!徐昕在上海特训,布朗和北京男篮会合,上海北控洲际杯赛程出炉

CBA最新消息!徐昕在上海特训,布朗和北京男篮会合,上海北控洲际杯赛程出炉

中国篮坛快讯
2026-09-19 18:59:42
CCTV直播!王曼昱下下签!遭遇张本美和,孙颖莎战早田 亚运会乒乓球女单签表

CCTV直播!王曼昱下下签!遭遇张本美和,孙颖莎战早田 亚运会乒乓球女单签表

好乒乓
2026-09-19 00:13:43
胡塞刚揍下沙特F-15,美国就甩狠话:不拆中国设备,休想摸到F-35

胡塞刚揍下沙特F-15,美国就甩狠话:不拆中国设备,休想摸到F-35

墨印斋
2026-09-18 10:11:02
旧金山男子花$6000买路边广告牌,假装是AI聊天机器人,结果天天干到凌晨

旧金山男子花$6000买路边广告牌,假装是AI聊天机器人,结果天天干到凌晨

北美省钱快报
2026-09-19 05:48:59
太离谱了!张雪在机场吃面愤怒离场,表示筷子要收客人2块钱,真的不合理

太离谱了!张雪在机场吃面愤怒离场,表示筷子要收客人2块钱,真的不合理

火山詩话
2026-09-18 13:00:13
毛主席有多明智?成立新疆生产建设兵团,七十年后谁都得服

毛主席有多明智?成立新疆生产建设兵团,七十年后谁都得服

非虚构人间
2026-09-17 09:05:03
中菲争端升级,波兰要求中国接受裁决,话音刚落,中方通牒到了

中菲争端升级,波兰要求中国接受裁决,话音刚落,中方通牒到了

墨策讲历史
2026-09-19 17:54:33
黑人女博主吐槽中国就医经历:做妇科检查时,被医生叫来学生围观,还各种点评

黑人女博主吐槽中国就医经历:做妇科检查时,被医生叫来学生围观,还各种点评

小徐讲八卦
2026-09-19 09:50:11
2026-09-19 19:55:00
呼呼历史论
呼呼历史论
分享有趣的历史
823文章数 18146关注度
往期回顾 全部

科技要闻

要走650亿,智谱的理想越来越贵

头条要闻

亚运会运动员吐槽吃不饱 韩国运动员发文"救救我们"

头条要闻

亚运会运动员吐槽吃不饱 韩国运动员发文"救救我们"

体育要闻

2026亚运会开幕式 胡明轩吴愉担任旗手

娱乐要闻

自毁前途5年赵薇露面!家境被扒出

财经要闻

江西首富破产:一张927万商票压垮千亿帝国

汽车要闻

大块头的从容 红旗G919如何兼顾豪华与越野能力

态度原创

亲子
健康
本地
家居
军事航空

亲子要闻

让孩子少玩游戏,试试这个绝招!

脑动脉瘤的治疗方法,该选哪一种?

本地新闻

中秋逛白塔寺,体验国医妙荟雅集

家居要闻

2026建博会(广州) 公装联探展交流活动

军事要闻

特朗普再称对伊朗战争将很快结束

无障碍浏览 进入关怀版