【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库的不同参数调整请求,让它更适合你的需求!

有时候,你得给服务器点提示,告诉它你是谁。那就用requestsheaders参数,就像是在门口留个便条一样。而且,如果你要往网站发送数据,比如登录信息或者表单内容,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库编写针对宝可梦图片的简单版爬虫程序。

欢迎持续关注本系列课程!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/212307.shtml

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

相关文章

论文阅读——Deformable ConvNets v2

论文&#xff1a;https://arxiv.org/pdf/1811.11168.pdf 代码&#xff1a;https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch 1. 介绍 可变形卷积能够很好地学习到发生形变的物体&#xff0c;但是论文观察到当尽管比普通卷积网络能够更适应物体形变&#xff…

Numpy数组的去重 np.unique()(第15讲)

Numpy数组的去重 np.unique()(第15讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

Linux权限详解

Linux权限 文章目录 Linux权限一、root账号与普通账号二、Linux权限管理三、权限权值表示方法四、文件访问权限的设置方法五、粘滞位六、权限总结 前言&#xff1a; 我们在学习Linux的时候&#xff0c;我们知道在Linux下一切皆文件&#xff0c;而不同的文件对于不同的用户有不同…

第二十一章总结。。

计算机网络实现了堕胎计算机间的互联&#xff0c;使得它们彼此之间能够进行数据交流。网络应用程序就是再已连接的不同计算机上运行的程序&#xff0c;这些程序借助于网络协议&#xff0c;相互之间可以交换数据&#xff0c;编写网络应用程序前&#xff0c;首先必须明确网络协议…

掌握iText:轻松处理PDF文档-基础篇

关于iText iText是一个强大的PDF处理库&#xff0c;可以用于创建、读取和操作PDF文件。它支持PDF表单、加密和签署等操作&#xff0c;同时支持多种字体和编码。maven的中央仓库中的最新版本是5.X&#xff0c;且iText5不是完全免费的&#xff0c;但是基础能力是免费使用的&…

2023-12-10 LeetCode每日一题(爬楼梯)

2023-12-10每日一题 一、题目编号 70. 爬楼梯二、题目链接 点击跳转到题目位置 三、题目描述 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 示例 2&#xff1a; 提…

gin投票系统2

投票系统 数据库的建立 先分析需求&#xff0c;在sql中建立数据库&#xff0c;关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表” 成功后目前有四个表&#xff1a; vote&#xff0c;user&#xff0c;vote_opt,vote_opt_user 建立数据库&#xff0c;可以…

Flink基本转换算子map/filter/flatmap

map map是大家非常熟悉的大数据操作算子&#xff0c;主要用于将数据流中的数据进行转换&#xff0c;形成新的数据流。简单来说&#xff0c;就是一个“一一映射”&#xff0c;消费一个元素就产出一个元素。 我们只需要基于DataStream调用map()方法就可以进行转换处理。方法需要…

案例026:基于微信小程序的原创音乐系统的设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

汽车网络安全--关于UN R155认证的思考

1.UN R155概述 2020年6月25日,联合国颁布了全球首个汽车网络安全强制性法规 -- UN 155,详细规定了关于评估网络安全措施的审核条款、制造商和供应商降低网络安全风险的方法以及实施风险评估的义务等。 法规适用于与信息安全相关的M类(4轮及以上载客汽车)、N类(四轮载货汽车)…

SpringBoot项目连接Graylog

直接用logback将控制台输出的日志发送到graylog上 1.导入logback依赖 <dependency> <groupId>de.siegmar</groupId> <artifactId>logback-gelf</artifactId> <version>1.1.0</version> </dependency> 2.创建logback-spring.x…

golang学习笔记——编写最简单的命令行工具

编写最简单的命令行工具 用户输入bufio 使用go语言编写最简单的命令行工具 mkdir hello-cli-demo cd hello-cli-demo # 查看环境变量 go envgo mod初始化 go mod init gitcode.com/m打开vscode&#xff0c;创建main.go package mainimport ("fmt""bufio&qu…

快速测试 3节点的redis sentinel集群宕机2个节点以后是否仍能正常使用

有同事问我&#xff0c;三个redis sentinel节点&#xff0c;宕机两个节点以后&#xff0c;是否还能够正常的通过redis sentinel正常访问redis的数据。我想了想&#xff0c;理论上是可以的&#xff0c;但是我没试过&#xff0c;今天有时间就测试了一下。搭建环境和测试代码的过程…

Java并发(十七)----变量的线程安全分析

1、成员变量和静态变量是否线程安全 如果它们没有共享&#xff0c;则线程安全 如果它们被共享了&#xff0c;根据它们的状态是否能够改变&#xff0c;又分两种情况 如果只有读操作&#xff0c;则线程安全 如果有读写操作&#xff0c;则这段代码是临界区&#xff0c;需要考虑线…

深入了解Python pydash库

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在数据处理和分析领域&#xff0c;Python一直是一种强大的编程语言。然而&#xff0c;在处理大规模数据集和执行复杂操作时&#xff0c;有时候需要更高效的工具。在本文中&#xff0c;我们将深入探讨pydash库&am…

语义分割 简介及数据集简介

参考文章 MS COCO数据集介绍以及pycocotools简单使用-CSDN博客

[MySQL--进阶篇]存储引擎的体系结构、简介、特点、选择

前言 ⭐Hello!这里是欧_aita的博客。 ⭐今日语录&#xff1a;不要在乎别人怎么看你&#xff0c;因为他们根本就没有时间&#xff0c;他们只关心他们自己。 ⭐个人主页&#xff1a;欧_aita ψ(._. )>⭐个人专栏&#xff1a; 数据结构与算法 MySQL数据库 存储引擎 前言MySQL体…

李宏毅gpt个人记录

参考&#xff1a; 李宏毅机器学习--self-supervised&#xff1a;BERT、GPT、Auto-encoder-CSDN博客 用无标注资料的任务训练完模型以后&#xff0c;它本身没有什么用&#xff0c;GPT 1只能够把一句话补完&#xff0c;可以把 Self-Supervised Learning 的 Model做微微的调整&am…

32.768KHz时钟RTC晶振精度PPM值及频差计算

一个数字电路就像一所城市的交通&#xff0c;晶振的作用就是十字路口的信号灯&#xff0c;因此晶振的品质及其电路应用尤其关键。数字电路又像生命体&#xff0c;它的运行就像人身体里的血液流通&#xff0c;它不是由单一的某个器件或器件单元构成&#xff0c;而是由多个器件及…

【Spring Boot 源码学习】ApplicationListener 详解

Spring Boot 源码学习系列 ApplicationListener 详解 引言往期内容主要内容1. 初识 ApplicationListener2. 加载 ApplicationListener3. 响应应用程序事件 总结 引言 书接前文《初识 SpringApplication》&#xff0c;我们从 Spring Boot 的启动类 SpringApplication 上入手&am…