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.textexcept 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.rhkb.cn/news/473549.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机编程中的设计模式及其在简化复杂系统设计中的应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的设计模式及其在简化复杂系统设计中的应用 计算机编程中的…

基于 CentOS7.6 的 Docker 下载常用的容器(MySQLRedisMongoDB),解决拉取容器镜像失败问题

安装MySQL&Redis&MongoDB mysql选择是8版本,redis是选择4版本、mongoDB选择最新版,也可以根据自己的需要进行下载对应的版本,无非就是容器名:版本号 这样去拉去相关的容器镜像。如果你还不会在服务器中安装 docker,可以查…

【分布式】万字图文解析——深入七大分布式事务解决方案

分布式事务 分布式事务是指跨多个独立服务或系统的事务管理,以确保这些服务中的数据变更要么全部成功,要么全部回滚,从而保证数据的一致性。在微服务架构和分布式系统中,由于业务逻辑往往会跨多个服务,传统的单体事务…

SystemVerilog学习笔记(十一):接口

在Verilog中,模块之间的通信是使用模块端口指定的。 Verilog模块连接的缺点 声明必须在多个模块中重复。存在声明不匹配的风险。设计规格的更改可能需要修改多个模块。 接口 SystemVerilog引入了 interface 结构,它封装了模块之间的通信。一个 inter…

ARM 汇编指令

blr指令的基本概念和用途 在 ARM64 汇编中,blr是 “Branch with Link to Register” 的缩写。它是一种分支指令,主要用于跳转到一个由寄存器指定的地址,并将返回地址保存到链接寄存器(Link Register,LR)中。…

pycharm分支提交操作

一、Pycharm拉取Git远程仓库代码 1、点击VCS > Get from Version Control 2、输入git的url,选择自己的项目路径 3、点击Clone,就拉取成功了 默认签出分支为main 选择develop签出即可进行开发工作 二、创建分支(非必要可以不使用&#xf…

【MySQL】优化方向+表连接

目录 数据库表连接 表的关系与外键 数据库设计 规范化 反规范化 事务一致性 表优化 索引优化 表结构优化 查询优化 数据库表连接 表的关系与外键 表之间的关系 常见表关系总结 一对一关系:每一条记录在表A中对应表B的唯一一条记录,反之也是&a…

【数据库】mysql数据库迁移前应如何备份数据?

MySQL 数据库的备份是确保数据安全的重要措施之一。在进行数据库迁移之前,备份现有数据可以防止数据丢失或损坏。以下是一套详细的 MySQL 数据库备份步骤,适用于大多数情况。请注意,具体的命令和工具可能因 MySQL 版本的不同而有所差异。整个…

mybatis 动态SQL语句

10. 动态SQL 10.1. 介绍 什么是动态SQL:动态SQL指的是根据不同的查询条件 , 生成不同的Sql语句. 官网描述:MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其它类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句的痛苦…

shell脚本_永久环境变量和字符串操作

一、永久环境变量 1. 常见的环境变量 2. 设置永久环境变量 3.1.将脚本加进PATH变量的目录中 3.2.添加进环境变量里 3.2.修改用户的 shell 配置文件 二、字符串操作 1. 字符串拼接 2. 字符串切片 3. 字符串查找 4. 字符串替换 5. 字符串大小写转换 6. 字符串分割 7…

【Go】-bufio库解读

目录 Reader和Writer接口 bufio.Reader/Writer 小结 其他函数-Peek、fill Reader小结 Writer Scanner结构体 缓冲区对于网络数据读写的重要性 Reader和Writer接口 在net/http包生成的Conn 接口的实例中有两个方法叫做Read和Write接口 type Conn interface {Read(b []b…

场景营销在企业定制开发 AI 智能名片 S2B2C 商城小程序中的应用与价值

摘要:本文深入剖析了品牌广告效果不佳与场景营销缺失之间的内在联系,阐述了场景营销对于品牌落地和转化的关键意义。同时,详细探讨了如何将场景营销理念与实践应用于企业定制开发的 AI 智能名片 S2B2C 商城小程序中,借助移动时代的…

uniapp 实现tabbar分类导航及滚动联动效果

思路&#xff1a;使用两个scroll-view&#xff0c;tabbar分类导航使用scrollleft移动&#xff0c;内容联动使用页面滚动onPageScroll监听滚动高度 效果图 <template><view class"content" ><view :class"[isSticky ? tab-sticky: ]">…

Flutter中的Material Theme完全指南:从入门到实战

Flutter作为一款热门的跨平台开发框架&#xff0c;其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用&#xff0c;包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例&#xff0c;让你轻松掌握这一工…

aws中AcmClient.describeCertificate返回值中没有ResourceRecord

我有一个需求&#xff0c;就是让用户自己把自己的域名绑定我们的提供的AWS服务器。 AWS需要验证证书 上一篇文章中我用php的AcmClient中的requestCertificate方法申请到了证书。 $acmClient new AcmClient([region > us-east-1,version > 2015-12-08,credentials>[/…

Oracle 19c PDB克隆后出现Warning: PDB altered with errors受限模式处理

在进行一次19c PDB克隆过程中&#xff0c;发现克隆结束&#xff0c;在打开后出现了报错&#xff0c;PDB变成受限模式&#xff0c;以下是分析处理过程 09:25:48 SQL> alter pluggable database test1113 open instancesall; Warning: PDB altered with errors. Elapsed: 0…

【3D Slicer】的小白入门使用指南九

定量医学影像临床研究与实践 任务 定量成像教程 定量成像是从医学影像中提取定量测量的过程。 本教程基于两个定量成像的例子构建: - 形态学:缓慢生长肿瘤中的小体积变化 - 功能:鳞状细胞癌中的代谢活动 第1部分:使用变化跟踪模块测量脑膜瘤的小体积变化第2部分:使用PET标…

二、神经网络基础与搭建

神经网络基础 前言一、神经网络1.1 基本概念1.2 工作原理 二、激活函数2.1 sigmoid激活函数2.1.1 公式2.1.2 注意事项 2.2 tanh激活函数2.2.1 公式2.2.2 注意事项 2.3 ReLU激活函数2.3.1 公式2.3.2 注意事项 2.4 SoftMax激活函数2.4.1 公式2.4.2 Softmax的性质2.4.3 Softmax的应…

VMWare虚拟机安装华为欧拉系统

记录一下安装步骤&#xff1a; 1.在vmware中创建一个新的虚拟机&#xff0c;步骤和创建centos差不多 2.启动系统 具体的看下图&#xff1a; 启动虚拟机 耐心等待 等待进度条走完重启系统就完成了

如何进入python交互界面

Python交互模式有两种&#xff1a;图形化的交互模式或者命令行的交互模式。 打开步骤&#xff1a; 首先点击开始菜单。 然后在搜索栏中输入Python&#xff0c;即可看到图形化的交互模式&#xff08;IDLE&#xff08;Python 3.7 64-bit&#xff09;&#xff09;与命令行的交互…