如何从类名相同的HTML块中提取图书出版年份字段值?
解决方案
核心思路是遍历所有图书信息块,匹配出版年份对应的标题后再取值,修改get_content函数逻辑即可:
修改后的代码
def get_content(html): years = [] soup = BeautifulSoup(html, "html.parser") # 先拿到左侧详情容器 details_container = soup.find("div", class_="book__details-left") # 获取所有信息条目块,注意这里用find_all而不是find detail_items = details_container.find_all("dl", class_="book__details-item") for item in detail_items: # 提取当前条目的名称,strip去掉首尾空白符避免空格导致匹配失败 item_name = item.find("dt", class_="book__details-name").get_text(strip=True) # 匹配出版年份的标题 if item_name == "Год издания:": # 提取对应值 item_value = item.find("dt", class_="book__details-value").get_text(strip=True) years.append(item_value) # 匹配到后可以break跳出循环,避免不必要的遍历 break # 原来的代码没有返回值,这里补充返回结果给上层调用 return years
原有代码的问题说明
- 错误使用
find方法,仅能匹配到第一个book__details-item块(对应出版地点信息),无法命中后续的出版年份块 - 没有做标题匹配逻辑,无法定位到出版年份对应的条目
- 函数没有返回值,上层
parse函数无法拿到采集结果
注:你提供的HTML片段末尾有一段未被
dl标签包裹的重复出版年份节点,属于不规范的HTML结构,正常上线的站点不会出现这类问题,如果实际采集时遇到这种情况,可以额外对容器下直接挂的dt标签做补充遍历匹配。
内容的提问来源于stack exchange,提问作者CMDR_Mark
相关产品推荐
相关产品推荐

