很多人学编程的第一个真实动机,其实是”想把网上的数据抓下来”。不管是想批量下载图片、监控某个商品的价格,还是给自己攒一份素材,网页爬虫都是把编程从练习题变成生产力的那座桥。2018 年的 Python 生态对新手已经相当友好:requests 负责发请求,BeautifulSoup 负责解析页面,几乎不需要碰什么底层的 socket 和正则。这篇教程就带你从零写一个能跑的小爬虫,顺便把最容易踩的坑讲清楚。

第一步:把环境搭起来
先确认你装好了 Python 3。然后打开命令行,用 pip 安装两个库:
pip install requests beautifulsoup4
requests 是目前 Python 世界最流行的 HTTP 库,它把发网络请求这件事简化到了一行代码。beautifulsoup4 则是解析 HTML 的利器,你可以把它理解成一个能按标签、按属性在网页里”查找元素”的工具。装完这两个,基本的爬虫就齐活了。
第二步:请求一个网页
打开你想抓的网站,在浏览器里右键”检查”,先看看数据到底是写在 HTML 源码里,还是靠 JavaScript 动态加载的。这一步非常关键——如果网页内容是打开之后才由脚本渲染出来的,requests 直接抓到的可能只是一个空壳。对于普通的静态页面,抓取很简单:
import requests
resp = requests.get('https://example.com', headers={'User-Agent': 'Mozilla/5.0'})
print(resp.status_code)
print(resp.text[:500])
这里有个新手常踩的坑:很多网站会默认拒绝没有浏览器标识的请求。如果你不带上 User-Agent,服务器可能直接返回 403。加上一个伪装成浏览器的请求头,通过率会高很多。看到 status_code 是 200,就说明你成功拿到了页面。
第三步:把数据从页面里抠出来
拿到 HTML 字符串之后,就轮到 BeautifulSoup 上场了。它把一大团标签解析成一棵可以查询的树:
from bs4 import BeautifulSoup
soup = BeautifulSoup(resp.text, 'html.parser')
titles = soup.select('h2.article-title a')
for t in titles:
print(t.get_text(), t['href'])
select 方法接受 CSS 选择器,你完全可以把浏览器”检查元素”里看到的选择器直接复制过来。get_text() 拿到标签里的文字,[‘href’] 取出属性。就这么几行,你已经能把一个列表页里所有文章标题和链接批量提取出来了。比起用正则去硬匹配 HTML,这种结构化解析既稳又好维护。
第四步:礼貌地抓取
会抓只是第一步,抓得对、抓得久才是本事。新手写爬虫最容易犯的错,就是开一个循环一秒钟请求几十次,把人家服务器打挂,然后自己的 IP 被封。几条朴素的原则能帮你走得更远:
- 每次请求之间 sleep 一下,比如 time.sleep(1),让节奏慢下来;
- 尊重网站根目录下的 robots.txt,那是站长写明的”哪些地方别来”;
- 不要高频抓取登录后才可见的私密内容,也不要把抓来的数据原样商用;
- 遇到 429(请求过多)或验证码,立刻停手,别硬刚。
爬虫本质上是在借用别人的服务器资源,礼貌不是道德说教,而是让你的脚本活得久的技术选择。
第五步:把结果存下来
抓到的数据总得有个去处。最简单的做法是写进 CSV,用 Python 自带的 csv 模块就行:
import csv
with open('result.csv', 'w', newline='', encoding='utf-8') as f:
w = csv.writer(f)
w.writerow(['标题', '链接'])
for t in titles:
w.writerow([t.get_text(), t['href']])
用 utf-8 编码写文件,能避免中文在 Excel 里打开变成乱码。数据量再大一点,就可以考虑存进 SQLite,随用随查,不用额外搭数据库。对绝大多数个人项目来说,CSV 加 SQLite 已经足够,没必要一上来就上重型存储。
常见坑:动态加载与编码
两个高频问题值得单独说。其一是编码:有些网页没有正确声明字符集,requests 猜出来的编码可能是错的,抓回来全是乱码。这时手动指定 resp.encoding = ‘utf-8’ 往往能解决。其二是动态加载:如果 F12 里看不到你要的数据,说明它是通过接口异步拉的。这时别硬解析页面,直接去 Network 面板找那个返回 JSON 的接口,用 requests 请求它的地址,反而更干净。
结语:从抓取到自动化
掌握了请求、解析、限速这三步,你已经能解决身边一大批重复劳动:自动监控信息、批量整理资料、给自己做数据素材。爬虫的门槛其实不在代码,而在于你能不能看懂网页结构、能不能对服务器保持克制。技术之外那份分寸感,才是一个成熟写作者和脚本作者真正的修养。
0 条评论
还没有评论,快来抢沙发吧!
发表评论