如何用BeautifulSoup从超链接提取数字808?代码返回空列表求助
帮你搞定提取数字808的问题~
嘿,先看看你代码里的两个小问题:
- 你用
soup.findAll("div", ...)找的是div标签,但目标元素明明是<a>标签呀!这就难怪返回空列表了😅 - 就算找到标签,你还得从文本里把括号里的数字提出来,这一步也没做呢。
修正后的实现步骤
我给你梳理下正确的操作流程:
- 第一步:精准定位到目标
<a>标签,用soup.find()或soup.findAll()找a标签,class参数填"a-link-normal feedback-detail-description"。 - 第二步:从a标签的文本里提取括号里的数字,用正则或者字符串分割都能搞定。
代码示例(带详细注释)
import re from bs4 import BeautifulSoup # 假设你的HTML内容存在html变量里,比如你提供的这段: html = '<a class="a-link-normal feedback-detail-description" href="#"><b>100% positive</b> in the last 12 months (808 ratings)</a>' soup = BeautifulSoup(html, 'html.parser') # 先找到目标a标签 seller_feedback_a = soup.find("a", {"class": "a-link-normal feedback-detail-description"}) if seller_feedback_a: # 获取a标签的纯文本内容 feedback_text = seller_feedback_a.get_text(strip=True) # 用正则匹配括号里的数字 - 这种方式兼容性更强 num_match = re.search(r'\((\d+) ratings\)', feedback_text) if num_match: target_num = num_match.group(1) print(target_num) # 这里就会输出808啦 else: print("没找到括号里的数字哦") else: print("连目标a标签都没找到,检查下页面结构是不是变了?")
更简单的字符串分割方式(适合格式固定的情况)
如果确定文本格式不会变,也可以不用正则,直接分割字符串:
if seller_feedback_a: feedback_text = seller_feedback_a.get_text(strip=True) # 先按左括号分割,取后面的部分,再按空格分割取第一个元素 target_num = feedback_text.split('(')[1].split(' ')[0] print(target_num) # 同样输出808
补充提醒
如果页面里有多个这样的a标签,就把soup.find()换成soup.findAll(),然后循环遍历每个元素,重复上面的提取步骤就行啦。
内容的提问来源于stack exchange,提问作者Anatol Zakrividoroga
相关产品推荐
相关产品推荐

