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

如何抓取新闻标题、链接与图片?现有爬虫代码仅能获取标题且失效求方案

解决方法

问题分析

原代码仅定位了标题标签,未处理链接、图片的提取逻辑,同时verify=False存在安全风险,还可能被网站反爬机制拦截。

修正后的代码

import requests
import pandas as pd
from bs4 import BeautifulSoup

# 模拟浏览器请求头,规避基础反爬
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://news.mongabay.com/list/environment"
# 正常SSL验证,若遇证书问题可临时用verify=False(不推荐长期使用)
res = requests.get(url, headers=headers)
res.raise_for_status()  # 主动抛出请求失败异常,便于排查问题
soup = BeautifulSoup(res.content, 'html.parser')

# 定位单条新闻的父容器,统一提取关联信息
news_items = soup.find_all('div', class_='post-item')

news_data = []
for item in news_items:
    # 提取标题与链接
    title_link_tag = item.find('h2', class_='post-title-news').find('a')
    news_title = title_link_tag.get_text(strip=True)
    news_link = title_link_tag['href']
    # 处理相对路径,拼接完整URL
    if not news_link.startswith('http'):
        news_link = f"https://news.mongabay.com{news_link}"
    
    # 提取图片链接
    img_tag = item.find('img', class_='post-thumb')
    img_src = img_tag['src'] if img_tag else "无图片"
    if img_src and not img_src.startswith('http'):
        img_src = f"https://news.mongabay.com{img_src}"
    
    news_data.append({
        '标题': news_title,
        '链接': news_link,
        '图片链接': img_src
    })

# 转为DataFrame并导出为CSV
df = pd.DataFrame(news_data)
print(df)
df.to_csv('mongabay_environment_news.csv', index=False, encoding='utf-8-sig')

关键改进点

  • 添加User-Agent请求头,模拟真实浏览器访问,降低被反爬拦截的概率
  • 以新闻条目父容器为单位提取信息,确保标题、链接、图片的关联性
  • 处理相对路径,将站内链接拼接为完整可访问的URL
  • 新增请求状态校验,快速定位请求失败原因
  • 支持将抓取结果导出为CSV文件,方便后续数据整理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:05:32