You need to enable JavaScript to run this app. 用BeautifulSoup爬取JSE官网仅返回1条新闻,如何定位HTML标签获取多条内容
优惠活动
大模型
产品
解决方案
定价
更多

用BeautifulSoup爬取JSE官网仅返回1条新闻,如何定位HTML标签获取多条内容

问题定位
  • 你当前遍历的div.view-content.row.row-flex是整个新闻区块的外层容器,整个页面该元素仅有1个,取[0:4]切片无意义,自然只能拿到1条数据
  • 原代码存在多处语法错误:headers格式错误、requests调用拼写错误、选择器参数缺逗号/引号未闭合、属性获取方法调用错误
  • 未正确传递请求头,存在被网站反爬拦截返回不完整页面的可能
修复后可批量抓取的代码
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/91.0.4472.101 Safari/537.36'
}

# 请求页面,传入请求头
source = requests.get('https://www.jse.co.za/', headers=headers).text
soup = BeautifulSoup(source, 'lxml')

# 直接定位所有新闻卡片元素,取前4条
for item in soup.find_all('div', class_='card')[:4]:
    # 提取标题
    text = item.find('h3', class_='card__title').text.strip()
    # 提取图片链接,拼接域名得到完整url
    img = item.find('img', class_='media__image')
    img_url = 'https://www.jse.co.za' + img['data-src']
    # 提取文章链接,拼接域名得到完整url
    link = item.find('a')
    article_link = 'https://www.jse.co.za' + link['href']
    
    print('Article Headline')
    print(text)
    print('IMAGE URL')
    print(img_url)
    print('LINK TO ARTICLE')
    print(article_link)
    print()
调整说明
  • 遍历对象改为所有新闻对应的div.card元素,直接取前4条即可拿到4条新闻数据
  • 修正了所有语法错误,请求头按要求格式传入,降低反爬拦截概率
  • 对相对路径的图片、文章链接拼接了主域名,返回的是可直接访问的完整URL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 07:54:05