1. 项目背景与目标
最近在帮朋友收集巴黎圣母院相关的新闻报道时,发现手动整理效率实在太低。作为一个刚入门Python的开发者,我决定用爬虫技术来解决这个问题。这个项目的主要目标是自动抓取主流新闻网站上关于巴黎圣母院的新闻报道,包括标题、发布时间、正文内容等关键信息。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型与工具准备
2.1 爬虫框架选择
经过对比几个主流Python爬虫框架后,我最终选择了Scrapy。原因有三:
- 完善的文档和社区支持
- 内置的异步处理机制
- 强大的中间件和管道系统
安装命令很简单:
bash复制pip install scrapy
2.2 辅助工具
- BeautifulSoup4:用于HTML解析
- Requests:处理HTTP请求
- Pandas:数据清洗和存储
3. 项目实现步骤
3.1 确定目标网站
选择新闻网站时需要考虑:
- 网站robots.txt的限制
- 页面结构的稳定性
- 内容的权威性
我最终选择了BBC、CNN和法新社三家国际媒体。
3.2 创建Scrapy项目
bash复制scrapy startproject notre_dame_news
cd notre_dame_news
scrapy genspider news_spider
3.3 编写爬虫核心代码
python复制import scrapy
from bs4 import BeautifulSoup
class NewsSpider(scrapy.Spider):
name = 'news_spider'
start_urls = [
'https://www.bbc.com/news',
'https://edition.cnn.com',
'https://www.afp.com'
]
def parse(self, response):
soup = BeautifulSoup(response.text, 'html.parser')
articles = soup.find_all('article')
for article in articles:
if 'Notre-Dame' in article.text:
yield {
'title': article.find('h3').text,
'date': article.find('time')['datetime'],
'content': article.find('div', class_='content').text,
'source': response.url
}
3.4 数据存储
我选择将数据保存为CSV格式:
python复制class CsvPipeline(object):
def open_spider(self, spider):
self.file = open('notre_dame_news.csv', 'w')
self.writer = csv.writer(self.file)
self.writer.writerow(['title', 'date', 'content', 'source'])
def process_item(self, item, spider):
self.writer.writerow([item['title'], item['date'], item['content'], item['source']])
return item
4. 常见问题与解决方案
4.1 反爬机制应对
- 设置合理的下载延迟:
python复制DOWNLOAD_DELAY = 2
- 使用随机User-Agent:
python复制USER_AGENTS = [
'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)'
]
4.2 数据清洗
新闻正文经常包含广告和无关内容,需要特殊处理:
python复制def clean_content(text):
# 移除广告标签
text = re.sub(r'<div class="ad.*?</div>', '', text)
# 移除多余空格
text = ' '.join(text.split())
return text
5. 项目优化建议
- 使用代理IP池应对IP封锁
- 添加异常处理机制
- 实现增量爬取功能
- 添加数据可视化模块
提示:在实际操作中,建议先从单个网站开始测试,确认爬取逻辑正确后再扩展到其他网站。
