本文整理了 Python 爬虫开发中的 30 个高频问题及对应解决方案,覆盖 SSL 证书验证、JSONP 数据解析、URL 参数提取等基础场景,也针对反爬拦截(IP 封禁、User-Agent 检测)、动态页面抓取、数据解析/存储异常等核心痛点提供实战代码。包含 HTTPError: Forbidden、unicode 路径编码、正则匹配失败等具体报错的解决方法,还详解了虚拟滚动导致的翻页数据重复、JS 加密数据抓取等进阶问题,所有方案均附可直接复用的代码示例。
1. SSL 证书验证
爬取 HTTPS 网站或接口时,如果遇到不受信任的 SSL 证书,可以添加以下代码来忽略 SSL 证书验证:
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2. JSONP 数据解析
爬取 JSONP 接口时,返回的数据需要去掉 callback 名称和外层括号。可以通过以下方式过滤:
import re
import requests
getOneSongInfoCallback = json.loads(re.match(r".*?({.*}).*", requests.get(url, headers=headers).text)[1])
3. URL 参数提取
获取请求地址后的参数时,可以使用以下方法:
import urllib.parse as parse
parse_query = parse.urlparse(url).query
qs = parse.parse_qs(parse_query)
4. 反爬拦截处理
网站可能会通过验证码、User-Agent 检查、IP 封禁等方式阻止爬虫。
- 设置合理的请求头,模拟浏览器行为,包括 User-Agent、Referer 等。
- 使用代理 IP 或轮换 IP 地址,避免 IP 被封禁。
- 对于验证码,可以尝试使用验证码识别服务,或手动处理。
代码示例:
import requests
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
'Referer': 'http://www.example.com'
}
proxies = {
'http': 'http://your_proxy_ip:port',
'https': 'http://your_proxy_ip:port'
}
response = requests.get(url, headers=headers, proxies=proxies)
5. 动态页面抓取
问题: 许多网站使用 JavaScript 动态生成内容,简单的 HTTP 请求无法获取这些数据。 解决方案:
- 使用 Selenium 等自动化测试工具模拟浏览器行为,抓取动态内容。
- 分析 Ajax 请求,使用 requests 库模拟发送 Ajax 请求。

