python爬虫爬取网页数据
我昨天刚用Python写了个爬虫,爬虫爬把某个招聘网站上的网页三千条职位信息抓了下来。整个过程不到二十分钟,数据代码也就六十来行。爬虫爬这事放在五年前,网页得折腾一下午。数据
爬虫的爬虫爬核心逻辑其实特别简单:模拟请求、解析响应、网页提取数据。数据就这三步,爬虫爬没了。网页复杂的数据是你遇到的各种意外——网站反爬、验证码、爬虫爬动态加载、网页IP封禁。数据这些坑我基本都踩过,下面挑几个典型的说说。
先拿requests库发个GET请求。大多数网站返回的HTML里,数据就嵌在标签之间。你用BeautifulSoup去解析,find_all找class或者id,把内容摘出来。比如抓新闻标题,代码大概长这样:
import requests from bs4 import BeautifulSoup url = 'https://example.com/news' resp = requests.get(url, headers={ 'User-Agent': 'Mozilla/5.0'}) soup = BeautifulSoup(resp.text, 'html.parser') titles = soup.find_all('h2', class_='title') for t in titles: print(t.text.strip()) 这个例子能跑通,但只能对付静态页面。现在很多网站都是前端渲染——你看到的HTML是JavaScript执行完才生成的。requests拿到的源码里根本找不到数据。这时候得换selenium或者playwright,它们会驱动一个真实浏览器去加载页面,等渲染完再抓。代价是慢,而且吃内存。我一般先看network面板里有没有JSON接口,有的话直接请求那个接口,又快又稳。
反爬是另一个坎。最简单的UA检查,加个headers就过了。麻烦的是IP频率限制——你一秒请求十次,对方直接封你IP。我的做法是加代理池,或者干脆用time.sleep随机延时,模拟真人浏览节奏。还有的网站会检测浏览器指纹,比如webdriver标记,这种就得用undetected-chromedriver之类的库。
说个有意思的案例。上个月我想抓某个电商平台的商品评价,结果发现所有数据都藏在XHR请求里,而且参数加密了。我花了半天逆向那个JS加密函数,最后发现是AES加密,密钥就硬编码在前端代码里。你说这算不算防了个寂寞?但很多小网站还真就这水平。
爬虫写多了你会发现,最难的部分不是技术,而是判断该不该爬、怎么爬合规。robots.txt不是法律,但尊重它是基本礼貌。个人学习用途的爬取,只要不商用、不频繁请求、不涉及隐私数据,一般问题不大。我自己的原则是:抓公开数据、控制频率、不绕登录验证。
最后说点实在的。爬下来的数据存哪?CSV是最省事的,但数据量大了建议存SQLite或MongoDB。再就是清洗——HTML标签剥离、去重、编码转换,这些琐碎工作能占掉你一半时间。别指望一次到位,爬虫项目本来就是调试、运行、维护的循环。
想学的话,别光看教程,直接找个目标网站练手。挑个简单的,比如天气数据或者豆瓣电影列表,跑通一遍流程比看十篇理论都有用。遇到问题就查官方文档,Stack Overflow上什么坑都有人踩过。就这么回事。
(责任编辑:探索)














