使用Python实现一个简单的Web爬虫
在当今互联网时代,数据是企业决策、科研分析和产品优化的重要资源。为了获取这些数据,网络爬虫(Web Crawler)成为了一个非常重要的工具。本文将介绍如何使用 Python 实现一个简单的 Web 爬虫,并从中提取感兴趣的数据。
我们将使用以下技术栈:
Requests:用于发送 HTTP 请求。BeautifulSoup:用于解析 HTML 页面内容。CSV:将爬取的数据保存为 CSV 文件。环境准备
首先,确保你已经安装了 Python 3.x。然后安装所需的库:
pip install requests beautifulsoup4
基本概念
1. 什么是 Web 爬虫?
Web 爬虫是一种自动抓取网页内容的程序,通常用于搜索引擎、数据挖掘、价格监控等领域。
2. 抓取流程
向目标网站发送请求;接收并解析响应中的 HTML 内容;提取所需信息;存储数据或继续访问链接。实战:爬取豆瓣电影 Top 250 的标题与评分
我们以豆瓣电影 Top 250 页面为例,爬取每部电影的名称和评分。
1. 分析页面结构
打开 https://movie.douban.com/top250,使用浏览器开发者工具查看 HTML 结构。
我们可以发现:
每个电影条目包含在一个<div class="item">
中;电影名称位于 <span class="title">
标签中;评分在 <span class="rating_num">
标签中。2. 编写代码
import requestsfrom bs4 import BeautifulSoupimport csvdef fetch_page(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } response = requests.get(url, headers=headers) if response.status_code == 200: return response.text else: print(f"请求失败,状态码:{response.status_code}") return Nonedef parse_html(html): soup = BeautifulSoup(html, 'html.parser') movies = [] for item in soup.find_all('div', class_='item'): title = item.find('span', class_='title').text rating = item.find('span', class_='rating_num').text.strip() movies.append({ 'title': title, 'rating': rating }) return moviesdef save_to_csv(data, filename='douban_top250.csv'): with open(filename, mode='w', encoding='utf-8-sig', newline='') as file: writer = csv.DictWriter(file, fieldnames=['title', 'rating']) writer.writeheader() writer.writerows(data)def main(): base_url = 'https://movie.douban.com/top250?start={}' all_movies = [] for i in range(0, 250, 25): # 豆瓣每页显示25条数据 url = base_url.format(i) print(f'正在抓取第 {i // 25 + 1} 页:{url}') html = fetch_page(url) if html: movies = parse_html(html) all_movies.extend(movies) save_to_csv(all_movies) print(f'成功抓取 {len(all_movies)} 部电影信息,并已保存到 douban_top250.csv')if __name__ == '__main__': main()
3. 代码说明
fetch_page(url)
:发送 GET 请求获取页面内容;parse_html(html)
:使用 BeautifulSoup 解析 HTML,提取电影名称和评分;save_to_csv(data)
:将结果保存为 CSV 文件;main()
:主函数控制整个流程,循环抓取所有页面。运行结果
运行上述脚本后,会在当前目录生成一个名为 douban_top250.csv
的文件,内容如下:
title | rating |
---|---|
肖申克的救赎 | 9.7 |
霸王别姬 | 9.6 |
阿甘正传 | 9.5 |
... | ... |
注意事项
遵守 Robots 协议:爬取前应检查目标网站的 robots.txt 文件,避免非法抓取。设置 User-Agent:伪装成浏览器访问,防止被反爬机制识别。设置请求间隔:建议每次请求之间加个time.sleep()
延时,减轻服务器压力。异常处理:添加重试机制、超时处理等增强稳定性。扩展功能
你可以在此基础上进行更多扩展,例如:
添加翻页逻辑自动判断是否还有下一页;抓取电影海报图片并下载;将数据存储到数据库(如 MySQL、MongoDB);使用 Scrapy 框架构建更强大的爬虫系统。总结
本文通过一个完整的示例,介绍了如何使用 Python 构建一个基础但实用的 Web 爬虫系统。掌握了 Requests 和 BeautifulSoup 这两个强大而灵活的工具后,你可以轻松地从各种网页中提取所需数据。
随着经验的积累,你还可以尝试使用更高级的框架如 Scrapy 或 Selenium 来应对复杂的网页结构和动态加载内容。
如果你对 Web 爬虫感兴趣,欢迎继续深入学习相关知识,比如异步爬虫、代理 IP 使用、模拟登录等进阶技巧!
免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com