python爬虫入门教程(一)

news2024/12/25 14:20:29

上一篇文章讲了爬虫的工作原理,这篇文章以后就要重点开始讲编程序了。

简单爬虫的的两个步骤:

  • 使用HTTPRequest工具模拟HTTP请求,接收到返回的文本。用于请求的包有: requests、urllib等。
  •  对接收的文本进行筛选,获取想要的内容。用户筛选文本的包有: bs4、lxml等。

爬虫的第一步就是向网站发送HTTP请求,本篇文章的主要内容就是用python向网站发送请求,获得网站的响应。

urllib库

在Python的网络编程世界中,urllib库是处理网络请求的基础库之一。无论是获取网页内容、下载文件还是发送POST请求,urllib都能提供强大的支持。

1. urllib库简介

urllib是Python标准库中的一个模块,用于处理网络请求。它包含多个子模块,如urllib.requesturllib.errorurllib.parse等,每个子模块都有其特定的功能和用途。下面我们将逐一介绍这些子模块的使用方法。

2. urllib.request模块

urllib.request模块用于打开和读取URLs。它提供了各种网络请求的类和函数,如urlopen()Request()等。

使用urlopen()发送GET请求

某度搜索页源代码部分展示:

运行结果展示:

使用Request()发送带有请求头的GET请求

什么是请求头?

请求头(Request Headers) 是HTTP请求的一部分,它包含了关于一个HTTP请求的属性信息。这些属性信息定义了请求的客户端环境、请求的意图以及请求的原始服务器应使用的其他属性。一个HTTP请求通常由请求行、请求头和请求体三部分组成,其中请求头包含了多个属性,每个属性包含一个名字和一个值,两者用冒号:分隔。

在某瓣电影官网按下F12进入开发者模式,点击网络,然后点击文档查看我们要爬取页面的接口,我们选择第一个,查看它的请求头。如下图:

这里做个解释:左边的一列其实就是网址的缩写,我们很明显可以看出来第一个就是我们输入的网址,也就是我们要发送HTTP请求的网址,右边就是它的请求头信息。

各种请求头信息:

  • User-Agent:告诉服务器关于客户端的环境信息,如浏览器类型、版本、操作系统、渲染引擎等。这有助于服务器返回与客户端兼容的内容。(经常放到程序中,一般使用的时候随便去网页里复制一个就行
  • Accept:Accept 请求头告诉服务器客户端能够处理哪些类型的响应内容,如text/htmlapplication/jsonimage/jpeg等。服务器将使用此信息来确定返回哪种类型的响应内容。
  • Accept-Encoding:Accept-Encoding 请求头列出了客户端支持的压缩编码类型,如gzipdeflate等。服务器可以使用这些编码来压缩响应,以减少传输的数据量。
  • Accept-Language:Accept-Language 请求头告诉服务器客户端首选的语言,以便服务器能够返回用该语言编写的响应内容。这有助于实现内容的国际化和本地化。

  • Content-Type:Content-Type 请求头(在POST或PUT请求中常见)描述了请求体的媒体类型。这告诉服务器请求体的内容格式,以便服务器能够正确地解析数据。例如,对于JSON数据,Content-Type可能设置为application/json

  • Content-Length:Content-Length 请求头告诉服务器请求体的长度(以字节为单位)。这对于需要知道请求体大小的服务器来说很有用。

  • Authorization:Authorization 请求头包含客户端提供给服务器的身份验证凭据,通常用于HTTP身份验证。例如,在基于令牌的认证中,客户端可能会将令牌作为此头的一部分发送。

  • Host:Host 请求头指定了请求的目标域名和端口号(如果端口号不是默认的80或443)。这允许服务器区分来自不同域名的请求,并在同一IP地址上托管多个网站。

  • Cache-Control:Cache-Control 请求头包含了关于请求缓存的指令。这些指令告诉缓存(如浏览器缓存或代理服务器缓存)如何缓存响应内容,以及何时可以重新验证缓存的内容。

  • Cookie:Cookie 请求头包含了由服务器之前设置的HTTP cookie。这些cookie可以用于会话管理、用户跟踪等目的。

除了上述常见的请求头之外,还有许多其他请求头,如Referer(指示请求的来源页面)、Connection(指定连接类型,如keep-alive)等。这些请求头根据具体的应用场景和需求而有所不同。

这部分不理解的话可以先跳过,知道请求头是用来伪装爬虫程序的就行了,后面实战遇到的时候会再给大家针对案例讲解。

为什么要加请求头?
  1. 身份认证:一些网站要求用户进行身份认证才能访问某些资源。请求头可以包含认证信息,如用户名和密码(虽然在现代应用中,这种做法通常会被更安全的方法如OAuth或JWT替代)。

  2. 缓存控制:请求头中的Cache-Control字段可以控制浏览器或其他客户端如何缓存请求的资源。例如,它可以指示服务器不要缓存某个资源,或者指示客户端在特定时间后重新验证缓存的资源。

  3. 内容协商:请求头中的Accept字段可以告诉服务器客户端能够处理哪些类型的响应内容。例如,客户端可以指定它期望接收HTML、XML、JSON或图片等类型的响应。

  4. 自定义请求:通过添加自定义的请求头,客户端可以向服务器传递额外的信息,以便服务器能够生成更符合客户端需求的响应。例如,一个API请求可能会包含一个表示API版本或客户端ID的自定义请求头。

  5. 跨域资源共享(CORS):在Web开发中,跨域资源共享(CORS)是一个安全特性,它允许网页从与其来源不同的源加载资源。CORS请求会包含一个名为Origin的请求头,该头字段用于描述请求的发起源。

  6. 防止缓存:通过在请求头中添加特定的字段(如Pragma: no-cacheCache-Control: no-cache),可以确保浏览器或其他客户端不会从缓存中加载资源,而是从服务器获取最新的资源。

  7. 追踪和调试:请求头还可以包含用于追踪和调试的信息,如用户代理(User-Agent)字段可以告诉服务器客户端的类型和版本信息。

比如某瓣电影的网页,假如我们没有加上请求头的话,向网站发送请求是会直接报错的(代码还是上面的代码,只换了一个网址)。如下图:

这时候我们就需要加上请求头来伪装我们的爬虫程序。一般情况下,我们只需要加上一个user-agent,来伪装我们是浏览器,而不是一个爬虫程序。所以我们要在代码中加上请求头,请求头里添加上user-agent伪装我们的程序。

运行结果:

官网源代码如下图:

发送POST请求

HTTP 的 POST 请求是用于提交数据到服务器进行处理的请求方法。与 GET 请求不同,POST 请求通常不会在 URL 中包含数据,而是将数据包含在请求体中。这使得 POST 请求更适合于发送大量数据或敏感数据(如密码),因为数据不会在 URL 中暴露。还有比如大部分网页点赞或者评论等等都是post请求。

我们用下面这个网站来测试post请求。

运行结果如下(可以看到在form表单里有我们发送的数据。):

3. urllib.error模块

urllib.error模块用于处理urllib.request模块抛出的异常。当网络请求出现错误时,如连接超时、服务器无响应等,urllib.request会抛出异常,这时可以使用urllib.error模块中的异常类来捕获和处理这些异常。

4. urllib.parse模块

urllib.parse模块提供了处理URL的功能,如解析URL、构建查询参数等。

上面已经用过urlencode()这个方法了,接下来再说一下quote()和unquote()方法。

quote()对url地址中的中文进行编码,类似于urlencode()方法。

unquote()对url地址进行解码,将编码后的字符串转为普通的Unicode字符串。

data = '%E5%92%8C%E5%B9%B3'
result = parse.unquote(data)
print(result)  # 运行结果: 和平

requests库

requests库支持各种HTTP请求方法,包括GET、POST、PUT、DELETE等,功能非常强大,也是我们写爬虫程序中最常用的库,下面来介绍一些它的使用方法。首先安装requests库,终端输入:pip install requests

注意:由于上面讲urllib库的时候已经讲过get请求,post请求等讲过的我就不讲了,直接教大家使用这个第三方库,有不同的地方我再讲。

1. 发送GET请求

响应头(Response Headers)包含了关于服务器如何处理请求和返回资源的元数据。这些响应头对于调试、了解资源属性和配置缓存等非常有用。响应头信息用response对象的headers属性就可以获取。

2. 发送POST请求

3. 设置请求头

4. 处理JSON数据

当服务器返回JSON格式的数据时,我们可以使用response.json()方法将其直接解析为Python对象,这样就不需要使用python中的json库来把字符串转为python中的对象了。

不了解json数据的可以这样理解:用了json方法后,长的和python中列表或者字典一样的字符串就转变为了列表或者字典,可以让我们直接用python方法提取信息。

今天就先讲到这里,下一篇文章会讲一下requests库的更多用法,包括会话保持(Session)、SSL证书验证、文件上传、代理设置等稍微高级一点的用法。

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

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

相关文章

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:隧道和矿井绘图设备

RockMass 正在努力打入采矿业和隧道工程利基市场。 这家位于多伦多的初创公司正在利用 NVIDIA AI 开发一款绘图平台,帮助工程师评估矿井和施工中的隧道稳定性。 目前,作为安全预防措施,地质学家和工程师会站在离岩石五米远的地方&#xff0…

【Pyqt6 学习笔记】DIY一个二维码解析生成小工具

文章目录 Pycharm 配置QtDesignerPyUIC基本模板 代码示例依赖包main.pyscreen_shot_module.pyuntitled.pyuntitled.ui Pycharm 配置 摘自PyQT6的从零开始在Pycharm中配置与使用——蹦跑的蜗牛 pip install PyQt6 PyQt6-toolsQtDesigner File -> Settings -> External …

pdf文件在线压缩网站,pdf文件在线压缩工具软件

在数字化时代的今天,PDF文件已经成为我们日常生活和工作中不可或缺的一部分。然而,随着PDF文件的广泛使用,其文件大小问题也日益凸显。过大的PDF文件不仅占用了大量的存储空间,而且在传输和共享过程中也往往面临诸多不便。因此&am…

ubuntu 用户名及密码忘记操作

1、重启系统,长按Shift键,直到出现菜单,选则高级设置。选择recovery mode,即恢复模式 2、选择root 3、# 后面敲入 sudo passwd 用户名 4、# passwd "用户名" 之后再敲两次密码就可以了。(如果提示修改失败可先执行&a…

mac读不出来ntfs mac硬盘读不出来盘

新买的Mac电脑由于需要导入旧电脑的数据,因此通常会读取备份硬盘,通过硬盘进行导入。不过由于各种原因,有些mac用户反馈无法正常读取或写入NTFS移动硬盘,下面就通过本篇教程,简单讲述当mac读不出来ntfs,mac…

[ROS 系列学习教程] 建模与仿真 - 使用 Arbotix 控制机器人

ROS 系列学习教程(总目录) 本文目录 一、Arbotix 简介二、安装Arbotix三、配置Arbotix控制器四、配置launch启动文件五、数据交互接口六、在rviz中仿真控制机器人6.1 直接发topic控制6.2 使用键盘控制6.3 编写代码控制机器人移动 前面讲了机器人的建模,是静态的&…

独著和第一主编的区别有哪些?

独著,合著,包本 大量主编,副主编位置 国家级出版社,省级科技社 纸质书号(带CIP)电子专著,总署可查 国家级出版社,省级社,百级社 qkfb88688 独著和第一主编主要有以下区别…

免费使用GPT-4生成图片的方法

写在前言 hello,大家好,我是一点,喜欢编程,目前持续在关注AI领域的发展,希望可以结交一些有意思的朋友。 大家可以关注我的公号:【一点sir】,了解更多文章,希望可以和你们成为朋友…

变频器多段速位置定位控制注意事项

本篇博客介绍利用变频器多段速实现位置控制时的注意事项,T型和S型速度曲线轨迹规划请参考下面文章链接: S速度曲线轨迹规划(普通变频位置闭环控制算法详细介绍+SCL代码)_位置闭环算法-CSDN博客文章浏览阅读1.9k次,点赞2次,收藏9次。位置控制用PD控制器,详细内容介绍请查看…

后端服务器启动访问

VisualStudioCode(VSCode) 服务器启动 浏览器中测试访问 http://localhost:3000

JavaScript基础(十二)

截取字符串 //对象名.toLowerCase();将字符串转为小写 var strLAOWANG; strstr.toLowerCase(); console.log(str); //对象名.toUpperCase();将字符串转为大写 var str1laowang str1str1.toUpperCase(); console.log(str1); 截取字符串 //方法1:对象名.substr(a,b); …

Python实现连连看9

(2)标识选中的图片 在判断出玩家选中的是哪一张图片之后,接下来就可以标识选中的图片了,即在该选中的图片外围画矩形。代码如下所示。 FIRSTCLICK True #FIRSTCLICK是全局变量 if(click_col>0 and click_row>0) and \(no…

Layui:一款强大的前端UI框架

随着互联网技术的快速发展,前端技术也在不断更新和演进。前端工程师们面临着越来越多的挑战,需要在短时间内构建出高质量、高效率的网页应用。为了提高开发效率和降低开发难度,许多前端UI框架应运而生。在这些框架中,Layui凭借其优…

XUbuntu22.04之ssh+x11显示远程图形到本机(二百四十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

python数据分析——聚类

参考资料:活用pandas库 1、k均值聚类 使用k均值算法,首先要选定数据中的群集数(k)。它会随机选取数据中的k个点,计算每个数据点到最初选取的k个点之间的距离。最接近某个群集的点会被划分到同一个集群组。然后把每个群…

23种模式之一— — — —适配器模式的详细介绍与讲解

适配器介绍与讲解 一、概念二、适配器模式结构适配器分类核心思想核心角色模式的UML类图应用场景模式优点模式缺点 实例演示图示代码演示运行结果 一、概念 适配器模式(别名:包装器) 是一种结构型设计模式 将一个类的接口转换成客户希望的另…

机器学习与数据挖掘知识点总结(二)之常用的分类算法

目录 1、什么是数据挖掘 2、为什么要有数据挖掘 3、数据挖掘用在分类任务中的算法 朴素贝叶斯算法 svm支持向量机算法 PCA主成分分析算法 k-means算法 决策树 1、什么是数据挖掘 数据挖掘是从大量数据中发现隐藏在其中的模式、关系和规律的过程。它利用统计学、机器学…

Transformer 动画讲解:多层感知机

暑期实习基本结束了,校招即将开启。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。提前准备才是完全之策。 最近,我们又陆续整理了很多大厂的面试题&#xff0c…

Python GUI编程:深入探索现代GUI库及其创新应用

目录 引言 Python GUI库概览 1. Tkinter 2. PyQt/PySide 3. wxPython 4. Kivy 5. PyGTK 6.FLTK (pyFLTK) 创新应用案例 1. 交互式数据分析工具 2. 智能物联网(IoT)仪表板 3. 增强现实(AR)辅助设计软件 4. 跨平台的科学计算软件 5. 交互式教育软件 实战示例1&…

Vue13-计算属性的简写

一、计算属性的简写 注意: 当计算属性只有get,没有set的时候,才能用简写形式!!!