目录

一、网络爬虫的介绍

1.网络爬虫库

2.robots.txt 规则

二、requests 库和网页源代码

1.requests 库的安装

2.网页源代码

三、获取网页资源

1.get () 函数

(1)get() 搜索信息

(2)get() 添加信息

2.返回 Response 对象

(1)Response 的属性

(2)设置编码

(3)返回网页内容


一、网络爬虫的介绍

1.网络爬虫库

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

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

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

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

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

本章主要介绍 requests 库和 selenium 库。


2.robots.txt 规则

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

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

robots.txt 规则用于表明当前网站中的哪些内容是可以访问的,哪些内容是禁止访问的。接下来具体介绍 robots.txt 文件的内容。

User-agent:表示访问网站的搜索引擎,如图中一共存在 3 个 User-agent 内容,第 1 个 User-agent 的值为 *,表示所有类型的搜索引擎都需要遵守第 2~21 行的规则。第 2 个 User-agent 的值为 Wandoujia Spider,表示 Wandoujia Spider 搜索引擎需要遵守的规则。第 3 个 User-agent 的值为 Mediapartners-Google,表示Mediapartners-Google 搜索引擎需要遵守的规则。

Disallow:表明该搜索引擎不允许访问的 url。例如图中的 /subject_search,表明豆瓣官网根目录下的 /subject_search 是不允许被访问的,读者可以尝试使用浏览器访问此 url 并观察结果。当 Disallow 的值为 / 时,表明不允许此搜索引擎访问网站的任何内容。例如图所示的 Wandoujia Spider 搜索引擎就不能访问豆瓣官网中的任何信息。

Allow:表明允许该搜索引擎访问的 url。例如图中的 /ads.txt 是允许被任何搜索引擎访问的。

Sitemap:网站地图,用于提供网站中所有可以被爬取的 url,方便搜索引擎能够快速爬取到对应网页。

#:表明注释,与 Python 中的注释概念相同。Crawl - delay:5 用于提醒用户在使用爬虫工具时,每次访问之间需要延迟 5 秒钟,这是为了避免因用户频繁访问而导致服务器拥挤,使得用户无法正常使用浏览器。每个网站在同一时间内有访问上限,超过上限将导致新用户无法访问,例如在 “双十一” 期间会有大量用户访问同一个购物网站,这时候如果使用爬虫工具频繁访问该网站,且爬虫工具是由代码实现的,访问速度将会非常快,就可能导致网站拥堵,使用户无法正常进入网站,还可能造成商家的经济损失。

因此读者在使用爬虫工具访问某网站时,需要先阅读网站的 robots.txt 规则并严格遵守此规则。但有些网站并没有设定 robots.txt 规则,例如访问人民邮电出版社官网的 robots.txt 规则的结果如图所示。当网站中没有 robots.txt 规则时,一般默认允许用户使用爬虫工具访问,但仍然要遵守《中华人民共和国网络安全法》等。


二、requests 库和网页源代码

1.requests 库的安装

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

pip install requests

2.网页源代码

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

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

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

而一个网页除了 HTML 代码还包含 JavaScript 脚本语言代码,JavaScript 脚本语言代码使得浏览器可以解析和渲染网页源代码,使得用户可以浏览到图形化界面,而不是阅读纯文本代码。网页中有大量数据是包含在 JavaScript 脚本语言代码中的,而通过查看源代码的方式是无法获取这些数据的。例如图中的图片信息在网页源代码中是无法找到的,但可以通过检查(在网页空白处单击鼠标右键,选择快捷菜单中的 “检查” 选项)窗口查看渲染后的网页内容,找到对应图片的 url,如图所示。

获取人民邮电出版社官网中期刊页的《通信学报》封面图片 url 的步骤如下。

步骤 1,单击检查窗口中的元素选择按钮,如图 15 - 6 所示的标注框所在位置内的图标。

步骤 2,单击网页中的图片位置,检查窗口将会自动跳转到该图片对应的源代码位置。

步骤 3,浅蓝色部分的<img src="/upload/2017/06/53def7a9b43044a1b1afd1991d82a323.png">为图片的源代码内容,其中upload/2017/06/53def7a9b43044a1b1afd1991d82a323.png为图片在网站服务器中的目录地址,完整的 url 只需要在前面加入网站主域名即可。

虽然网站中的内容是动态更新的,但只需按照上面介绍的方法执行即可获取大部分网站中的信息,包括文字、图片、音乐、视频等。


三、获取网页资源

requests 库具有获取网页内容和向网页中提交信息的功能。

1.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()语句输出变量rtext方法,Response 对象中的text方法用于获取相应的文本内容,即网页的源代码。

运行结果:

执行代码后的输出结果如图所示。对比使用代码输出的信息和使用浏览器访问的网页源代码,它们的内容是相同的。


(1)get() 搜索信息

当在网页中搜索是人民邮电出版社中的某些指定信息时,可以在图所示的搜索框中输入搜索信息,例如输入关键词"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” 的信息。


(2)get() 添加信息

get() 函数中第 2 个参数 params 会以字典的形式在 url 后自动添加信息,需要提前将 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=excel,该使用形式便于灵活设定需要搜索的信息,即可以添加或删除字典信息。

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


    2.返回 Response 对象

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

    (1)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 r.status_code == 200:print(r.text)
    else:print('本次访问失败')
    

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

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

    url:响应的最终 url 位置。

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

    cookies:服务器返回的文件。这是服务器为辨别用户身份,对用户操作进行会话跟踪而存储在用户本地终端上的数据。


    (2)设置编码

    当访问一个网页时,如果获取的内容是乱码。这是由网页读取编码错误导致的,可以通过设置requests.get(url)返回的 Response 对象的encoding='utf - 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 行代码设置自动识别网页的编码方式,执行代码后的输出结果中将包含可识别的文字,而不再是乱码。当设置自动识别编码方式后依然出现内容乱码时,读者需要自行设置encoding编码方式。


    (3)返回网页内容

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

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

    import requests
    r = requests.get('https://cdn.ptpress.cn/uploadimg/Material/978-7-115-41359-8/72jpg/41359.jpg')
    f2 = open('b.jpg','wb')
    f2.write(r.content)
    f2.close()
    

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

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

    第 4 行代码将获取的 url 内容以二进制形式写入文件。

    执行代码后将在相应文件夹中存储一张图片,如图所示。

    运行结果:

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

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

    相关文章

    平板可以用来办公吗?从文档处理到创意创作的全面测评

    在快节奏的现代职场&#xff0c;一个核心疑问始终萦绕在追求效率的职场人心中&#xff1a;平板电脑&#xff0c;这个轻薄便携的设备&#xff0c;真的能替代笔记本电脑&#xff0c;成为值得信赖的办公伙伴吗&#xff1f; 答案并非简单的“是”或“否”&#xff0c;而是一个充满潜…

    docker gitlab 备份 恢复 版本升级(16.1.1到18.2.0)

    docker 启动 # 在线 docker pull gitlab/gitlab-ce:latest # 离线 docker save -o gitlab-ce-latest.tar gitlab/gitlab-ce:latest docker load -i gitlab-ce-latest.tardocker run --detach \--publish 8021:80 --publish 8023:22 \ --name gitlab_test \--restart always \-…

    web3 区块链技术与用

    #53 敲点算法题 瑞吉外卖day4 调整心态 睡眠 及精神 web3 以下是应北京大学肖臻老师《区块链技术与用》公开课的完整教学大纲&#xff0c;综合课程内容、技术模块及前沿扩展&#xff0c;分为核心章节与专题拓展两部分&#xff0c;引用自公开课资料及学员笔记。 &#x1f4…

    Redis1:高并发与微服务中的键值存储利器

    redis中存储的数据格式为键值对&#xff08;Key,Value&#xff09;在高并发的项目和微服务的项目会频繁的用到redisNoSQL型数据库1.初始Redis1.1认识NoSQLSQL&#xff1a;structure query language关系型数据库结构化&#xff1a;有固定格式要求&#xff08;表关系&#xff0c;…

    /字符串/

    字符串 个人模板 5. 最长回文子串 93. 复原 IP 地址 43. 字符串相乘 227. 基本计算器 II

    我的开发日志:随机数小程序

    文章目录前言UI设计代码前言 为什么我要设计这个程序呢&#xff1f;因为我要用&#xff0c;懒得在网上下载了&#xff0c;于是干脆写了一个。 UI设计 UI是我凹出来的&#xff0c;你们要使用&#xff0c;直接新建一个UI.ui文件&#xff0c;然后把下面的东西输进去就可以了。 …

    《Oracle SQL:使用 RTRIM 和 TO_CHAR 函数格式化数字并移除多余小数点》

    select RTRIM(to_char(1222.11123344,fm9999990.9999),.) from dual 这条 SQL 语句主要用于对数字进行格式化处理&#xff0c;并移除格式化结果右侧多余的小数点。下面将详细拆解该语句的执行过程和各部分作用。语句详细拆解1. to_char(1222.11123344,fm9999990.9999)函数功能&…

    「Java案例」方法重装求不同类型数的立方

    利用方法重装实现不同类型数值的立方计算 立方计算方法的重载实现 编写一个程序,要求编写重载方法xxx cube(xxx value)实现对不同类型数值计算立方。 # 源文件保存为“CubeCalculator.java” public class CubeCalculator {public static void main(String[] args) {// 测试…

    API 接口开发与接入实践:自动化采集淘宝商品数据

    在电商数据分析、价格监控等场景中&#xff0c;自动化采集淘宝商品数据具有重要价值。本文将详细介绍如何通过 API 接口开发实现淘宝商品数据的自动化采集&#xff0c;包含完整的技术方案和代码实现。 一、淘宝 API 接入基础 1. 接入流程概述 注册淘宝账号获取 ApiKey 和 Ap…

    python-pptx 的layout 布局

    一、布局基础概念 在 PowerPoint 中&#xff0c;布局&#xff08;Layout&#xff09; 决定了幻灯片的占位符&#xff08;如标题、内容、图片等&#xff09;的排列方式。python-pptx 提供了对布局的编程控制。二、默认布局类型及索引 通过 prs.slide_layouts[index] 访问&#x…

    服务器mysql数据的简单备份脚本

    服务器mysql数据的简单备份脚本 一个小型项目mysql数据库数据的定时备份 通过crontab定时执行脚本: 0 1 * * * /home/yuyu/mysqlbak.sh备份文件加入时间戳,防止覆盖支持删除超过x天的备份数据文件&#xff0c;防止备份数据文件太多 #!/bin/bash# 配置变量 DB_HOST"127.0.…

    数据分析:从数据到决策的核心逻辑与实践指南

    在数据驱动决策的时代&#xff0c;“数据分析” 早已不是专业分析师的专属技能&#xff0c;而是每个职场人都需要掌握的基础能力。但很多人在面对数据时&#xff0c;常会陷入 “罗列数据却无结论”“指标好看却解决不了问题” 的困境。本文将基于数据分析的核心定义、关键维度和…

    元宇宙与Web3.0:技术特征、关系及挑战

    一、元宇宙的技术特征&#xff08;2025年&#xff09;1. 空间构建技术3D建模与渲染&#xff1a;实时渲染技术&#xff08;如Unity HDRP&#xff09;实现路径追踪光追&#xff0c;AI生成模型&#xff08;NVIDIA Get3D&#xff09;3秒生成3D场景。数字孪生技术&#xff1a;城市级…

    关于一个引力问题的回答,兼谈AI助学作用

    关于一个引力问题的回答&#xff0c;兼谈AI助学作用今日&#xff0c;一个小朋友问我&#xff0c;他从一本物理科普读物上看到这样依据话&#xff1a;地球对人造地球卫星的引力大于太阳对人造地球卫星的引力&#xff0c;但太阳对月亮的引力大于地球对月亮的引力。因书上没有解释…

    Java使用FastExcel实现模板写入导出(多级表头)

    依赖配置 (Maven pom.xml)<dependencies><!-- FastExcel 核心库 --><dependency><groupId>cn.idev.excel</groupId><artifactId>fastexcel</artifactId><version>1.0.0</version></dependency><!-- Apache POI…

    postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?

    3天精通Postman接口测试手动到自动&#xff0c;全套项目实战教程&#xff01;&#xff01;当你在 Postman 中测试接口时&#xff0c;如果一个参数有多个需要测试的值&#xff0c;有几种高效的方法可以实现&#xff1a; 1. 使用 CSV 或 JSON 数据文件进行数据驱动测试 这是最推…

    imx6ull UI开发

    imx6ull UI开发简介在imx6ull上开发UI 应用硬件层面内核驱动显示设备文件描述符设备树软件LVGL用户空间内核QT在imx6ull上开发UI 应用 在 Linux 系统中&#xff0c;应用程序需要通过操作 RGB LCD 的显存来实现在屏幕上显示字符、图像等信息。由于 Linux 采用严格的内存管理机制…

    虚拟化测试工具Parasoft Virtualize如何为汽车企业提供仿真测试?

    在汽车电子研发中&#xff0c;传统路测曾是验证ECU&#xff08;电子控制单元&#xff09;、车载通信、OTA升级等功能的可靠手段。然而&#xff0c;随着智能驾驶和软件定义汽车&#xff08;SDV&#xff09;的发展&#xff0c;这种依赖物理车辆的测试方式面临显著挑战&#xff1a…

    QT之openGL使用(一)

    OpenGL简介 官网&#xff1a;OpenGL - The Industry Standard for High Performance Graphics 中文官网&#xff1a;主页 - LearnOpenGL CN OpenGL&#xff08;Open Graphics Library&#xff09;是一种跨语言、跨平台的图形编程接口&#xff0c;主要用于渲染二维和三维矢量…

    基于生成对抗网络增强主动学习的超高温陶瓷硬度优化

    复现论文:基于生成对抗网络增强主动学习的超高温陶瓷硬度优化 我将使用Python复现这篇关于使用生成对抗网络(GAN)增强主动学习来优化超高温陶瓷(UHTC)硬度的研究论文。以下是完整的实现代码和解释。 1. 环境准备和数据加载 首先,我们需要准备必要的Python库并加载数据。 …