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 网络爬虫的基本原理和实现方法。希望这篇教程能够帮助你入门网络爬虫,并为后续的爬虫开发提供灵感。如果你对爬虫技术有更多兴趣,欢迎继续探索更高级的框架和工具!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风亦辰739

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值