1. 网站爬虫限制简介
今天我们聊一个很有趣的主题 —— 如何绕过网站的爬虫限制。每个对爬虫感兴趣的程序员迟早都会遇到来自网站的限制和封禁问题。是时候研究一下,如何作为“好人”避开网站的保护系统,继续采集数据,而不会惹怒服务器啦。
当你向一个网站发送请求时,其实你就是在“入侵”它的私人空间,目的是获取它非常“珍贵”的数据。那么为什么网站会设置这些障碍呢?原因可能有很多,比如版权保护、保证服务器的可靠性和性能、防止数据被滥用。如果你消耗了网站太多资源或违反了规则,你可能会... 被封禁。没有人喜欢被封禁,除了服务器管理员。
2. 配置 user-agent
什么是 user-agent?
User-agent 是一个识别字符串,你的浏览器会在每次 HTTP 请求中携带这个信息,告诉服务器你使用的是哪个浏览器和操作系统。知道吗?这个 user-agent 其实很容易伪造,让服务器以为你用的是最新的 iPhone,而不是一个趁着喝咖啡时间运行的 Python 脚本。
如何修改 user-agent
在 requests 库中修改 user-agent 非常简单。看个小例子:
import requests
url = "https://example.com"
# 将 user-agent 设置为 Chrome 浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36"
}
response = requests.get(url, headers=headers)
print(response.content)
伪造 user-agent 有点像穿着熊猫玩偶服去参加公司聚会。是你没错,但看起来不一样。服务器看到“浏览器”而不是“脚本”时,可能会允许你进入。
3. 使用 cookies
什么是 cookies?
Cookies 是一些小数据片段,网站会将它们存储在你的浏览器里。它可以包含各种信息,比如网站的设置或会话 ID,让你在登录后保持在线状态。
在请求中使用 cookies
在 requests 中使用 cookies 也很简单。通常,你在第一次请求时获取 cookies,然后在后续请求中使用它们:
# 创建一个 session 来保存 cookies
session = requests.Session()
# 第一次请求,捕获 cookies
session.get(url)
# 在后续请求中使用相同的 cookies
response = session.get(url)
print(response.content)
Session 就像 cookies 的公交车,它们会和你一起“旅行”,保存你的设置。
4. 避免封禁的方法
降低被封禁的风险的技巧
以下是一些小技巧:
- 请求间隔延时:在请求间添加随机延时,避免引起怀疑。
- 更换 IP 地址:使用 VPN 或代理更改 IP 地址,避免因为这个被封禁。
- 轮换
user-agent:每次请求切换user-agent,模拟不同的浏览器。
延时和更换 IP 的示例
使用 time 库添加延时:
import time
import random
for _ in range(10):
response = session.get(url)
# 随机延时
time.sleep(random.uniform(1, 3))
在 requests 中通过代理来更改 IP:
proxies = {
"http": "http://10.10.10.10:8000",
"https": "https://10.10.10.10:8000",
}
response = requests.get(url, proxies=proxies)
5. 其他伪装方法
为了让脚本看起来不太可疑,使用 headers 和 cookies 模拟真实用户。明白了吗?真实感是你对抗封禁的秘密武器。
今天的课程就到这里啦!运用这些技术,你能在网站的雷达下保持“隐形”,继续采集有价值的数据而不被封禁。记住,和每个超级英雄一样,你也有责任 —— 请在法律和道德范围内使用这些技术。相信自己,愿你的代码优雅如猫在键盘上的舞蹈!
GO TO FULL VERSION