Python爬虫入门实战:爬取博客文章数据并保存
Python爬虫入门实战:爬取博客文章数据并保存
概述
本文将介绍如何使用Python的requests和BeautifulSoup库实现一个简单的网页爬虫,通过实际案例演示如何爬取博客文章数据并存储到本地文件。本文适合Python爬虫初学者,通过案例快速掌握基本爬虫开发流程。
一、环境准备
1.1 安装所需库
pip install requests beautifulsoup4
1.2 目标网站分析
我们以测试网站https://quotes.toscrape.com/
(专门用于爬虫练习的网站)为例,目标:
- 爬取所有页面的名人名言
- 提取内容、作者、标签信息
- 保存为CSV文件
二、代码实现
2.1 基础爬虫实现
import requests
from bs4 import BeautifulSoup
import csv
def get_page(url):
"""发送HTTP请求获取页面内容"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # 检查请求是否成功
return response.text
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
return None
def parse_page(html):
"""解析页面提取数据"""
soup = BeautifulSoup(html, 'lxml')
quotes = soup.find_all('div', class_='quote')
data = []
for quote in quotes:
text = quote.find('span', class_='text').get_text()
author = quote.find('small', class_='author').get_text()
tags = [tag.get_text() for tag in quote.find_all('a', class_='tag')]
data.append({
'text': text,
'author': author,
'tags': ', '.join(tags)
})
return data
def save_to_csv(data, filename='quotes.csv'):
"""保存数据到CSV文件"""
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['text', 'author', 'tags'])
writer.writeheader()
writer.writerows(data)
if __name__ == '__main__':
base_url = 'https://quotes.toscrape.com/page/{}/'
all_data = []
# 遍历所有页面(示例网站共有10页)
for page in range(1, 11):
url = base_url.format(page)
print(f"正在爬取第{page}页: {url}")
html = get_page(url)
if html:
page_data = parse_page(html)
all_data.extend(page_data)
save_to_csv(all_data)
print(f"数据已保存到quotes.csv,共爬取{len(all_data)}条数据")
三、核心功能解析
3.1 请求头设置
通过设置User-Agent模拟浏览器访问:
headers = {
'User-Agent': 'Mozilla/5.0 (...)'
}
3.2 数据解析
使用BeautifulSoup的find方法定位元素:
soup.find_all('div', class_='quote') # 定位所有名言区块
3.3 分页处理
通过观察URL规律实现翻页:
base_url = 'https://quotes.toscrape.com/page/{}/'
四、运行结果
生成的CSV文件示例:
text,author,tags
"The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.",Albert Einstein,change,deep-thoughts,thinking,world
"Try not to become a man of success. Rather become a man of value.",Albert Einstein,adulthood,success,value
...
五、注意事项
- 遵守robots协议:检查目标网站
/robots.txt
- 设置访问间隔:添加
time.sleep(2)
避免频繁请求 - 异常处理:增强代码健壮性
- 反爬应对:建议使用代理IP和随机User-Agent
六、扩展学习
- 动态网页爬取:Selenium/Playwright
- 异步爬虫:aiohttp
- 爬虫框架:Scrapy
- 数据存储:MySQL/MongoDB
总结
本文通过一个完整的爬虫案例,演示了从发送请求到数据存储的全流程。实际开发中需要根据目标网站结构调整解析逻辑,并始终遵守法律法规和网站规则。爬虫开发需要持续实践,建议从简单的静态网站开始逐步提升难度。
声明:本文仅用于技术学习交流,请勿用于非法用途。实际开发中请遵守目标网站的相关规定。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/57227.html
如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!