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

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序,用于从网站抓取数据。Python 凭借其丰富的库和简单的语法,是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识,并实现一个简单的爬虫项目。


1. 什么是网络爬虫?

网络爬虫(Web Crawler)是一种通过网络协议(如 HTTP/HTTPS)获取网页内容,并提取其中有用信息的程序。常见的爬虫用途包括:

  • 收集商品价格和评价。
  • 抓取新闻或博客内容。
  • 统计数据分析。

爬虫工作原理

  1. 发送 HTTP 请求到目标网站。
  2. 获取服务器返回的 HTML 页面。
  3. 解析 HTML 内容,提取所需数据。
  4. 保存数据以供后续使用。

2. 爬虫的基本工具

在 Python 中,我们可以使用以下工具和库来构建爬虫:

2.1 requests

requests 是一个强大的 HTTP 库,用于发送网络请求,获取网页内容。

安装:

pip install requests

示例:

import requests 
url = "https://example.com" 
response = requests.get(url) 
print(response.text) # 打印网页内容

2.2 BeautifulSoup

BeautifulSoup 是一个解析 HTML 和 XML 的库,用于从网页中提取数据。

安装:

pip install beautifulsoup4

示例:

from bs4 import BeautifulSouphtml = "<html><body><h1>Hello, World!</h1></body></html>"
soup = BeautifulSoup(html, "html.parser")
print(soup.h1.text)  # 输出 "Hello, World!"

2.3 pandas

pandas 是一个用于数据处理和分析的库,适合将爬取的数据保存到 CSV 或 Excel。

安装:

pip install pandas

示例:

import pandas as pddata = {"Title": ["Example"], "Link": ["https://example.com"]}
df = pd.DataFrame(data)
df.to_csv("output.csv", index=False)

3. 爬虫案例:抓取豆瓣电影排行榜

下面我们将构建一个爬虫,从豆瓣电影的网页抓取电影排行榜。

3.1 准备工作

目标网址: https://movie.douban.com/top250

我们将抓取以下信息:

  • 电影名称
  • 评分
  • 引言

3.2 代码实现

import requests
from bs4 import BeautifulSoup
import pandas as pd# 爬取一个页面的数据
def scrape_page(url):headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36"}response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, "html.parser")movies = []for item in soup.find_all("div", class_="item"):title = item.find("span", class_="title").textrating = item.find("span", class_="rating_num").textquote = item.find("span", class_="inq").text if item.find("span", class_="inq") else "N/A"movies.append({"Title": title, "Rating": rating, "Quote": quote})return movies# 主程序:爬取多页
def main():base_url = "https://movie.douban.com/top250?start={}"all_movies = []for i in range(0, 250, 25):  # 每页 25 部电影url = base_url.format(i)print(f"Scraping: {url}")movies = scrape_page(url)all_movies.extend(movies)# 保存为 CSV 文件df = pd.DataFrame(all_movies)df.to_csv("douban_top250.csv", index=False)print("Scraping complete! Data saved to douban_top250.csv")if __name__ == "__main__":main()

3.3 代码解析

  1. 设置请求头: 模拟浏览器访问,避免被反爬机制屏蔽。

  2. BeautifulSoup 提取内容: 使用 findfind_all 定位 HTML 标签,提取标题、评分和引言。

  3. 循环抓取多页: 构造分页 URL,逐页爬取。

  4. 保存为 CSV: 使用 pandas 将数据存储为 CSV 文件。


4. 运行与结果

运行程序后,将生成 douban_top250.csv 文件,内容如下:


5. 注意事项

5.1 遵守爬虫的礼仪

  1. 合理设置延迟: 在抓取页面时加入适当的延时,避免对服务器造成压力。

  2. 检查 robots.txt 访问目标网站的 https://example.com/robots.txt 查看允许抓取的内容。

  3. 请求头伪装: 使用 User-Agent 模拟浏览器访问。

5.2 反爬机制应对

如果遇到反爬机制,可以尝试:

  • 使用代理 IP。
  • 处理动态内容(如 JavaScript 加载的页面)。
  • 使用更高级的库如 seleniumPlaywright

6. 总结与扩展

通过本文,我们学习了使用 Python 构建基本爬虫的流程,并完成了一个抓取豆瓣电影 Top250 的项目。你可以将爬虫技术扩展到更复杂的应用场景,比如:

  • 动态加载数据的网站(如使用 seleniumrequests-html)。
  • 数据清洗与可视化(结合 pandasmatplotlib)。
  • 大规模爬取(结合分布式爬虫框架如 Scrapy)。

在实际应用中,记得遵守法律法规和网站的爬虫协议,合理使用网络爬虫技术!

相关文章:

Python 爬虫入门教程:从零构建你的第一个网络爬虫

网络爬虫是一种自动化程序&#xff0c;用于从网站抓取数据。Python 凭借其丰富的库和简单的语法&#xff0c;是构建网络爬虫的理想语言。本文将带你从零开始学习 Python 爬虫的基本知识&#xff0c;并实现一个简单的爬虫项目。 1. 什么是网络爬虫&#xff1f; 网络爬虫&#x…...

Java面试题、八股文——JVM篇最终篇

1.如何选择垃圾收集器&#xff1f; 选择合适的垃圾收集器&#xff08;Garbage Collector, GC&#xff09;对于优化Java应用程序的性能至关重要。不同的应用场景和系统需求可能需要不同类型的垃圾收集器来满足。以下是一些考虑因素以及常见的垃圾收集器选项&#xff0c;帮助您做…...

Spring Boot整合Redis Stack构建本地向量数据库相似性查询

Spring Boot整合Redis Stack构建本地向量数据库相似性查询 在微服务架构中&#xff0c;数据的高效存储与快速查询是至关重要的。Redis作为一个高性能的内存数据结构存储系统&#xff0c;不仅可以用作缓存、消息代理&#xff0c;还可以扩展为向量数据库&#xff0c;实现高效的相…...

shell脚本基础学习_总结篇(完结)

细致观看可以&#xff0c;访问shell脚本学习专栏&#xff0c;对应章节会有配图https://blog.csdn.net/2201_75446043/category_12833287.html?spm1001.2014.3001.5482 导语 一、shell脚本简介 1. 定义&#xff1a; 2. 主要特点&#xff1a; 3. shell脚本的基本结构 4. S…...

什么是 C++ 中的函数对象?它有什么特点?

在 C 中&#xff0c;函数对象&#xff08;Function Object&#xff09;是一种可调用对象&#xff0c;它允许像函数一样被调用&#xff0c;但实际上它可能并不是真正的函数。函数对象可以是以下几种类型之一&#xff1a; 普通函数&#xff1a; 一个普通的、定义在命名空间或类…...

css:项目

这是一个完整的网站制作的流程 美工会先制作一个原型图&#xff1a; 原型图写的不详细&#xff0c;就是体现一个网页大致的布局 然后美工再做一个psd样例图片 然后再交给程序员 项目 模块化开发&#xff1a;把代码的不同的样式封装起来&#xff0c;需要用到相同样式的标签就…...

macOS 开发环境配置与应用开发指南

macOS 开发环境配置与应用开发指南 macOS作为苹果公司推出的操作系统&#xff0c;因其稳定性、优雅的用户界面和强大的开发支持&#xff0c;已成为开发者和创意专业人士的首选平台之一。无论是开发iOS、macOS桌面应用&#xff0c;还是Web应用、跨平台程序&#xff0c;macOS都提…...

[A-19][V06]ARMv8/v9-内存虚拟化原理

ver0.2 [看前序文章有惊喜,关注W\X\G=Z+H=“浩瀚架构师”,可以解锁全部文章] 前言 前一篇文章,我们介绍了ARM内存的属性,算是一个小小的里程碑点,接下来我们会把注意力重新拉回虚拟化的赛道。我们从[V-05] 虚拟化基础-异常模型(Exception model)之后,花了很多笔墨介绍…...

registry 删除私有仓库镜像

原文链接&#xff1a;https://blog.csdn.net/yogima/article/details/122172744 如果需要彻底删除&#xff0c;只需进行register 磁盘删除镜像 彻底删除了&#xff0c;就可以到达彻底删除的目的。 如果只需要软删除&#xff0c;则只需进行通过API删除。 curl --header "Ac…...

UPLOAD LABS | UPLOAD LABS 靶场初识

关注这个靶场的其它相关笔记&#xff1a;UPLOAD LABS —— 靶场笔记合集-CSDN博客 0x01&#xff1a;UPLOAD LABS 靶场简介 UPLOAD LABS 靶场是一个专门用于学习文件上传漏洞攻击和防御的靶场。它提供了一系列文件上传漏洞的实验环境&#xff0c;用于帮助用户了解文件上传漏洞的…...

Samba服务器常见问题处理

指定的网络文件夹目前是以其他用户名和密码进行映射的。要用其他用户名和密码进行连接&#xff0c;首先请断开所有现有的连接到网络共享的映射 解决方案 单击“开始”菜单&#xff0c;选择“运行…”。 在弹出的窗口中&#xff0c;输入cmd 进入命令行模式&#xff0c;并输入…...

Java基础 设计模式——针对实习面试

目录 Java基础 设计模式单例模式工厂模式观察者模式策略模式装饰器模式其他设计模式 Java基础 设计模式 单例模式 单例模式&#xff08;Singleton Pattern&#xff09; 定义&#xff1a;确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问这个实例。适用场景&…...

最大公约数和最小公倍数-多语言

目录 C 语言实现 Python 实现 Java 实现 Js 实现 题目&#xff1a;输入两个正整数m和n&#xff0c;求其最大公约数和最小公倍数。 程序分析&#xff1a; 最小公倍数输入的两个数之积除于它们的最大公约数&#xff0c;关键是求出最大公约数&#xff1b; 求最大公约数用辗转…...

第三方数据库连接免费使用和安装

是强大的一体化数据库开发解决方案&#xff0c;可从单一应用程序无缝连接多个数据库&#xff0c;包括 MySQL、PostgreSQL、MongoDB、MariaDB、SQL Server、Oracle、SQLite 和 Redis。 下载&#xff1a;https://download.csdn.net/download/mo3408/90045937 升级特性 模型&…...

水库大坝安全监测之量水堰计应用

量水堰计是水库大坝安全监测系统中的一种关键设备&#xff0c;主要用于测量水库水位、流量等水力参数。以下是量水堰计在水库大坝安全监测中的应用及注意事项&#xff1a; 一、量水堰计的工作原理 量水堰计是一种专门用于测量水流流量的仪器&#xff0c;其工作原理主要基于水流…...

算法笔记:滑动窗口

前言 滑动窗口作为一个考点较高的算法&#xff0c;广泛应用于子串问题中&#xff0c;本文将进行详细讲解。 一、滑动窗口是什么 滑动窗口是双指针算法的一种&#xff0c;基本思路为维护一个窗口&#xff0c;然后从前往后遍历元素进行运算。 二、滑动窗口算法和其他双指针算…...

Ubuntu下的Graphviz的基础使用方法

一、Graphviz介绍 graphviz是贝尔实验室开发的一个开源的工具包&#xff0c;它使用一个特定的DSL(领域特定语言):dot作为脚本语言&#xff0c;然后使用布局引擎来解析此脚本&#xff0c;并完成自动布局 1、什么是Graphviz 官网地址&#xff0c;https://www.graphviz.org/ Gr…...

微积分复习笔记 Calculus Volume 1 - 6.8 Exponential Growth and Decay

6.8 Exponential Growth and Decay - Calculus Volume 1 | OpenStax...

React的ts文件中通过createElement拼接一段内容出来

比如接口返回一个值 const values [23.00, 40.00/kg];想做到如下效果&#xff0c; 如果单纯的用render渲染会很简单&#xff0c; 但是在ts文件中处理&#xff0c;所以采用了createElement拼接 代码如下&#xff1a; format: (values: string[]) > {if (!values || !val…...

Pinia之1:介绍Pinia、项目中引入Pinia

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

Git常用命令完全指南:从入门到精通

Git常用命令完全指南&#xff1a;从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...