如何抓取新闻标题、链接与图片?现有爬虫代码仅能获取标题且失效求方案
解决方法
问题分析
原代码仅定位了标题标签,未处理链接、图片的提取逻辑,同时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
相关产品推荐
相关产品推荐

