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

Python使用BeautifulSoup爬取多URL仅返回最后结果的问题求助

解决多URL爬取仅返回最后一个结果的问题

常见原因及修复方案

1. 数据存储未做追加操作

如果循环中直接用赋值语句覆盖存储容器(比如列表),之前爬取的内容会被清空,只保留最后一次的结果。

错误示例:

all_titles = []
for url in url_list:
    current_titles = crawl_titles(url)
    all_titles = current_titles  # 直接赋值,覆盖原有内容

修复后:

all_titles = []
for url in url_list:
    current_titles = crawl_titles(url)
    all_titles.extend(current_titles)  # 用extend追加列表元素,单个元素用append

2. 爬虫对象状态未重置

如果使用Selenium这类需要浏览器实例的工具,循环中复用同一个driver可能导致页面内容未刷新,最终只抓取到最后一次加载的页面数据。

修复方案:

  • 每次循环结束后调用driver.refresh()刷新页面;
  • 或者在每个URL请求前新建driver实例(注意循环结束后调用driver.quit()释放资源);
  • 确保等待页面完全加载后再执行元素抓取(比如用WebDriverWait等待目标元素出现)。

3. 选择器适配性差

不同航空公司的页面结构可能存在差异,若选择器只适配最后一个URL的页面,前面的URL可能抓取不到内容,看起来像是只返回最后一个结果。

修复方案:

  • 逐个检查每个URL对应的页面DOM结构,调整选择器为通用规则;
  • 循环内打印当前URL的抓取结果数量,确认是未抓取到还是被覆盖。

4. 循环逻辑疏漏

比如URL列表未正确包含5个地址,或者循环变量未遍历整个列表。

修复方案:

  • 先打印url_list确认所有URL都在列表内;
  • 循环内添加打印当前处理URL的语句,确保每个地址都被遍历到。

示例完整代码(Python + requests + BeautifulSoup)

import requests
from bs4 import BeautifulSoup

# 替换为实际的5家航空公司评论页URL
url_list = [
    "https://airline-review-site.com/airline1",
    "https://airline-review-site.com/airline2",
    "https://airline-review-site.com/airline3",
    "https://airline-review-site.com/airline4",
    "https://airline-review-site.com/alaska-air"
]

all_titles = []
# 添加请求头避免被反爬
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
}

for url in url_list:
    print(f"正在处理: {url}")
    response = requests.get(url, headers=headers)
    # 检查请求是否成功
    if response.status_code != 200:
        print(f"请求失败: {url},状态码{response.status_code}")
        continue
    soup = BeautifulSoup(response.text, "html.parser")
    # 替换为实际页面中评论标题的选择器
    current_titles = [title.text.strip() for title in soup.select(".review-title-class")]
    print(f"抓取到{len(current_titles)}条标题")
    all_titles.extend(current_titles)

# 输出所有结果
print("\n所有评论标题汇总:")
for idx, title in enumerate(all_titles, 1):
    print(f"{idx}. {title}")

额外注意事项

  • 若页面是动态加载(比如滚动加载更多评论),需要改用Selenium或Playwright处理;
  • 频繁请求可能触发反爬,可添加随机延迟(time.sleep(random.uniform(1,3)));
  • 部分网站需要处理Cookie或登录状态,需在请求中携带对应参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:57:25