网页爬虫抓取AIA目录出现非页面内容及随机异常的问题求助
问题分析与解决方案
你的问题大概率是目标站点的反爬机制和解析逻辑不严谨共同导致的,下面具体拆解并给出解决办法:
核心原因
- 反爬触发导致返回异常内容:AIA站点可能识别到非浏览器请求,返回了与目标页面无关的HTML(比如空白页、通用模板页),这就会让你抓到不存在的公司名;添加
print(info)后恢复正常更可能是巧合——那次请求刚好没被拦截,而非代码本身的改变起了作用。 - 解析逻辑存在漏洞:直接用
soup.find('tbody')会全局查找<tbody>标签,如果页面其他位置有表格,就会抓到错误的内容;另外部分服务器返回的原始HTML里可能没有<tbody>(浏览器会自动补全该标签),这时候解析就会出现偏差。
具体解决步骤
- 补全请求头,模拟浏览器:requests默认请求头易被识别,添加浏览器标识等字段:
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', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' } page = requests.get(url + str(24), headers=headers) - 验证响应有效性:每次请求后先检查状态码,再打印响应内容片段确认是否为目标页面:
若状态码非200,或内容无公司列表相关关键词,说明已被反爬拦截。print(page.status_code) print(page.text[:500]) - 修正解析逻辑:通过找到的目标表格
info限定解析范围,避免抓取无关内容:if info: # 先判断目标表格是否存在 tbody = info.find('tbody') if tbody: for b in tbody.find_all('b'): firmName.append(b.get_text(strip=True)) # 去除文本多余空格 - 优化请求频率:改用随机延迟替代固定延迟,降低被识别为爬虫的概率:
import time import random # 每页请求后随机延迟2-7秒 time.sleep(random.uniform(2, 7)) - 排查动态加载可能性:若上述方法无效,说明页面是JS动态渲染的,需用
selenium或playwright模拟浏览器加载页面后再解析。
内容的提问来源于stack exchange,提问作者Justin Wagner
相关产品推荐
相关产品推荐

