首页 > 编程语言 >Python 网络爬虫入门教程

Python 网络爬虫入门教程

时间:2024-11-16 08:49:10浏览次数:3  
标签:rating title Python 入门教程 爬虫 item html find

引言

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

标签:rating,title,Python,入门教程,爬虫,item,html,find
From: https://blog.csdn.net/X2829352498/article/details/143811805

相关文章

  • 电波诡影 Python
    Pythora的天空永远闪烁着诡异的蓝色光芒,似乎有某种未知的能量在星球表面流动。秦煜抬起头,呆望着这片异样的天空已经有一会儿了。透过奇形怪状的植被的缝隙和漂浮的尘雾,几颗星星在闪烁的蓝光背景下若隐若现。自从上次的项目结束后,秦煜总觉得心绪不宁,尤其是在夜晚。空气中弥漫着一......
  • 【python系列】python数据类型之字符串
    1.前言字符串是编程中最常用的数据类型,这章需要针对字符串进行讲解。字符串的定义:字符串(英语:string),是由零个或多个字符组成的有限序列。——Wikipediapython官方文档:https://docs.python.org/zh-cn/3.10/library/stdtypes.html#text-sequence-type-str字符串是由Un......
  • 基于大数据 Python 歌曲筛选爬虫数据分析可视化系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • python课程设计图书管理系统
    带有登录以及功能两层结构的图书管理系统,具有管理员模式与普通用户模式users={'管理员':{'password':'123456','role':'admin'}}books={'明朝那些事儿':{'price':20,'information':'无'}}books_list=[]d......
  • 基于python+django的Spark的国漫推荐系统的设计与实现
    前言基于python+django的Spark国漫推荐系统能为国漫爱好者提供精准的内容推荐。系统先收集大量国漫数据,包括国漫名称、类型、作者、制作公司、评分、播放量、剧情简介、人物设定等信息。利用Spark的分布式计算能力对这些数据进行处理和存储。在用户方面,当新用......
  • 基于python+django的Hadoop的短视频数据分析的设计与实现
    前言基于python+django的Hadoop短视频数据分析系统可充分挖掘短视频数据价值。从各大短视频平台接口等多种数据源采集数据,利用Hadoop分布式存储海量短视频的基本信息、用户信息、播放量、点赞数、评论内容等。借助python数据分析库和django框架,清洗、预处理......
  • <QNAP 453D QTS-5.x> 日志记录:在 NAS 从 huggingface_hub 下载模型 google-t5/t5-base,在
    目的:离线使用 google-t5/t5-base预训练模型, 行多种自然语言处理任务:翻译可借不支持东亚语言。Project-22.Ai-1.T5-base只能在:  English,French,Romanian,German间使用,code非常简单,大概沾到本地/离线使用模型的皮毛。运行这么小的模型,也使我的笔记拔高了,硬件要......
  • 【Python入门】掌握Python的上下文管理:with-as 语句全解析
    ......
  • Python 中常用的格式符号
    Python中的格式化操作主要有以下几种方式:1.百分号`%`格式化常用格式符号2.`str.format()`方法3.f-string格式化(Python3.6+)f-string进阶用法1.百分号%格式化百分号格式化在Python中最早被用来格式化字符串,类似于C语言中的printf。它用%操......
  • 告别Print,使用IceCream进行高效的Python调试
    在Python开发实践中,调试是一个不可或缺的环节。如果采用print()语句来追踪程序执行流程,可能会遇到一个持续出现的异常情况,并且经过多次代码审查问题的根源仍然难以确定,这可能是因为随着终端输出信息的不断增加,这种调试方式的局限性逐渐显现。本文将介绍IceCream库,这个专门用于......