当前位置: 首页 > article >正文

Python 网络爬虫入门教程

引言

网络爬虫(Web Crawler)是一种通过编程从互联网上抓取数据的技术,常用于数据分析、信息采集等任务。Python 作为一门功能强大且易于使用的编程语言,拥有丰富的爬虫库和工具,如 RequestsBeautifulSoupScrapy,使得网络爬虫的开发变得更加高效便捷。

本文将以一个简单的实例,介绍如何利用 Python 编写一个基本的网络爬虫,抓取网页上的内容。


一、网络爬虫的基本流程

网络爬虫通常包含以下几个步骤:

  1. 发送请求:通过 HTTP 请求获取目标网页的 HTML 源代码。
  2. 解析数据:提取网页中有用的信息,如文本、链接、图片等。
  3. 存储数据:将提取到的数据保存到文件或数据库中,方便后续处理。

二、实现一个简单的网络爬虫

我们以爬取豆瓣电影 Top250 的电影信息为例,抓取电影的标题、评分和评价人数。

2.1 准备工作

在开始之前,请确保安装以下库:

pip install requests beautifulsoup4 lxml

2.2 代码实现

以下是实现爬虫的完整代码:

import requests
from bs4 import BeautifulSoup
import csv

# 目标 URL
BASE_URL = "https://movie.douban.com/top250"

# 获取网页内容
def fetch_page(url):
    try:
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
        }
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # 如果请求失败会抛出异常
        return response.text
    except requests.RequestException as e:
        print(f"Error fetching {url}: {e}")
        return None

# 解析 HTML 并提取数据
def parse_html(html):
    soup = BeautifulSoup(html, "lxml")
    movie_list = []
    
    for item in soup.find_all("div", class_="item"):
        title = item.find("span", class_="title").text.strip()
        rating = item.find("span", class_="rating_num").text.strip()
        reviews = item.find("div", class_="star").find_all("span")[-1].text.strip()
        movie_list.append({
            "title": title,
            "rating": rating,
            "reviews": reviews
        })
    return movie_list

# 保存数据到 CSV 文件
def save_to_csv(data, filename="movies.csv"):
    with open(filename, mode="w", newline="", encoding="utf-8") as file:
        writer = csv.DictWriter(file, fieldnames=["title", "rating", "reviews"])
        writer.writeheader()
        writer.writerows(data)
    print(f"Data saved to {filename}")

# 主函数
def main():
    movies = []
    for start in range(0, 250, 25):  # 每页包含25部电影
        url = f"{BASE_URL}?start={start}"
        print(f"Fetching {url}...")
        html = fetch_page(url)
        if html:
            movies.extend(parse_html(html))
    
    save_to_csv(movies)

if __name__ == "__main__":
    main()

三、代码解读

3.1 发送请求

使用 requests 库的 get 方法发送 HTTP 请求。通过设置 User-Agent 模拟浏览器访问,避免被目标网站识别为爬虫:

response = requests.get(url, headers=headers)

3.2 解析 HTML

利用 BeautifulSoup 解析 HTML,提取所需的信息:

soup = BeautifulSoup(html, "lxml")

通过 CSS 选择器找到电影标题、评分和评价人数:

title = item.find("span", class_="title").text.strip()
rating = item.find("span", class_="rating_num").text.strip()
reviews = item.find("div", class_="star").find_all("span")[-1].text.strip()

3.3 存储数据

将提取到的数据保存到 CSV 文件中,便于后续分析:

with open(filename, mode="w", newline="", encoding="utf-8") as file:
    writer = csv.DictWriter(file, fieldnames=["title", "rating", "reviews"])
    writer.writeheader()
    writer.writerows(data)

四、运行结果

运行代码后,程序将抓取豆瓣电影 Top250 的数据,并保存在 movies.csv 文件中。打开文件可以看到以下内容:

TitleRatingReviews
肖申克的救赎9.72145323人评价
霸王别姬9.61578122人评价
阿甘正传9.61894831人评价

五、注意事项

  1. 合法性与网站政策:在爬取数据前,请确保遵守目标网站的 robots.txt 文件以及相关法律法规。
  2. 反爬机制:有些网站可能会检测并限制频繁访问,可通过设置随机延迟、代理 IP 或其他方法绕过。
  3. 数据清洗:爬取的数据可能需要进一步清洗和处理,确保其适合后续分析。

六、进阶与扩展

如果希望构建更加复杂和高效的爬虫,可以尝试以下技术:

  1. Scrapy 框架:适合大规模爬取任务,支持分布式爬取和异步处理。
  2. Selenium:用于爬取动态加载内容的网页。
  3. 多线程与异步爬取:提高爬取效率,如 concurrent.futuresasyncio

七、总结

本文通过一个爬取豆瓣电影 Top250 的实例,详细介绍了 Python 网络爬虫的基本原理和实现方法。希望这篇教程能够帮助你入门网络爬虫,并为后续的爬虫开发提供灵感。如果你对爬虫技术有更多兴趣,欢迎继续探索更高级的框架和工具!


http://www.kler.cn/a/399410.html

相关文章:

  • Python绘制雪花
  • 如何使用正则表达式验证域名
  • MySQL中将一个字符串字段按层级树状展开
  • RTSP播放器EasyPlayer.js播放器UniApp或者内嵌其他App里面webview需要截图下载
  • DB Type
  • C++builder中的人工智能(27):如何将 GPT-3 API 集成到 C++ 中
  • 15分钟学 Go 实战项目五 :简单电子商务网站(3W字完整例子)
  • 足球青训俱乐部管理后台系统(程序+数据库+报告)
  • Spring Boot 2.x 和 Druid 多数据源整合 dm
  • 【C语言】科技要闻。
  • 构建SSH僵尸网络
  • 什么是 C++ 内联函数?它的作用是什么?内联函数与普通函数有什么区别?如何定义和使用内联函数?
  • QSS 设置bug
  • 【资料】网络安全风险评估报告,风险管理报告,网络安全风险管理计划,网络安全网络安全能力验证报(Word原件)
  • 当API遇上“交通堵塞”:处理API限制的艺术
  • C++ 编程基础(7)内存模型 | 7.1、内存类型
  • Go语言24小时极速学习教程(五)Go语言中的SpringMVC框架——Gin
  • 已有账号,重装系统激活office后发现没有ppt,word,excel等
  • 使用 Vue 和 Create-Vue 构建工程化前端项目
  • androidstudio入门到放弃配置
  • 安装一键式重置密码插件(Linux)-CloudResetPwdAgent
  • java ssm 健康医馆管理系统 中医馆管理 健康平台 药店 源码jsp
  • 网络百问百答(一)
  • 在MATLAB中实现自适应滤波算法
  • Prometheus面试内容整理-实践经验
  • ssh.service could not be found“