使用Python进行网络爬虫开发:从入门到实践

17分钟前 3阅读

随着互联网的发展,数据成为了最宝贵的资源之一。为了获取这些数据,网络爬虫(Web Scraping)技术应运而生。网络爬虫是一种自动化程序,能够模拟浏览器访问网页并提取所需信息的技术。本文将介绍如何使用 Python 编写一个简单的网络爬虫,并通过实际案例展示其应用。


什么是网络爬虫?

网络爬虫(Web Crawler 或 Web Scraper)是指自动抓取互联网上指定网站内容的程序。它可以广泛应用于数据分析、价格监控、新闻聚合、搜索引擎等领域。

⚠️ 注意:在进行网络爬虫时,请务必遵守目标网站的 robots.txt 文件规定和相关法律法规,尊重网站的版权与隐私政策。


Python 中常用的网络爬虫库

Python 提供了多个用于网络爬虫开发的第三方库:

requests:发送 HTTP 请求,获取网页源码。BeautifulSoup:解析 HTML 页面,提取数据。lxml:高效的 XML 和 HTML 解析器。Scrapy:功能强大的爬虫框架。Selenium:模拟浏览器操作,适用于 JavaScript 动态加载页面。

本文将以 requestsBeautifulSoup 为例,演示一个完整的网络爬虫实现过程。


实战项目:爬取豆瓣电影 Top250 数据

我们将编写一个 Python 爬虫程序,从 豆瓣电影 Top250 页面中提取每部电影的名称、评分、导演和年份等信息,并将其保存为 CSV 文件。

3.1 安装依赖库

首先确保你已安装以下库:

pip install requests beautifulsoup4 lxml

3.2 分析页面结构

打开豆瓣电影 Top250 页面,右键点击任意一部电影的标题,选择“检查”查看 HTML 结构。我们会发现每部电影的信息都包含在一个 <div class="item"> 标签内。

例如:

<div class="item">    <div class="pic">        <em class="">1</em>        <a href="...">            <img width="95" alt="肖申克的救赎" src="...">        </a>    </div>    <div class="info">        <div class="hd">            <a href="...">                <span class="title">肖申克的救赎</span>                ...            </a>        </div>        <div class="bd">            <p class="">                导演: 弗兰克·德拉邦特 Frank Darabont&nbsp;&nbsp;&nbsp;主演: 蒂姆·罗宾斯 Tim Robbins / 摩根·弗里曼 Morgan Freeman                <br>                1994&nbsp;/&nbsp;美国&nbsp;/&nbsp;剧情            </p>            <div class="star">                <span class="rating_num" property="v:average">9.3</span>                ...            </div>        </div>    </div></div>

我们可以从中提取:

电影名:.title年份:在 <p> 标签中的文本部分评分:.rating_num导演:在 <p> 标签中以“导演: ”开头的部分

3.3 编写代码

下面是一个完整的 Python 网络爬虫示例:

import requestsfrom bs4 import BeautifulSoupimport csvimport timeheaders = {    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0 Safari/537.36'}def get_movie_data(url):    response = requests.get(url, headers=headers)    if response.status_code != 200:        print(f"请求失败,状态码:{response.status_code}")        return []    soup = BeautifulSoup(response.text, 'lxml')    items = soup.find_all('div', class_='item')    movies = []    for item in items:        title = item.find('span', class_='title').text        rating = item.find('span', class_='rating_num').text        year_info = item.find('div', class_='bd').find('p').get_text(strip=True, separator=' ')        year = year_info.split('/')[0].strip()        # 提取导演        director = ''        p_text = item.find('div', class_='bd').find('p').text        if '导演:' in p_text:            director = p_text.split('导演:')[1].split(' ')[0]        movies.append({            'title': title,            'director': director,            'year': year,            'rating': rating        })    return moviesdef save_to_csv(data, filename='douban_top250.csv'):    with open(filename, mode='w', encoding='utf-8-sig', newline='') as f:        writer = csv.DictWriter(f, fieldnames=['title', 'director', 'year', '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):  # 总共10页,每页25条        url = base_url.format(i)        print(f'正在爬取第 {i // 25 + 1} 页:{url}')        movies = get_movie_data(url)        all_movies.extend(movies)        time.sleep(2)  # 避免请求频率过高被封IP    save_to_csv(all_movies)    print(f'总共爬取 {len(all_movies)} 部电影信息,已保存至 douban_top250.csv')if __name__ == '__main__':    main()

3.4 代码说明

requests.get():向目标 URL 发起 GET 请求。BeautifulSoup:用于解析 HTML 内容。csv.DictWriter:将字典格式的数据写入 CSV 文件。time.sleep(2):设置请求间隔,避免对服务器造成过大压力。headers:伪装成浏览器访问,防止被反爬机制识别。

结果展示

运行上述代码后,会在当前目录下生成一个名为 douban_top250.csv 的文件,内容如下:

titledirectoryearrating
肖申克的救赎弗兰克·德拉邦特19949.3
霸王别姬陈凯歌19939.6
阿甘正传罗伯特·泽米吉斯19949.5

你可以用 Excel 打开该文件查看爬取结果。


进阶方向

虽然本文实现的是静态页面爬虫,但在实际应用中,很多网站的内容是通过 JavaScript 动态加载的。此时可以考虑以下进阶方法:

使用 Selenium:模拟浏览器行为,适合动态渲染页面。调用 API 接口:有些网站提供公开 API,直接调用更高效。使用 Scrapy 框架:构建大型爬虫项目,支持异步、分布式等高级特性。处理反爬机制:如 IP 封锁、验证码识别、Cookie 登录等。

网络爬虫是一项非常实用的技术,尤其在数据驱动的时代,掌握这项技能可以帮助我们快速获取有价值的信息。通过本文的讲解与示例代码,相信你已经了解了如何使用 Python 实现一个基本的网络爬虫程序。

当然,爬虫只是数据获取的第一步,后续还需要结合数据分析、可视化等技术才能真正发挥数据的价值。

如果你对爬虫感兴趣,不妨尝试扩展这个项目,比如爬取更多字段、加入日志记录、异常处理等功能,甚至将其部署为一个定时任务服务。


参考链接:

Requests 官方文档BeautifulSoup 官方文档豆瓣电影 Top250

字数统计:约 1700 字

免责声明:本文来自网站作者,不代表CIUIC的观点和立场,本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。客服邮箱:ciuic@ciuic.com

目录[+]

您是本站第8667名访客 今日有21篇新文章

微信号复制成功

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