使用BeautifulSoup爬取会员列表生成DataFrame时出现空表问题
爬虫空DataFrame问题排查与修复
问题说明
开发爬虫遍历会员列表页面,获取每个会员的kontaktinformationen页面联系信息并存储到Pandas DataFrame,但运行后得到空DataFrame。
核心问题排查
- 会员链接定位错误:原代码使用
soup.find_all("a", class_="font1")查找会员链接,但实际页面中会员名称链接的class为member-name,导致member_links为空列表,后续循环无法执行。 - 请求可能被拦截:未添加请求头(User-Agent),部分网站会拦截无标识的爬虫请求,导致无法正确获取页面内容。
- 联系信息区域定位错误:原代码查找
class="contact"的div,但实际页面中联系信息区域的class为contact-details。
修复后的代码
import requests from bs4 import BeautifulSoup import pandas as pd # 添加请求头模拟浏览器访问,避免被拦截 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" } url = "https://vvonet.vvo.at/vvonet_mitgliederverzeichnisneu" response = requests.get(url, headers=headers) if response.status_code == 200: soup = BeautifulSoup(response.content, "html.parser") # 修正会员链接的class定位 member_links = soup.find_all("a", class_="member-name") member_data = [] for member_link in member_links: member_name = member_link.text.strip() # 拼接正确的联系信息页面URL member_url = f"https://vvonet.vvo.at{member_link['href']}/kontaktinformationen" member_response = requests.get(member_url, headers=headers) if member_response.status_code == 200: member_soup = BeautifulSoup(member_response.content, "html.parser") # 修正联系信息区域的class定位 contact_info_div = member_soup.find("div", class_="contact-details") if contact_info_div: contact_info_text = contact_info_div.get_text(separator="\n", strip=True) # 同时存储会员名称和联系信息,提升数据可读性 member_data.append({"会员名称": member_name, "联系信息": contact_info_text}) else: member_data.append({"会员名称": member_name, "联系信息": "未找到联系信息"}) else: member_data.append({"会员名称": member_name, "联系信息": f"获取失败,状态码:{member_response.status_code}"}) # 创建结构化的DataFrame df = pd.DataFrame(member_data) print(df) # 可选:保存为CSV文件,指定编码避免乱码 # df.to_csv("会员联系信息.csv", index=False, encoding="utf-8-sig") else: print(f"获取会员列表失败,状态码:{response.status_code}")
优化说明
- 新增
User-Agent请求头,模拟浏览器访问规避反爬拦截; - 修正两处元素定位的class值,确保能正确抓取目标内容;
- DataFrame新增“会员名称”列,让数据结构更清晰;
- 补充请求状态码提示,便于排查单个会员页面的获取问题。
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

