python爬取网页内容代码

 人参与 | 时间:2026-10-17 06:50:33

用Python写爬虫,网页核心就三行代码的内容事。

先看一个真实案例。代码我上个月想抓某个电商平台的网页价格数据,页面是内容动态渲染的,直接requests.get根本拿不到商品信息。代码后来换了selenium模拟浏览器,网页才把数据捞出来。内容但selenium慢,代码一个页面要等两三秒。网页后来发现那个网站有个隐藏的内容API接口,直接返回JSON数据,代码速度瞬间快了几十倍。网页

所以爬虫的内容第一课不是学库,是代码学会看网页结构。按F12打开开发者工具,Network标签页里能看到所有请求。如果html里没有你要的数据,就去翻XHR请求,多半能找到真正的数据源。这比闷头写代码高效多了。

最基础的静态页面爬取,用requests加BeautifulSoup就够了。代码长这样:

import requests from bs4 import BeautifulSoup url = 'https://example.com' headers = { 'User-Agent': 'Mozilla/5.0'} resp = requests.get(url, headers=headers) soup = BeautifulSoup(resp.text, 'html.parser') # 提取所有链接 for a in soup.find_all('a'): print(a.get('href')) 

这段代码能处理大部分简单场景。但有个坑必须提醒你——网站会反爬。我遇到过返回200但内容是验证码页面的情况,就是因为没带headers。更狠的网站会检查cookie、请求频率、甚至浏览器指纹。你得像真人一样访问,随机延迟个0.5到1.5秒,别太频繁。

动态页面就得换思路了。Selenium能模拟点击、滚动、输入,但资源占用大。另一个选择是分析它的Ajax请求。比如某个新闻网站,内容是通过post请求加载的,参数里有个加密的sign值。我花了半小时逆向JS才搞明白生成规则,之后直接构造post请求,效率比selenium高太多。

存储数据也有讲究。小规模数据存CSV就行,但字段里有逗号或换行会出错,所以要用csv模块而不是手动拼接字符串。数据量大了就存SQLite,零配置还支持SQL查询。我习惯爬完先存内存,清洗完再批量写入,避免频繁IO。

有个细节容易被忽略——编码问题。有些网站返回GBK编码,直接存会出现乱码。requests的text属性会自动猜测编码,但经常猜错。稳妥做法是用resp.encoding = 'gbk'强制指定,或者从headers里的charset参数读取。

最后说个真实教训。有次我爬一个论坛的帖子,没注意robots.txt,也没控制爬取频率,结果IP被封了三天。后来学乖了,写代码前先看robots协议,代码里加try-except处理异常,遇到403就停一会儿再继续。爬虫不是莽撞活,是精细活。

写爬虫最重要的是调试能力。报错了别慌,先print出resp.status_code和resp.text的前500字,看看返回了什么。80%的问题都能通过这一步找到线索。剩下的就是反复试,直到数据能稳定跑通。

工具永远在变,思路才是核心。你掌握了分析请求、解析数据、应对反爬这三板斧,以后换什么网站都能快速上手。

顶: 6踩: 84