使用BeautifulSoup爬取Craigslist失败,此前正常现遇浏览器验证提示
问题解决与合规说明
一、爬取失败的原因及修复方案
你遇到的是Craigslist的反爬机制触发了,返回的是浏览器兼容性提示,本质是你的请求没有模拟真实浏览器的特征,被识别为非人类访问。
修复步骤:
- 添加请求头(User-Agent):默认
requests的请求头会暴露是爬虫,需要模拟现代浏览器的UA。修改你的请求代码:
from requests import get from bs4 import BeautifulSoup import time url = 'https://sandiego.craigslist.org/search/apa?hasPic=1&availabilityMode=0&sale_date=all+dates' # 模拟现代浏览器的请求头,可根据自己的浏览器实际UA替换 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' } response = get(url, headers=headers) # 添加延迟,避免频繁请求触发限制 time.sleep(2) html_soup = BeautifulSoup(response.text, 'html.parser') posts = html_soup.find_all('li', class_="result-row") print(type(posts)) print(len(posts))
- 控制请求频率:不要短时间内重复发起请求,手动添加延迟(比如
time.sleep(2)),降低被封禁的概率。 - 临时切换IP:如果添加UA后仍无效,可能是你的IP已被临时限制,可切换网络(如手机热点),无需付费代理即可恢复访问。
二、爬取Craigslist的合规性说明
Craigslist的服务条款明确禁止大规模自动化爬取、批量获取数据,除非获得官方书面授权。但非商业目的、低频率的个人用途爬取,通常不会被追责,需遵守以下原则:
- 仅获取个人所需的少量内容,不要批量爬取全站数据
- 不要干扰网站正常运营,严格控制请求频率
- 不得将爬取的数据用于商业用途或公开传播
如果需要持续、大规模获取数据,目前Craigslist没有公开API,建议联系官方申请授权。
内容的提问来源于stack exchange,提问作者Anna Weeks
相关产品推荐
相关产品推荐

