Python爬取阿尔及利亚医疗网站数据为空问题求助
问题排查与修复方案
核心问题分析
你的代码生成空表,主要是元素查找的语法错误和类名/属性名拼写错误导致无法正确提取数据:
- 属性名写法错误:BeautifulSoup查找属性时无需加下划线,你写的
href_、itemprop_应改为href、itemprop - 类名拼写错误:专长标签的类名是
specialite,你写成了speciliate,导致无法匹配元素 - 固定href匹配错误:医疗人员类别链接的href并非统一为
/filter/type/me,固定匹配会漏掉大部分数据 - 缺少元素存在性判断:find方法找不到元素时返回
None,直接调用.text会触发报错,导致数据收集中断 - 缩进问题:原代码中
if块内的代码未正确缩进,这会引发语法错误(你能运行大概率是粘贴时格式混乱)
修正后的代码
import os import requests from bs4 import BeautifulSoup import pandas as pd URL = 'https://annumed.sante-dz.com/annuaire' response = requests.get(URL) if response.status_code == 200: soup = BeautifulSoup(response.content, 'html.parser') # 查找所有医疗人员信息容器 elements = soup.find_all('div', class_='element') professionnels = [] specialites = [] categories = [] adresses = [] # 遍历提取数据 for element in elements: # 提取姓名 nom = element.find('h3') professionnels.append(nom.text.strip() if nom else None) # 提取专长 spec = element.find('span', class_='tag specialite') specialites.append(spec.text.strip() if spec else None) # 提取类别(匹配tags区域的a标签) cat = element.find('div', class_='tags').find('a', class_='tag') categories.append(cat.text.strip() if cat else None) # 提取地址 addr = element.find('div', itemprop='addressLocality') adresses.append(addr.text.strip() if addr else None) # 构建DataFrame并保存 data = { 'Professionnel': professionnels, 'Spécialité': specialites, 'Catégorie': categories, 'Adresse': adresses } df = pd.DataFrame(data) save_path = r'C:\Users\LENOVO\Desktop\scraping_sante' os.makedirs(save_path, exist_ok=True) excel_filename = os.path.join(save_path, 'professionnels_sante.xlsx') df.to_excel(excel_filename, index=False) print(f"Données extraites et enregistrées dans {excel_filename}") else: print(f"La requête a échoué avec le code d'état : {response.status_code}")
额外说明
当前代码仅能提取网站第一页的数据,若需要爬取所有医疗人员信息,需分析分页链接的规律,循环请求每一页的URL并重复提取逻辑。
内容的提问来源于stack exchange,提问作者Wiam.07 Lazazi
相关产品推荐
相关产品推荐

