为何使用BeautifulSoup获取维基表格的data-sort-value属性会返回None
爬取返回None列表的原因与修正方案
核心问题原因
- 存在BeautifulSoup接口参数误用:
find()方法的第二个位置参数是class属性筛选的快捷实现(适配Python中class为关键字的限制),你写的ligne.find("td", "data-sort-value")实际逻辑是查找class属性值为"data-sort-value"的<td>标签,并非查找带有data-sort-value自定义属性的目标标签,自然所有匹配结果为None。 - 存在表格定位偏差:直接抓取页面上第一个
wikitable类的表格时,该页面前部的wikitable多为沿革说明、统计备注类的非目标表格,就算参数正确也会定位错数据源。 - 遍历逻辑未跳过表头:表格第一行为表头行,仅包含
<th>表头元素,没有对应的数据<td>,遍历到该行时会返回None。
正确实现代码
import requests from bs4 import BeautifulSoup as bs res = requests.get("https://fr.wikipedia.org/wiki/Liste_des_communes_du_Pas-de-Calais") # 适配法语页面UTF-8编码,避免乱码 res.encoding = "utf-8" soup = bs(res.text, "html.parser") # 定位到带排序功能的人口数据目标表格 tableau = soup.find("table", class_="wikitable sortable") lignes = tableau.find_all("tr") population_list = [] # 跳过第一行表头数据 for ligne in lignes[1:]: # 匹配带有data-sort-value属性的单元格 target_cell = ligne.find("td", attrs={"data-sort-value": True}) # 过滤空值,避免None混入列表 if target_cell: pop_value = target_cell["data-sort-value"] population_list.append(pop_value) print(pop_value)
内容的提问来源于stack exchange,提问作者Anthony SULIO
相关产品推荐
相关产品推荐

