You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量爬取Smith圣经词典希伯来名字定义的技术问题

解决方法

原代码直接用soup.find('i')会匹配页面中无关的<i>标签,导致无法精准获取目标名字的定义。以下是优化后的实现方案:

优化后的代码

import requests
from bs4 import BeautifulSoup

smiths_names = {}
test = ["aaron", "abednego"]  # 替换为你的实际名字列表

for name in test:
    url = f"https://www.biblestudytools.com/dictionaries/smiths-bible-dictionary/{name}.html"
    try:
        page = requests.get(url)
        page.raise_for_status()  # 捕获HTTP请求错误(如404页面不存在)
        soup = BeautifulSoup(page.content, 'html.parser')
        
        # 先定位到包含目标名字的标题,再获取其后方的定义标签
        name_heading = soup.find('h1', string=lambda text: text and name.capitalize() in text)
        if name_heading:
            # 获取标题后第一个<i>标签(对应名字的定义)
            definition_tag = name_heading.find_next('i')
            if definition_tag:
                meaning = definition_tag.get_text(strip=True)
                smiths_names[name] = meaning
            else:
                print(f"{name} 的定义标签未找到")
        else:
            print(f"{name} 的页面标题未找到")
    except requests.exceptions.RequestException as e:
        print(f"请求 {name} 页面出错: {e}")

# 输出最终爬取结果
print(smiths_names)

核心调整说明

  • 精准元素定位:通过匹配包含目标名字的<h1>标题,再用find_next('i')锁定紧随其后的定义标签,避免抓取无关内容。
  • 循环内错误处理:将try-except放到循环内部,单个名字请求失败不会中断整个遍历流程。
  • HTTP错误捕获:添加raise_for_status(),主动抛出404、500等HTTP状态码错误,便于排查问题。

若目标页面结构发生变化,可根据实际HTML结构调整选择器(比如用类名定位容器:soup.find('div', class_='definition-container').find('i'))。

内容的提问来源于stack exchange,提问作者Glaikit7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 17:01:22