如何爬取网页数据python

 人参与 | 时间:2026-10-17 07:08:47

我上个月为了抓一个电商平台的何爬商品价格,写了段Python脚本。取网用requests库发了个GET请求,页数拿到HTML源码,何爬再用正则表达式把价格字段抠出来。取网整个过程不到三十行代码,页数跑了两个小时,何爬抓了四千多条数据。取网这就是页数爬虫最基础的样子——发请求,收响应,何爬解析内容。取网

requests库是页数入门首选。装好之后,何爬一行resp = requests.get(url)就能拿到网页内容。取网但这里有个坑:网站可能返回403禁止访问,页数因为默认的User-Agent暴露了你是程序。我习惯在请求头里伪装成浏览器,加上headers = { 'User-Agent': 'Mozilla/5.0...'},大部分反爬不严的网站就放行了。另外,resp.encoding经常需要手动指定,否则中文会乱码,我一般用resp.apparent_encoding自动检测。

拿到HTML之后,解析是关键。正则表达式适合简单场景,比如提取邮箱、日期这种固定格式。但网页结构复杂时,正则写起来像天书,维护也痛苦。我改用BeautifulSoup库,几行代码就能定位元素。比如soup.find_all('span', class_='price'),把所有价格标签都摘出来。要是页面是动态加载的,requests拿不到数据,就得用Selenium模拟浏览器操作。这玩意儿会打开真实的Chrome窗口,慢是慢点,但能执行JavaScript,等页面渲染完再抓取。

爬虫写快了,反爬手段也升级了。有些网站会检查请求频率,一秒超过五次就直接封IP。我的经验是加个time.sleep(random.uniform(1, 3)),让请求间隔随机化。更狠的网站会用验证码或者JS加密参数,这时候就得靠打码平台或者逆向分析。说实话,我一般不碰这种硬骨头,成本太高。挑软柿子捏,选那些公开API或者数据量小的站点练手更实际。

存储环节容易被忽略。直接把数据写进CSV文件最省事,csv.writer两行代码搞定。但数据多了之后,我建议用SQLite,Python内置支持,不用装数据库服务。建个表,插入数据,查询也方便。有一次我抓了十万条数据存CSV,结果Excel打开直接卡死,换成SQLite后流畅多了。

最后说个实际案例。我帮朋友抓过某个政府公开数据网站,里面是历年统计年鉴。那个网站结构老旧,表格嵌套了七八层,BeautifulSoup解析起来很吃力。后来我换思路,直接用pandas的pd.read_html(),它内部自动处理表格标签,一次就解析出干净的DataFrame。这提醒我,别死磕一种工具,多了解些库的特性,往往有意外收获。

爬虫的法律风险得提一嘴。robots.txt是网站的君子协定,我一般先看一眼再决定怎么爬。去年有程序员爬了某招聘网站的数据,被索赔几百万,就是因为抓得太猛且用于商业用途。个人学习用,频率控制好,问题不大。要是真做商业项目,找个正规数据源渠道比什么都安全。

写爬虫这事,动手比看教程强十倍。先找个小网站,拿requests和BeautifulSoup练手,抓个标题也好。遇到反爬就查资料,踩过坑才记得牢。我的脚本现在还躺在硬盘里,偶尔改改参数还能用。代码这东西,实用至上,能解决问题就行。

顶: 8152踩: 67662