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

为何使用BeautifulSoup无法将网站上的林肯名言全部抓取到列表中?

抓取亚伯拉罕·林肯名言失败的原因及解决方法

你遇到的核心问题是选择器匹配错误,同时缺少必要的请求头可能导致页面内容未正确加载,以下是具体分析和修复方案:

问题分析

  • 原代码使用的style_="display: flex;justify-content: space-between"选择器完全不匹配目标页面的名言元素,BrainyQuote的名言内容并未使用该样式的容器。
  • 未设置请求头标识,部分网站会对无标识的爬虫请求返回简化或空内容,导致BeautifulSoup无法解析到目标元素。

正确的页面结构与选择器

查看目标页面HTML结构可知:

  • 每条名言包裹在带有bqQt类的div标签中
  • 名言文本本身位于该div下的a标签内

修复后的代码

from bs4 import BeautifulSoup
import requests

# 添加请求头模拟浏览器访问,避免被反爬拦截
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
}

url = 'https://www.brainyquote.com/authors/abraham-lincoln-quotes'
req = requests.get(url, headers=headers, timeout=1000)
req.raise_for_status()  # 检查请求是否成功,避免解析错误内容

soup = BeautifulSoup(req.text, "html.parser")
# 精准定位所有名言容器
quote_containers = soup.find_all('div', class_='bqQt')
# 提取并清洗名言文本
lincoln_quotes = [container.find('a').text.strip() for container in quote_containers if container.find('a')]

print(lincoln_quotes)

补充说明

  • User-Agent请求头用于模拟正常浏览器访问,避免被网站识别为爬虫
  • 使用class_='bqQt'作为选择器,能精准定位到名言的容器元素
  • 列表推导式中加入判断,过滤掉可能存在的无效元素,确保结果纯净

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:47:41