网络爬虫的介绍

网络爬虫库

网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网中的关键信息,例如网页中的数据、图片、视频等。Python语言中提供了多个具有爬虫功能的库,下面将具的介绍。

urlib库:是Python自带的标准库,无须下载、安装即可直接使用。urllib库中包含大量的爬虫功能,但其代码编写略微复杂。

requests库:是python的第三方库,需要下载、安装之后才能使用。由于requests库是在urllib库的基础上建立的,它包含urlib库的功能,这使得requests库中的函数和方法的使用更加友好,因此requests库使用起来更加简洁、方便。

scrapy库:是Python的第三方库,需要下载、安装之后才能使用。scrapy库是一个适用于专业应用程序开发的网络爬虫库。scrapy库集合了爬虫的框架,通过框架可创建一个专业爬虫系统。

selenium库:是Python的第三方库,需要下载、安装后才能使用。selenium库可用于驱动计算机中的浏览器执行相关命令,而无须用户手动操作。常用于自动驱动浏览器实现办公自动化和Web应用程序测试。

基于办公自动化的使用场景,本章主要介绍requests库和selenium库。而scrapy库是专业级爬虫库,如果读者对网络爬虫感兴趣,可以进入Python爬虫领域进行更深层次的学习。

robots.txt规则

在正式学习网络爬虫之前,读者需要掌握爬取规则,不是网站中的所有信息都允许被爬取,也不是所有的网站都允许被爬取。在大部分网站的根目录中存在一个robots.txt文件,该文件用于声明此网站中禁止访问的url和可以访问的url。用户只需在网站域名后面加上/robots.txt即可读取此文件的内容。

例如要获取豆瓣官网中的robots.txt文件,打开浏览器输入豆瓣官网域名并在域名后加上/robots.txt,按Enter键即可,如图15-1所示。豆瓣官网的主域名下存在大量的子域名,例如某个电影的影评url是在主域名的基础上增加子目录,其形式与磁盘中的目录路径相同。

robots.txt规则用于表明当前网站中的哪些内容是可以访问的哪些内容是禁止访问的。接下来具体介绍robots.txt文件的内容。
User-agent:表示访问网站的搜索引擎,第1个User-agent的值为*,表示所有类型的搜索引擎都需要遵守第2~21行的规则。第2个User-agent的值头W彥andouiia Spider,表示Wandoujia Spider搜索引擎需要遵守的规则。

requests 库和网页源代码

主要讲解requests库的安装及如何获取网页源代码。

requests 库的安装

在命令提示符窗口或终端中执行以下命令:

pip install requests

安装成功后可使用以下命令查看库的信息:

pip show requests

返回信息包含当前安装的requests库的版本信息、官方地址、安装目录等。

网页源代码

用户在使用浏览器访同网页时,往往会忽视网页的源代码,而获取网页中的信息需要从网页的源代码出发。

例如使用浏览器(本书使用的是chrome浏览器)打开人民邮电出版社官网中的期刊页。在网页空白处单鼠标右键,选择快捷菜单中的“查看页面源代码”即可打开当前网页的源代码信息页面。

网页中的源代码形式与第14章的HTML代码形式基本相同,读者可尝试阅读网页中的源代码。通过源代码可以轻松地获取网页中的文字、图片、视频等信息,还可以获取图片或视频文件的url并将文件下载到本地。

而一个网页除了HTML代码还包含]avaScript脚本语言代码,JavaScript脚本语言代码使得浏览器可以解析和渲染网页源代码,使得用户可以阅览到图形化界面,而不是阅读纯文本代码。网页中有大量数据是包含在JavaScript脚本语言代码中的,而通过査看源代码的方式是无法获取这些数据的。例如图15-4中的图片信息在网页源代码中是无法找到的,但可以通过检查窗口查看渲染后的网页内容,找到对应图片的url。

获取人民邮电出版社官网中期刊页的《通信学报》封面图片url的步骤如下,步骤1,单击检查窗口中的元素选择按钮,如图15-6所示的标注框所在位置内的图标。步骤2,单击网页中的图片位置,检查窗口将会自动跳转到该图片对应的源代码位置。
步骤3,浅蓝色部分的<img upload/2017/06/53def7a9b43044a1b1afd1991d82a323.png>为图片的源代码内容,其中upload/2017/06/53def7a9b43044a1b1afd1991d82a323.png为图片在网站服务器中的目录地址,完整的ur1只需要在前面加入网站主域名即可。

获取网页资源

requests库具有获取网页内容和向网页中提交信息的功能,本节主要介绍如何获取网页内容及如何对获取的网页内容进行处理。

get()函数

在requests库中获取HTML网页内容的方法是使用get()函数。其使用形式如下:

get (url, params=None, **kwargs)

参数url:表示需要获取的HTML网址(也称为url)。
参数params:表示可选参数,以字典的形式发送信息,当需要向网页中提交查询信息时使用。

参数**kwargs:表示请求采用的可选参数。

返回值:返回一个由类Response创建的对象。类Response位于requests库的models.py文件中。

示例代码:

import requests

r=requests.get('https://www.ptpress.com.cn/')

print(r.text)

第1行代码导入了requests库。

第2行使用requests库中的get()函数获取人民邮电出版社的官方网址,并返回一个Response对象给变量r。

第3行代码使用print()语句输出变量r的text方法,Response对象中的text方法用于获取相应的文本内容即网页的源代码。

执行代码后的输出结果如图15-7所示,“Squeezed text(1019line).”表示获取的内容较多,IDLE会自动将内容收缩起来,可以用鼠标右键单击此处并选择“view”查看返回的完整信息,如图15-8所示。对比使用代码输出的信息和使用浏览器访问的网页源代码,它们的内容是相同的。

get()搜索信息

当在网页中搜索人民邮电出版社中的某些指定信息时,可以在图15-9所示的搜索框中输入搜索信息,例输入关键词“Excel”。

从搜索结果网页中可以看到当前页面的网址为https://www.ptpress.com.cn/search?keyword=excel其中https://www.ptpress.com.cn/为官网主页,search表示搜索,keyword表示搜索的关键词(这里值为
excel,表示需要搜索的关键词为“excel”),“?”用于分隔search和keyword。

在其他网页中搜索也有与以上类似的效果,search或keyword可能会用其他字符表示,但基本形式是相同的。读者可在其他网页中进行尝试,例如使用百度的网址+s?wd=excel可以搜索到关键词为“excel”的内容其中s为search的缩写,wd为word的缩写。

在requests库中可以充分利用以上方法实现获取网页中的资源。

示例代码:

import requests

r=requests.get('https://www.ptpress.com.cn/search?keyword=word')

print(r.text)

第2行代码用于实现在人民邮电出版社官网中搜索关键词为“word”的信息

get()添加信息

get()函数中第2个参数params会以字典的形式在ur1后自动添加信息,需要提前将params定义为字典示例代码:

import requests

info ={'keyword':'Excel'}

r=requests.get('https://www.ptpress.com.cn/search',params=info)

print(r.url)

print(r.text)

第2行代码建立字典info,包含一个键值对。

第3行代码使用get()函数获取网页,由于get()中包含参数params,因此系统会自动在url后添加字典信息形式为https://www.ptpress.com.cn/search?keyword=exce1,该使用形式便于灵活设定需要搜索的信息即可以添加或删除字典信息。

第4行代码输出返回的Response对象中的url,即获取网页的url。

返回 Response 对象

通过get()函数获取HTML网页内容后,由于网页的多样性,通常还需要对网页返回的Response对象进行设置。本小节将主要讲解类Response中的方法。

Response 的属性

Response包含的属性有status_code、headers、url、encoding、cookies等。

status_code(状态码):当获取一个HTML网页时,网页所在的服务器会返回一个状态码,表明本次获取网页的状态。例如访问人民邮电出版社官网,当使用get()函数发出请求时,人民邮电出版社官网的服务器接收到请求信息后,会先判断请求信息是否合理,如果请求合理则返回状态码200和网页信息;如果请求不合理则返回一个异常状态码。

常见的HTTP(Hypertext Transfer Protocol,超文本传送协议)状态码有200(请求成功)、301(网页内容被永久转移到其他url)、404(请求的网页不存在)、500(内部服务器错误)等,更多状态码可以使用搜索引擎查询。

因此在使用get()函数请求访问网页时,为了确保获取正确的网页信息,需要判断服务器返回的状态码是否为200。Response对象中的status_code为服务器返回的状态码。

示例代码:

import requests

r=requests.get('https://www.ptpress.com.cn')

print(r.status_code)

if rstatus_code == 200:

        print(r.text)

else:

        print('本次访问失败')

第3行代码输出Response对象返回的状态码。第4行代码用于判断状态码是否为200,如果为200,则输出获取的网页内容,否则表明访问存在异常。

header(响应头):服务器返回的附加信息,主要包括服务器传递的数据类型、使用的压缩方法、语言、服务器的信息、响应该请求的时间等。

url:响应的最终url位置。

encoding:访问r.text时使用的编码。

设置编码

当访间一个网页时,如果获取的内容是乱码,例如图15-12所示的内容为访间百度官网后返回的信息,其中存在大量的乱码信息。这是由网页读取编码错误导致的,可以通过设置requests.get(url)返回的Bespons对象的encoding='utr-8"来修改“Response对象.text”文本内容的编码方式。同时Response对象中提供了apparent_encoding()方法来自动识别网页的编码方式,不过由于此方法是由机器自动识别,因此可能会存在识别错误的情况(大部分情况下是可用的)。

如果要设置自动识别网页的编码方式,可以使用以下形式:

Response对象.encoding=Response对象,apparent_encoding

import requests

r=requests.get('此处填入'百度官网地址'.com')

r.encoding =r.apparent encoding

print(r.text)

第3行代码设置自动识别网页的编码方式,执行代码后的输出结果中将包含可识别的文字,而不再是乱码,如图15-13所示。当设置自动识别编码方式后依然出现内容乱码时,读者需要自行设置encoding编码方式。

返回网页内容

Response对象中返回网页内容有两种方法,分别是te缁爍氮xt総()方法和content()方法,其中text()方法在前面的内容中有介绍,它是以字符串的形式返回网页内容。而content()方法是以二进制的形式返回网页内容,常用于直接保存网页中的媒体文件。

示例代码(下载人民邮电出版社官网中的图片):

import requests

r=requestsget('https://cdn.ptpress.cn/uploadimg/Materia1/978-7-115-41359-8/72jpg/4135jpg')

f2 = open('b.jpg','wb')

f2.write(r.content)

f2.close()

第2行代码使用get()方法访问了图片url。

第3行代码使用open()函数创建了一个bjpg文件,并且设置以二进制写入的模式

第4行代码将获取的url内容以二进制形式写入文件。
执行代码后将在相应文件夹中存储一张图片.

提交信息到网页

requests库除了可以从网页中获取资源,还可以将信息提交到网页中,本节将主要介绍如何使用实现将信息上传到网站服务器中。

浏览器提交请求

在15.3节中介绍了如何通过requests库获取网页的内容,而当需要向网页中提交信息时,可以requests库中的post()函数来实现,提交内容包含表单、图片、文件等类型的数据。

可以在浏览器的检查窗口中观察到数据提交的过程。以在人邮教育社区中修改用户密码为例,观察浏览器提交数据的步骤如下。
步骤1,登录用户账户后,进入修改密码界面,如图15-18所示。需要在指定位置输入当前密码和新密码,这种文本框中的数据称为表单信息。

步骤2,在网页空白处单击鼠标右键并进入检查窗口,单击“Network”进入Network窗口,接下来在网页中输入用户的当前密码、新密码、确认密码,并单击“修改密码”按钮,如图15-19所示。

步骤3,提交信息后,在右边的Network窗口中将不断获取网页交互的信息。

为骤4,找到提交密码的交互信息。在Name窗口中单击"change-password”,观察其"Hearders”选
不的售息、可以发现在:G2neral”区城中的RequestManna(更示情2d”、码务法)(为POST,书信息是通过P09请求来提交数据的,如图15-21所示。而在最0(的示请来网D3万花设单数据)区城中了刚刚输入的密码,其中OldPassword对应网页中的当前密码。的“pa.Dza对应网页中的新密码。8frmPaswOHd对应网页中的确认密码,它们的值正好为用户限刚输入P&8”0n1522所示。由此可以CmName窗口中的change-password是提交给服务器的信息。

以上内容是使用浏览器实现通过p0St请求提交数据的过程,接下来介绍使用requests库模拟浏览器提交调。,实现通过post请求将表单中的数据提交给服务器。

post()函数

post()函数可用于向网站发送数据请求。其使用形式如下:

bost (url,data=None, json=None, **kwargs)

参数url:表示网站url。
参数data:表示需要发送的数据对象,可以为字典、元组、列表、字节数据或文件。
参数json:表示需要发送的数据对象,该数据对象为JSON数据(具体内容见17.3节)。
参数**kwargs:表示请求采用的可选参数。
返回值:使用post()函数后返回一个Response对象。
示例代码:

import requests

d=('0ldpassword':'123456python','Newpassword':'123python','conflrmpassword' :'123python' }

r=requests.post('https://account.ryjiaoyu.com/change-password', data-d)

print(z.text)

第2行代码使用字典的形式保存了需要上传的数据。

第3行代码使用post()函数访问修改密码网页ur,并提交修改密码数据。

执行此代码后本质上还无法完成使用代码修改密码,因为在修改密码前还需要登录账户,这里代码并没有实现账户的登录,此处仅展示上传表单数据的方法。

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

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

相关文章

C# 编程实战进阶:字符串与字符串数组 (3)

目录 1、给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 2、无重复字符的最长字符串 &#xff0c;给定一个字符串 s 请你找出其中不含有重复字符的最长字符串的长度。 3、给定两个字符串 s 和 t &#xff0c;它们只包含小…

Python趣味算法:百钱百鸡问题——双重循环优化与算法效率分析

如何用Python解决中国古代数学难题?本文从暴力枚举到高效优化,带你领略算法之美,效率提升100倍! 看在每天坚持分享有趣知识的份上,点个关注吧(づ ̄ 3 ̄)づ 关注是我更新的动力 ̄︶ ̄∗ ̄︶ ̄∗) 作者会分享更多涉及到各种编程语言的有趣知识!(^∀^●)ノシ 目录 …

JAVA_TWO-初识Java2

1.IDEA管理Java程序的结构2.idea编译后的class文件在哪在工程out文件夹下。3.idea一些快捷键4.导入模块File→New→Module from Existing Sources → 添加后缀.iml文件5.注释单行注释 //多行注释 /* 注释内容1注释内容2 */文档注释 /** 注释内容 */ &#xff08;文档注释内容可…

二、Dify 版本升级教程(LInux-openeuler)

首先&#xff0c;你需要先按照好dify&#xff0c;然后才能升级&#xff0c;本文教程是基与Docker Compose 如果你还没有安装&#xff0c;可以看看这个教程。 一、Dify 私有部署、本地安装教程&#xff08;LInux-openeuler&#xff09;_dify1.5版本部署-CSDN博客 安装完成后&a…

Java 大视界 -- Java 大数据在智能安防门禁系统中的多生物特征融合识别与权限管理(280)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也期待你毫无保留地分享独特见解,愿我们于此携手成长,共赴新程!💖 本博…

【Tools】Ubuntu24.04安装详细教程

00. 目录 文章目录00. 目录01. Ubuntu 24.04简介02. Ubuntu 24.04下载03. Ubuntu 24.04虚拟机创建04. Ubuntu 24.04安装步骤05. Ubuntu 24.04常用软件06. 附录01. Ubuntu 24.04简介 Ubuntu 24.04 LTS&#xff08;代号“Noble Numbat”&#xff09;是Canonical于2024年4月25日发…

linux基础入门Ubuntu 22.04 系统中添加、删除和授予用户 sudo权限

在 Ubuntu 中&#xff0c;sudo 允许授权用户以 root 级别权限执行任务&#xff0c;即使他们不知道 root 用户密码。这对于执行管理任务非常重要&#xff0c;因为它可以避免直接使用 root 用户&#xff0c;从而减少系统被误操作的风险&#xff0c;同时在企业生产中由于ubuntu系统…

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1

问题描述使用git bash, cmd运行npm都可以&#xff0c;但是用Power Shell运行npm&#xff0c;却报错&#xff1a;npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/…

【面经】实习经历

文章目录一、求职准备篇1.1提升技术水平1.1.1学什么&#xff1f;1.1.2怎么学&#xff1f;1.2做项目1.3做简历1.4找实习二、求职难度篇找实习难不难&#xff1f;笔试面试三、实习内容篇新人入职 -- 学会看代码参与小需求实习日常实习到底难不难&#xff1f;四、总结 一、求职准备…

The Missing Semester of Your CS Education 学习笔记以及一些拓展知识(二)

文章目录The Missing Semester of Your CS Education 学习笔记以及一些拓展知识Bash脚本笔记部分一些在Bash脚本中的常用命令补充常用标准输入输出命令常用环境变量(普通变量)控制命令常用系统时间信息获取命令常用函数执行状态控制命令常用脚本执行控制命令Bash脚本的创建和运…

教育科技内容平台的用户定位与产品方案:从需求到解决方案的精准匹配

教育科技内容平台的用户定位与产品方案&#xff1a;从需求到解决方案的精准匹配打造一款成功的内容平台&#xff0c;核心在于 “懂用户”—— 明确不同用户的需求场景、使用目的&#xff0c;才能设计出真正有价值的产品功能。本文以面向互联网从业者的教育科技内容平台为例&…

网络之路16:认识虚拟化环境H3C CAS

正文共&#xff1a;3888 字 54 图&#xff0c;预估阅读时间&#xff1a;6 分钟目录网络之路第一章&#xff1a;Windows系统中的网络0、序言1、Windows系统中的网络 1.1、桌面中的网卡 1.2、命令行中的网卡 1.3、路由表 1.4、家用路由器网络之路第二章&#xff1a;认识企业设备2…

Sklearn 机器学习 IRIS数据 理解分类报告

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Sklearn 机器学习 IRIS 数据分类报告解读 鸢尾花(Iris)数据集是机器学习入门中最经典…

ni-app 对鸿蒙的支持现状

自 HBuilderX 4.27 版本开始&#xff0c;uni-app 支持 Harmony Next 平台的 App 开发&#xff0c;目前仅支持 Vue3 项目编译到鸿蒙平台。uni-app x 从 4.61 版本起支持纯血鸿蒙&#xff0c;即 Harmony NEXT&#xff0c;其组件、API、CSS 与 Android 和 iOS 基本拉齐。 开发与配…

docker 容器学习

笔者来介绍一下docker 容器的学习1、docker容器背景 docker 里面有两个概念&#xff0c;镜像可看成一个类&#xff0c;而容器则是镜像的一个实例&#xff0c;从这个来看&#xff0c;那么一般镜像是一个&#xff0c;而容器可以有很多个。 镜像&#xff1a;带一堆工具链的操作系统…

MongoDB社区版安装(windows)

下载地址 官网&#xff1a; MongoDB: The World’s Leading Modern Database | MongoDB 8.0.11版本下载地址&#xff1a; https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-8.0.11.zip 安装 解压安装包 解压结果目录如下&#xff1a; bin目录介绍 文件名称作用…

Git上传与下载GitHub仓库

新建GitHub仓库 … 本地上传GitHub 第一步&#xff1a;git add .第二步&#xff1a;git commit -m your content第三步&#xff1a;git push xxx main或者git push xxx master 对于第三步&#xff0c;首先看自己建立的仓库是master分支&#xff0c;还是main分支。以前都是默认m…

OpenCV 官翻 3 - 特征检测 Feature Detection

文章目录理解特征目标解释Harris角点检测目标理论OpenCV 中的 Harris 角点检测器亚像素级精度角点检测练习Shi-Tomasi角点检测器与优质跟踪特征目标理论基础代码SIFT&#xff08;尺度不变特征变换&#xff09;简介目标理论1、尺度空间极值检测2、关键点定位3、方向分配4、关键点…

2️⃣处理文本数据

本章介绍 为大语言模型的训练准备文本数据集将文本分割成词和子词token字节对编码(Byte Pair Encoding,BPE):一种更为高级的文本分词技术使用滑动窗口方法采样训练示例将tokens转换为向量&#xff0c;输入到大语言模型中 文章目录本章介绍2.1 理解词嵌入2.2 文本分词2.3 将tok…

TestCase Studio - 自动生成测试用例详解

你是否也曾为编写测试用例而头疼&#xff1f;点击按钮、填写表单、截图说明——这些重复操作让人心生倦意。 而现在&#xff0c;只需动动鼠标&#xff0c;TestCase Studio 就能自动录制你的 Web 操作&#xff0c;生成清晰的“Plain English”步骤、截图和定位器&#xff0c;彻…