使用Beautiful Soup爬取德国中小企业中心数据返回空列表求助
解决Python爬虫返回空列表的问题
核心问题排查与修复方案
1. 请求被网站拦截(缺失浏览器标识)
多数网站会拦截无User-Agent的请求,导致返回空页面或错误响应。需要给请求添加浏览器头模拟正常访问。
2. 元素选择器与页面结构不匹配
原代码中使用的div.linkblock、span.ort等选择器可能已失效,需重新核对目标页面的实际HTML结构。
3. 未处理元素为空的异常
直接调用.text.strip()会因元素不存在报错,需先判断元素是否存在再提取内容。
修改后的完整代码
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/114.0.0.0 Safari/537.36' } url = "https://www.mittelstand-digital.de/MD/Redaktion/DE/Artikel/Mittelstand-4-0/mittelstand-40-kompetenzzentren.html" # 发起请求并验证状态 response = requests.get(url, headers=headers) if response.status_code != 200: print(f"请求失败,状态码:{response.status_code}") exit() soup = BeautifulSoup(response.text, 'html.parser') themen_list = [] branchen_list = [] ort_list = [] ansprechpartner_list = [] # 按页面实际容器类提取数据(若原选择器失效,需根据页面结构调整) for center in soup.find_all('div', class_='teaser'): # 提取主题 themen = center.find('h3') themen_list.append(themen.text.strip() if themen else '无数据') # 提取行业领域 branchen = center.find('p', class_='text') branchen_list.append(branchen.text.strip() if branchen else '无数据') # 提取地点(若原ort类失效,替换为页面实际类名) ort = center.find('span', class_='location') ort_list.append(ort.text.strip() if ort else '无数据') # 提取联系人(若结构变化,调整选择器) ansprechpartner = center.find('span', class_='ansprechpartner') ansprechpartner_list.append(ansprechpartner.text.strip() if ansprechpartner else '无数据') # 整理数据并写入Calc表格 data = { 'Themen': themen_list, 'Branchen': branchen_list, 'Ort': ort_list, 'Ansprechpartner': ansprechpartner_list } df = pd.DataFrame(data) df.to_excel('kompetenzzentren.ods', index=False) print("数据已成功写入表格")
调试技巧
- 打印
soup.prettify()查看返回的HTML结构,确认选择器是否正确 - 单独测试选择器:比如先执行
print(soup.find_all('div', class_='linkblock')),检查是否能获取到目标元素 - 若页面为JS动态渲染,需改用Selenium替代requests抓取动态内容
内容的提问来源于stack exchange,提问作者zero
相关产品推荐
相关产品推荐

