新手求助:使用BeautifulSoup与Python获取目标<th>标签内容时代码报错
解决你的BeautifulSoup提取问题
嘿,我来帮你搞定这个问题~先拆解你代码里的问题,再给你正确的实现方式:
为什么你的代码会报错?
findAll索引越界的原因:
你的HTML里只有两个width="10%"的<th>标签,soup.findAll('th',{'width':'10%'})返回的是包含这两个标签的列表,列表索引只有0和1。你直接取索引3,显然超出了列表长度,所以会抛出索引越界异常。find加索引的问题:soup.find('th',{'width':'10%'})返回的是单个Tag对象(第一个匹配的标签),而不是列表。你试图对这个Tag对象用[3]索引,这完全不是正确用法——你要的是标签里的文本内容,而非对Tag本身做索引操作,所以这也会报错。
正确的提取步骤
要拿到第一个width="10%"的<th>里的1365,分三步就行:
- 获取第一个匹配的
<th>标签 - 提取标签内的文本
- 从文本中分离出数字部分
完整代码示例
# 获取第一个width为10%的<th>标签 target_th = soup.find('th', {'width': '10%'}) # 提取标签的文本内容(得到"1365 m") th_text = target_th.text.strip() # 拆分文本,取第一个元素就是数字"1365" track_num = th_text.split()[0] # 输出结果 print('Track ' + track_num)
补充说明
- 如果HTML里可能有多个
width="10%"的<th>,但你确定要第一个,用find比findAll()[0]更直接。 - 提取数字也可以用正则表达式,比如
re.search(r'\d+', th_text).group(),这样即使文本格式有小变化,也能准确拿到数字。
内容的提问来源于stack exchange,提问作者Valek
相关产品推荐
相关产品推荐

