使用Python实现一个简单的Web爬虫

37分钟前 4阅读

在当今互联网时代,数据是企业决策、科研分析和产品优化的重要资源。为了获取这些数据,网络爬虫(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 的文件,内容如下:

titlerating
肖申克的救赎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

目录[+]

您是本站第16316名访客 今日有6篇新文章

微信号复制成功

打开微信,点击右上角"+"号,添加朋友,粘贴微信号,搜索即可!