【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
Python 网络爬虫入门:Spider man的第一课
- 写在最前面
- 背景知识介绍
- 蛛丝发射器——Request库
- 智能眼镜——Beautiful Soup库
- 第一课总结
写在最前面
有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。
前面有写一篇博客分享,但是内容感觉太浅显了
【一个超简单的爬虫demo】探索新浪网:使用 Python 爬虫获取动态网页数据
本期邀请了擅长爬虫的朋友@PoloWitty,来撰写这篇博客。通过他的专业视角和实战经验,一步步引导我们入门,成为一名数据探索的“Spider Man”。
【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
【Python网络爬虫入门教程2】成为“Spider Man”的第二课:观察目标网站、代码编写
随着互联网数据的指数级增长,了解如何有效地提取这些信息变得越来越重要。无论是文本模型如ChatGPT,还是视觉模型如Stable Diffusion,它们的训练数据大多来源于互联网的海量数据。在这个日新月异的大数据时代,爬虫也算是其中不得不点的一项基础技能树了。
本系列文章将深入浅出地介绍Python网络爬虫的基础知识和技术,从 Requests 库到 Scrapy 框架的 入门级 使用,为你开启python网络爬虫的大门,成为spider man的一员,并最终以ScrapeMe网站作为目标示例,爬取下网站上的可爱又有趣的宝可梦照片。
在开始之前,还要啰嗦几句叠个甲,网络爬虫虽然强大,但在使用时必须遵守法律法规和网站的爬虫协议。不违法爬取数据,遵守相关法律法规哦~

这是本系列的第一篇文章,将会介绍在编写网络爬虫的过程中需要了解的互联网前端背景知识,以及两个简洁易用的相关库的使用。
通过本教程,你将学会如何开始使用Python进行网络爬虫,从而在这个数据驱动的时代中,更好地利用可用的网络资源。我们期待看到你成为一名数据探索的“Spider Man”!
欢迎在评论分享在爬虫中遇到的问题,让我们一起讨论和学习!
背景知识介绍
要成功编写一个Python爬虫,关键在于对目标网站进行精确的定制化设计。同时,面对常见的反爬虫机制,你还需要具备应对策略的准备。Python爬虫的技能树广泛而深入,即使是最基础的爬虫,也涉及到HTML、CSS和JavaScript等前端知识。在此,我们将简要介绍这些基础知识,为你的爬虫之旅打下坚实的基础。
HTML是网页构建的骨架,通过各种标记语言来定义页面内容。比如<img>标签用来标记图像,<a>标签用来标记链接,而文本可以用<p>(段落)或者<h1>到<h6>(标题)来标记,在爬取的过程中就需要根据这些来对内容进行筛选。CSS则是美化大师,最常用的就是给HTML中的元素加上类名(class)来定义样式。比如,你可以给所有标题元素指定相同的样式,这样就能保持一致风格。
接下来是JS,它让页面动起来!一个常见的用法是使用document.getElementBy这类方法获取页面上的元素。比如,document.getElementById('someId')可以获取带有特定ID的元素,而document.getElementsByClassName('someClass')可以获取所有拥有相同类名的元素。通过这些方法,你能轻松捕获页面上的各种东西,让爬虫更精准地抓取你需要的信息!
当然,这里提到的都只是在编写爬虫的过程中可能最经常会用到的相关知识,如果想要获取更多相关内容,可以在网上搜索相关系列课程进行学习(比如菜鸟教程),这里就不再深入展开了。
接下来咱们来看看在编写爬虫过程中我们会用到的第一个库:request库。
蛛丝发射器——Request库
现在,咱们来谈谈requests库。requests库就像是蜘蛛侠的蛛丝发射器!想象一下,蜘蛛侠用蛛丝发射器轻松地抓住高楼大厦上的东西,requests库也能轻松地抓取网页上的数据!
就像蜘蛛侠能迅速把蛛丝射向目标一样,requests.get()方法能迅速向网站发出请求,抓取你想要的信息。而且,就像蜘蛛侠可以根据需要调整蛛丝的力度和角度一样,你也可以用requests库的不同参数调整请求,让它更适合你的需求!
有时候,你得给服务器点提示,告诉它你是谁。那就用requests的headers参数,就像是在门口留个便条一样。而且,如果你要往网站发送数据,比如登录信息或者表单内容,requests库也能搞定!
下面来举个例子实操一下:
import requests
import jsonurl = 'http://t.weather.sojson.com/api/weather/city/101010100'
response = requests.get(url) # 发送请求并得到返回结果obj = json.loads(response.text) # 加载获取的json格式数据
print(obj)
通过上面的代码,就可以利用天气api获取到北京市的天气。然后这个api返回的内容其实是个json格式的对象,我们可以使用json.loads()方法将其加载为一个python对象。
好了,学习到这里,你其实就已经可以利用request库和一些api服务设计出一些很炫酷的东西了hhh,比方说利用天气的api再加上一些网页的前端知识,你也可以自己做一个天气预报程序了 ^o^/
但是,如果有小伙伴尝试把上面的url换成https://www.baidu.com,可能就会发现response.text获取到的东西有点怪异。别慌!这是因为网页的内容以一种和平常不一样的编码形式展现出来了。
幸运的是,这时就该请出BeautifulSoup登场了!就像spider man的智能眼镜一样,BeautifulSoup库能帮你将那些乱七八糟的字符瞬间变成你看得懂的语言,让你轻松读懂网页的内容!
智能眼镜——Beautiful Soup库
当直接使用request库去请求https://www.baidu.com时,返回的其实是网页的文本表示,大家一般会使用DOM(文档对象模型)来对它进行解释。当你在浏览器中打开一个网页时,浏览器会下载网页的HTML、CSS和JavaScript文件,然后解析这些文件,构建成一个DOM树。这个树形结构代表了网页的层级结构,比如标题、段落、链接等等元素以及它们的嵌套关系。
而 Beautiful Soup就是专为网页解析设计的,它对于DOM(文档对象模型)树的解析简直游刃有余。用Beautiful Soup,你可以像操作树一样操作这个DOM树,轻松找到你想要的内容。比如,你可以用find()或find_all()方法按标签名或者类名查找元素,就像在树中找到特定类型的分支一样。
如果我们拿百度页面举例,假设你想找到其中所有的链接,现在就可以用类似这样的代码来进行实现:
import requests
from bs4 import BeautifulSoupurl = 'https://www.baidu.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')# 找到所有的链接
links = soup.find_all('a')# 输出所有链接的地址
for link in links:print(link.get('href'))
除了获取所有的链接,我们还可以利用bs4实现各种各样的功能,比方说,我们如果将上面的代码中的'a'替换成'img',将'href'替换成'src',我们便可以获取到百度页面中所有图片的链接,如果再利用request库对这些链接地址进行一下请求,我们就可以轻松的爬取下该页面下所有的图片了!
第一课总结
通过本系列教程的第一课,你应该已经了解到了使用python编写爬虫的一些基础知识,并且对于requests库和Beautiful Soup库有了一定的认识。利用本节课上学到的知识,你就已经可以编写一些简单的爬虫程序啦 ^ o^y
在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。
欢迎持续关注本系列课程!
简单的爬虫程序啦 ^ o^y
在下一课中,将会利用本堂课上学到的基础知识,使用requests库和Beautiful Soup库编写针对宝可梦图片的简单版爬虫程序。
欢迎持续关注本系列课程!
相关文章:
【Python网络爬虫入门教程1】成为“Spider Man”的第一课:HTML、Request库、Beautiful Soup库
Python 网络爬虫入门:Spider man的第一课 写在最前面背景知识介绍蛛丝发射器——Request库智能眼镜——Beautiful Soup库 第一课总结 写在最前面 有位粉丝希望学习网络爬虫的实战技巧,想尝试搭建自己的爬虫环境,从网上抓取数据。 前面有写一…...
燕千云汇联易联袂出击:护航医企合规,丝滑内外协作
👉 如想详细了解燕千云医药行业快速实施包(ITFA),可继续阅读详细内容: 文/玉娇龙 一. 医药行业数字化挑战 医药研发从基础研究到最终注册上市的整个生命周期长则需要10多年,短则需要6-7年,在漫长…...
【线性代数与矩阵论】Jordan型矩阵
Jordan型矩阵 2023年11月3日 #algebra 文章目录 Jordan型矩阵1. 代数重数与几何重数2. Jordan块与Jordan标准型2.1 最小多项式与Jordan标准型2.2 两类重要矩阵 3. 矩阵的Jordan分解3.1 Jordan分解的应用 下链 1. 代数重数与几何重数 在对向量做线性变换时,向量空间…...
laravel的ORM 对象关系映射
Laravel 中的 ORM(Eloquent ORM)是 Laravel 框架内置的一种对象关系映射系统,用于在 PHP 应用中与数据库进行交互。Eloquent 提供了一种优雅而直观的语法,使得开发者可以使用面向对象的方式进行数据库查询和操作。 定义模型&…...
049:VUE 引入jquery的方法和配置
第049个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…...
Qt设置类似于qq登录页面
头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QWindow> #include <QIcon> #include <QLabel> #include <QMovie> #include <QLineEdit> #include <QPushButton>QT_BEGIN_NAMESPACE namespace Ui { class…...
【GDB】
GDB 1. GDB调试器1.1 前言1.2 GDB编译程序1.3 启动GDB1.4 载入被调试程序1.5 查看源码1.6 运行程序1.7 断点设置1.7.1 通过行号设置断点1.7.2 通过函数名设置断点1.7.3 通过条件设置断点1.7.4 查看断点信息1.7.5 删除断点 1.8 单步调试1.9 2. GDB调试core文件2.1 设定core文件的…...
深入了解Java Duration类,对时间的精细操作
阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概6000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…...
Python:核心知识点整理大全5-笔记
目录 2. 使用方法pop()删除元素 3. 弹出列表中任何位置处的元素 4. 根据值删除元素 3 章 列表简介 3.3 组织列表 3.3.1 使用方法 sort()对列表进行永久性排序 3.3.2 使用函数 sorted()对列表进行临时排序 3.3.3 倒着打印列表 3.3.4 确定列表的长度 3.5 小结 2. 使用方…...
预训练(pre-learning)、微调(fine-tuning)、迁移学习(transfer learning)
预训练(pre-learning) 搭建一个网络模型来完成一个特定的图像分类的任务。首先,你需要随机初始化参数,然后开始训练网络,不断调整参数,直到网络的损失越来越小。在训练的过程中,一开始初始化的…...
王道数据结构课后代码题 p149 第8—— 12(c语言代码实现)
目录 8.假设二叉树采用二叉链表存储结构存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。 9.设树B是一棵采用链式结构存储的二叉树,编写一个把树 B中所有结点的左、右子树进行交换的函数。 10.假设二叉树采用二叉链存储结构存储…...
Nginx服务优化以及防盗链
1. 隐藏版本号 以在 CentOS 中使用命令 curl -I http://192.168.66.10 显示响应报文首部信息。 查看版本号 curl -I http://192.168.66.10 1. 修改配置文件 vim /usr/local/nginx/conf/nginx.conf http {include mime.types;default_type application/octet-stream;…...
20231210 随机矩阵和M矩阵
1. 非负矩阵:矩阵元素均非负 定义 7.1.1 设 A ( a i j ) ∈ R m n \boldsymbol{A}\left(a_{i j}\right) \in \mathbb{R}^{m \times n} A(aij)∈Rmn, 如果 a i j ⩾ 0 , i 1 , ⋯ , m ; j 1 , ⋯ , n , a_{i j} \geqslant 0, \quad i1, \cdots, m ; j1, \cd…...
Linux(centos)学习笔记(初学)
[rootlocalhost~]#:[用户名主机名 当前所在目录]#超级管理员标识 $普通用户的标识 Ctrlshift放大终端字体 Ctrl缩小终端字体 Tab可以补全命令 Ctrlshiftc/V复制粘贴 / :根目录,Linux系统起点 ls: #list列出目录的内容,通常用户查看…...
ECharts标题字体大小自适应变化
我们在做自适应Echarts的时候,字体大小在配置项里是如下配置的, title 标题组件,包含主标题和副标题。 以下是常用的对标题的设置: title:{//设置图表的标题text:"主标题",link:"baidu.com", //设置标题超链接target:"self",...
解决使用pnpm安装时Sharp模块报错的方法
在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…...
Redis 数据的持久化 RDB、AOF、RDB + AOF、No persistence 各自优缺点
文章目录 一、RDB (Redis Database)1.1 RDB 优势1.2 RDB 缺点1.3 RDB 如何工作1.4 RDB配置1.5 开启/关闭,RDB快照策略,save指令1.6 持久化硬盘文件,dbfilename指令1.7 持久化硬盘文件的存储地址,dir指令 二、AOF (Append Only Fil…...
回味童年经典游戏的项目
目录 1.超级玛丽2.坦克大战3.吃豆人游戏4.贪吃蛇游戏 1.超级玛丽 项目地址:超级马里奥游戏源码 在线试玩网址在资源描述中 在线试玩:http://martindrapeau.github.io/backbone-game-engine/super-mario-bros/index.html 主要语言:JavaScript…...
Electron[5] 渲染进程和主进程
1 进程 Electron里头的进程分为渲染进程和主进程。简单理解: main.js就是主进程每个页面就是渲染进程一个Electron应用仅有一个主进程,可以有多个渲染进程 上面的这些概念很重要,不展开细讲。 2 进程职责 主进程是用来实现应用的基础功能…...
基于Java SSM框架实现大学生校园兼职系统项目【项目源码+论文说明】
基于java的SSM框架实现大学生兼职系统演示 摘要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,大学生校园兼职系统当然也不能排除在外。大学生校园兼职系统是以实际运用为开…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...
DeepSeek 赋能智慧能源:微电网优化调度的智能革新路径
目录 一、智慧能源微电网优化调度概述1.1 智慧能源微电网概念1.2 优化调度的重要性1.3 目前面临的挑战 二、DeepSeek 技术探秘2.1 DeepSeek 技术原理2.2 DeepSeek 独特优势2.3 DeepSeek 在 AI 领域地位 三、DeepSeek 在微电网优化调度中的应用剖析3.1 数据处理与分析3.2 预测与…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
