使用BeautifulSoup爬取Indeed网站时requests.get(url)迭代2-6次后挂起的问题求助
解决Indeed爬虫多次请求后挂起的问题
嘿,我之前也踩过这个坑——Indeed的反爬机制不会一上来就封禁你,而是会在检测到异常请求频率或者非浏览器特征的请求时,逐步限制访问,导致请求挂起甚至超时。初始请求能成功,恰恰是因为还没触发更严格的限制,接下来咱们一步步解决:
1. 正确设置请求头模拟真实浏览器
这是核心解决点,Indeed会通过请求头里的字段判断请求是否来自爬虫。你用的是Safari+MacOS12.4,直接从Safari里复制真实请求头就行:
- 打开Safari开发者工具(快捷键
Cmd+Opt+I) - 访问Indeed官网,在Network标签里找任意一个请求,复制它的Request Headers
把这些头信息加到代码里,示例如下:
import requests from bs4 import BeautifulSoup # 替换成你从Safari复制的真实请求头 headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_4) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.4 Safari/605.1.15", "Accept-Language": "zh-CN,zh;q=0.9", "Referer": "https://www.indeed.com/", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8" } # 用Session保持会话,更贴近真实用户的访问模式 session = requests.Session() session.headers.update(headers) # 发起请求示例 target_url = "你的Indeed目标页面URL" response = session.get(target_url) soup = BeautifulSoup(response.text, "html.parser")
2. 控制请求频率,添加随机延迟
频繁请求肯定会触发反爬,建议在每次请求之间加随机延迟,模拟用户浏览间隔:
import time import random # 每次请求后随机等待2-5秒 time.sleep(random.uniform(2, 5))
3. 其他避坑建议
- 不要一次性爬太多页面,分批次进行,避免短时间内请求量过载
- 查看Indeed的
robots.txt(访问https://www.indeed.com/robots.txt),确保爬取内容在允许范围内 - 如果还是出现挂起,可以尝试更换代理IP,但要选可靠的代理,避免被检测到
调整后应该能解决请求挂起的问题——Indeed确实允许非商业性爬虫访问,但前提是要模拟真实用户的行为,别触发它的反爬阈值。
内容的提问来源于stack exchange,提问作者Yash
相关产品推荐
相关产品推荐

