一篇给非程序员也能看懂的科普+技术拆解
一、先讲故事:没有爬虫之前我们怎么“搬”数据?
学生:写论文需要 2000 条豆瓣短评,手动复制粘贴到凌晨 3 点。
运营:领导让收集 50 个竞品价格,打开 Excel 一行行敲,周末泡汤。
投资经理:每天开盘前想看 100 家公司的舆情,睁眼第一件事就是刷 100 个网页。
Python 爬虫的出现,相当于雇了一个 7×24 小时不眨眼的“数据搬运工”,把上述工作量从“人天”压缩到“人分钟”。
二、正式定义
Python 爬虫(Web Scraper / Spider)是用 Python 语言编写的自动化程序,它模拟人类访问网页或接口,把散落的文本、图片、文件、JSON批量取回本地,再经过清洗、存储,最终变成可分析的“结构化数据”。
三、爬虫的“ anatomy”——5 步流水线
发请求→ 2.拿响应→ 3.解析内容→ 4.存数据→ 5.循环/调度
下面用“爬取北京天气”举例,逐行对应
步骤人类动作Python 对应代码(10 行)
① 发请求在浏览器地址栏输入 urlrequests.get(url, headers=headers)
② 拿响应看到满屏天气数字r.text 或 r.json()
③ 解析肉眼找“最高 28°”json['data']['max_temp']
④ 存数据抄到笔记本pandas.to_csv('beijing.csv')
⑤ 循环每天再查一遍schedule.every().day.at('06:00').do(job)
四、数据到底是怎么“搬”回来的?——3 条技术路线
1. 直接调公开 API(最干净)
数据源:官方 OpenAPI、SPA 页面异步接口
协议:HTTP/HTTPS + JSON
工具:requests+pydantic
优点:字段整齐,反爬弱;缺点:需要申请 key,限额
例子:高德天气、微博热度、B 站弹幕接口
2. 解析 HTML 网页(最通用)
数据源:新闻、电商、博客、政府门户
协议:HTTP + HTML
工具:BeautifulSoup/lxml/parsel
核心:CSS 选择器 或 XPath,定位
例子:豆瓣 Top250、知乎热榜、京东商品标题
3. 控制浏览器(最稳但最慢)
数据源:需要点击、滚动、登录的复杂页面
工具:Selenium/Playwright/Pyppeteer
原理:驱动真实 Chrome,执行 JS 后拿 DOM
例子:支付宝账单、后台管理系统、地图无限下拉
五、把“文本”变成“表格”——清洗 4 板斧
正则
`re.findall(r'\d+', '好评 12839 条') → 12839
字符串切片
price_str[1:]去掉“¥”符号
日期统一
pandas.to_datetime('2小时前')→2025-04-18 09:00:00
异常值处理
“暂无报价” →None,方便数据库导入
六、存储方案对照表
场景量级推荐命令
实验/脚本<10 万行CSVdf.to_csv()
单机分析<500 万行SQLitesqlite3 内置库
团队共享任意MySQLsqlalchemy
大数据>1 亿行Hive/ORCpyhive + HDFS
七、反爬与合规——别做“背锅侠”
robots.txt→ 先看后爬,禁止就别硬闯
并发限速→ 默认 1 QPS,加time.sleep(random.uniform(0.5,1.5))
User-Agent→ 标明身份CompanyBot/1.0 (contact@example.com)
不登录、不破解→ 需要验证码/滑块就停手,让法务评估
个人信息→ 手机号、身份证、地址一律不落盘,内存即抛
八、完整 mini 项目:10 行代码爬“今日热榜”
importrequests,pandasaspdurl='https://tophub.today/api/c/news'headers={'User-Agent':'Mozilla/5.0'}r=requests.get(url,headers=headers,timeout=10)df=pd.json_normalize(r.json()['data'])# 扁平化 JSONdf=df[['title','hot','url']]# 只要三列df.to_csv('hot_rank.csv',index=False)print('已写入',df.shape[0],'条热搜')
运行结果:
已写入 50 条热搜
打开hot_rank.csv,直接 Excel 透视图,全程 30 秒。
九、常见坑 & 一键诊断
报错翻译解决
Connection timeout网慢/被拉黑加代理、降速
403 Forbidden被识别为爬虫换 UA + 带 Cookie
JSONDecodeError返回 HTML 错误页打印 r.text 看提示
中文乱码编码不一致r.encoding='utf-8'
十、总结:一句话记住 Python 爬虫
“用 Python 写的一组自动化请求脚本,它代替浏览器把分散在网页/接口里的信息批量搬回家,清洗后变成 Excel 或数据库,让你从‘复制粘贴’里永远毕业。”
只要守住“公开、低速、脱敏、注明来源”四条底线,Python 爬虫就是你最听话的免费数据工人。祝你爬得开心,分析得痛快!