Python爬虫实战:从零实现一个不容易被封的网页爬虫(附完整代码)
·
一、前言
很多人刚学 Python 爬虫时,都会遇到一个问题:
👉 爬着爬着就被封了 / 返回403 / IP被限制
这是因为你的请求“太像机器人了”。
本文将带你从零实现一个:
- ✅ 能正常抓取网页
- ✅ 降低被封概率
- ✅ 更接近真人行为
的爬虫程序。
二、基础爬虫(最简单版本)
先来看一个最基础的爬虫:
import requests
url = "https://example.com"
response = requests.get(url)
print(response.text)
👉 问题:
- 没有请求头
- 没有伪装
- 很容易被识别
三、伪装浏览器(关键一步)
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/120.0 Safari/537.36"
}
response = requests.get("https://example.com", headers=headers)
print(response.text)
👉 这样服务器会认为你是浏览器访问
四、加入随机延迟(核心技巧)
import time
import random
def human_delay():
delay = random.uniform(1, 3)
time.sleep(delay)
使用:
human_delay()
👉 防止请求过快被封
五、随机 User-Agent(进阶)
import random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
"Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)..."
]
headers = {
"User-Agent": random.choice(USER_AGENTS)
}
六、完整爬虫示例(推荐直接用)
import requests
import time
import random
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64)...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)...",
]
def fetch(url):
headers = {
"User-Agent": random.choice(USER_AGENTS)
}
response = requests.get(url, headers=headers, timeout=10)
return response.text
def crawl():
urls = [
"https://example.com/page1",
"https://example.com/page2",
]
for url in urls:
print(f"正在抓取: {url}")
html = fetch(url)
print(html[:200]) # 只打印前200字符
# 随机延迟
time.sleep(random.uniform(1, 3))
if __name__ == "__main__":
crawl()
七、防封核心总结(重点!)
| 技术 | 作用 |
|---|---|
| User-Agent伪装 | 模拟浏览器 |
| 随机延迟 ⭐ | 防止频率过高 |
| 随机UA | 增强随机性 |
| 请求间隔 | 模拟人类行为 |
八、进阶方向(涨粉关键)
如果你想让文章更“吸引人”,可以继续扩展:
- 🔥 使用代理IP池(防封神器)
- 🔥 使用 Selenium 模拟浏览器
- 🔥 爬取真实网站数据(如商品、文章)
- 🔥 数据入库(MySQL / SQLite)
九、常见问题
❓ 为什么返回403?
👉 你没有伪装 or 被识别为爬虫
❓ 为什么被封IP?
👉 请求太频繁
十、结尾
本文只是入门,但已经可以解决 80% 的问题。
更多推荐



所有评论(0)