豆包ai生成的网页抓取脚本失败,主因是网站结构变动、请求头缺失或未处理动态渲染;应依场景选用requests+bs4、selenium、反爬应对、json接口解析或结构化保存五种方法。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

如果您使用豆包AI生成网页数据抓取脚本,但实际运行时出现请求失败、解析异常或反爬拦截等问题,则可能是由于目标网站结构变动、请求头缺失或未处理动态渲染内容所致。以下是针对该场景的多种实现方法:
一、基础静态页面抓取(requests + BeautifulSoup)
适用于目标网页为纯HTML静态内容,无JavaScript渲染依赖,且无严格反爬机制。该方法通过模拟HTTP请求获取源码,再利用解析库提取指定标签内的文本或属性值。
1、在Python环境中安装依赖:pip install requests beautifulsoup4
2、编写脚本,设置User-Agent和Accept-Language请求头以降低被识别为爬虫的概率
立即进入“豆包AI人工智官网入口”;
立即学习“豆包AI人工智能在线问答入口”;
3、使用requests.get()发送GET请求,并检查响应状态码是否为200
4、用BeautifulSoup解析response.text,定位目标元素,例如soup.find_all('div', class_='content')
5、遍历提取结果,调用.get_text()或['href']等方法获取所需字段
二、处理JavaScript渲染页面(Selenium + ChromeDriver)
适用于目标网页内容由前端JavaScript动态加载,requests无法获取完整DOM结构的情况。该方法通过自动化浏览器真实执行页面脚本,等待元素加载完成后再进行解析。
1、安装selenium库:pip install selenium
2、下载与本地Chrome版本匹配的ChromeDriver,并配置其路径到系统PATH或代码中
3、初始化webdriver.Chrome()实例,设置options.add_argument('--headless')实现无界面运行
4、调用driver.get(url)访问目标页面,使用WebDriverWait配合expected_conditions等待关键元素出现
5、执行driver.find_element(By.CSS_SELECTOR, '.article-title').text提取可见文本内容
三、应对简单反爬策略(添加随机延迟与请求头轮换)
当目标网站通过请求频率或固定User-Agent识别爬虫时,该方法通过引入时间扰动和请求头多样性提升请求存活率。
1、导入time和random模块,在每次请求前执行time.sleep(random.uniform(1.5, 3.5))
2、准备包含多个主流浏览器标识的User-Agent列表,每次请求前随机选取一项
3、在headers字典中同步设置Referer、Accept-Encoding、Connection等字段,使其更接近真实用户行为
4、对requests.Session()对象复用连接,避免重复建立TCP握手开销
5、捕获requests.exceptions.RequestException异常,对失败请求最多重试两次并更换代理IP(若已配置)
四、解析JSON接口数据(逆向分析XHR请求)
适用于目标网站将核心数据通过AJAX异步加载,直接返回结构化JSON格式。该方法绕过HTML解析,从Network面板中定位真实数据接口,构造合法参数发起请求。
1、在浏览器开发者工具中切换至Network → XHR标签,刷新页面并筛选含关键词的请求
2、右键对应请求 → Copy → Copy as cURL,粘贴至curlconverter.com转换为Python requests代码
3、提取URL、method、headers及data参数,确认是否存在sign、timestamp等动态签名字段
4、若存在签名逻辑,需在豆包AI生成的代码基础上补充对应哈希计算步骤,例如hmac.new(key, msg, digestmod=sha256).hexdigest()
5、使用requests.post()提交参数,调用response.json()直接获取字典结构数据
五、保存结果至结构化文件(CSV与JSON双格式输出)
为便于后续分析与交接,该方法确保抓取结果可持久化存储,并兼容不同下游系统读取需求。
1、创建空列表用于暂存每条记录的字典对象,字段名与目标网页数据字段严格一致
2、使用csv.DictWriter写入CSV文件,设置encoding='utf-8-sig'避免Excel中文乱码
3、同时调用json.dump()将相同数据写入.json文件,ensure_ascii=False保留原始中文字符
4、对可能含特殊字符的字段(如HTML片段、换行符)做预处理:re.sub(r'[\r\n\t]+', ' ', field_value)
5、输出完成后打印共写入XX条有效记录,CSV与JSON文件均已生成











