Web Scraping无数据输出求助:CSV仅含表头无内容
问题排查与解决方法
1. 补全请求头,避免被网站拦截
网站通常会通过请求头识别爬虫,默认requests的请求头带有明显的Python标识,容易被拦截。添加模拟浏览器的请求头:
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 = requests.get(url, headers=headers)
2. 验证元素选择器是否匹配当前页面结构
可能网站页面已更新,原类名c-search-card不再有效。按以下步骤确认:
- 打开目标网页,按F12进入开发者模式
- 用元素选择工具点击车辆卡片,查看其实际HTML标签和类名
- 如果类名变化,修改
soup.find_all("div", class_="c-search-card")中的类名参数
3. 检查页面是否为动态渲染
如果车辆数据是通过JavaScript动态加载的,requests只能获取静态HTML,无法拿到实际数据。解决方式:
- 用开发者工具的「网络」标签,筛选XHR/fetch请求,找到加载车辆数据的接口,直接请求接口获取JSON数据解析
- 或者使用
selenium、playwright等工具模拟浏览器加载页面
4. 加调试输出定位问题
在代码中添加打印语句,逐步确认每一步是否正常:
def scrape_cars(url): 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 = requests.get(url, headers=headers) print(response.status_code) # 确认请求是否成功(200为正常) print(len(soup.find_all("div", class_="c-search-card"))) # 确认是否找到车辆卡片 # 其余字段添加判断,避免找不到元素报错 for car_div in soup.find_all("div", class_="c-search-card"): car = {} title_elem = car_div.find("h2") car["title"] = title_elem.text.strip() if title_elem else "" # 其他字段同理处理... cars.append(car) return cars
内容的提问来源于stack exchange,提问作者noone
相关产品推荐
相关产品推荐

