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

如何用BeautifulSoup遍历搜索结果列表并提取指定信息?

解决方案

首先,你用find_all得到的ordered_list是一个列表,需要先获取到具体的目标有序列表元素,再遍历其中的每个结果项(<li>)来提取信息。以下是完整的实现代码:

result = session.get(url)
soup = BeautifulSoup(result.text, 'html.parser')
# 获取目标有序列表(取第一个匹配的ol元素)
search_results_ol = soup.find_all('ol', class_='searchResults')[0]
# 初始化目标格式的容器
output = {
    'title': [],
    'link': [],
    'description': [],
    'timestamp': []
}

# 遍历每个结果项
for li in search_results_ol.find_all('li'):
    # 提取标题与链接
    a_tag = li.find('a')
    if a_tag:
        output['title'].append(a_tag.get_text(strip=True))
        output['link'].append(a_tag['href'])
    else:
        # 处理无匹配元素的情况,避免报错
        output['title'].append(None)
        output['link'].append(None)
    
    # 提取描述,无描述时使用默认文本
    desc_tag = li.find('p', class_='description')
    output['description'].append(desc_tag.get_text(strip=True) if desc_tag else 'No description provided')
    
    # 提取时间戳:优先取li的data-timestamp属性,无属性则取页面显示的时间文本
    timestamp = li.get('data-timestamp')
    if not timestamp:
        time_tag = li.find('span', class_='timestamp')
        timestamp = time_tag.get_text(strip=True) if time_tag else None
    output['timestamp'].append(timestamp)

# 输出结果
print(output)

关键步骤说明

  1. 获取目标列表:find_all返回所有匹配的<ol>元素,这里取第一个([0]),如果页面有多个同类型列表,需要根据实际情况调整筛选条件。
  2. 遍历结果项:通过search_results_ol.find_all('li')获取所有结果条目,逐个处理。
  3. 信息提取:
    • 标题和链接从条目内的<a>标签提取,get_text(strip=True)会自动去除文本前后的空格;
    • 描述优先查找对应的<p>标签,找不到时使用你指定的默认文本;
    • 时间戳优先读取<li>的data-timestamp属性(更准确的原始数据),如果没有则提取页面显示的时间文本。

如果实际HTML结构中的标签类名或层级和代码假设的不同,只需调整find方法的参数即可(比如修改描述标签的类名、时间戳元素的选择器)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:22:42