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

Python使用BeautifulSoup抓取div内容时无对应标签返回空值求助

Python爬虫提取网页指定字段的解决方案

问题根因

  • 结束日期未被独立HTML标签包裹,属于<div class="cd-info">下的原生文本节点,原有代码调用.string无法获取混合标签结构中的零散文本内容
  • 行程描述是当前div下的第二个<b>标签,原有代码仅提取了第一个<b>标签的内容作为开始日期,遗漏了第二个<b>节点

代码调整方案

你只需要修改遍历cruise_div的循环逻辑即可,调整后完整代码如下:

import requests
from bs4 import BeautifulSoup
import pandas as pd
import re # 新增导入正则模块,用于匹配日期格式

url = "https://www.cruisetimetables.com/cruisesearch.html?id=cse&sailmonth=Jul%202021&destination=Any&departureport=&arrivalport=&openjawcruise=&portofcall=&cruiseship=&duration=Any&chartercruise="
headers = {"Accept-Language": "en-US, en;q=0.5"}
results = requests.get(url, headers=headers)

soup = BeautifulSoup(results.text, "html.parser")

# 初始化数据存储
cruisestartdate = []
cruiseenddate = []
itinerarydescription = []
cruiseshipname = []

cruise_div = soup.find_all('div', class_='cd-info')

# 遍历每个容器提取字段
for container in cruise_div:
    # 提取所有b标签,分别对应开始日期、行程描述
    b_tags = container.find_all('b')
    # 1. 开始日期
    startdate = b_tags[0].text.strip()
    cruisestartdate.append(startdate)
    # 2. 结束日期:从div全部文本中正则匹配日期格式
    all_text = container.get_text(strip=False)
    end_match = re.search(r'To\s*(\w{3}\s\d{1,2}\s\w{3}\s\d{4})', all_text)
    enddate = end_match.group(1) if end_match else ''
    cruiseenddate.append(enddate)
    # 3. 行程描述
    itinerary = b_tags[1].text.strip()
    itinerarydescription.append(itinerary)
    # 4. 船舶名称
    ship = container.a.text.strip()
    cruiseshipname.append(ship)

# 构建DataFrame
cruise = pd.DataFrame({
    'Sail Date': cruisestartdate,
    'End Date': cruiseenddate,
    'Description': itinerarydescription,
    'Ship Name': cruiseshipname,
})

# 打印验证
print(cruise)

运行效果

调整后运行代码,即可正常输出四个字段的内容,对应你提供的示例HTML会得到如下结果:

  • 开始日期:Sat 31 Jul 2021
  • 结束日期:Fri 20 Aug 2021
  • 行程描述:20 Night New! Malta, The Adriatic & Greece
  • 船舶名称:Viking Sea

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 18:54:03