一.网络爬虫库

网络爬虫通俗来讲就是使用代码将HTML网页的内容下载到本地的过程。爬取网页主要是为了获取网之间需要中的关键信息,例如网页中的数据、图片、视频等。

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

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

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

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

二.requests库和网页源码

1.requests库的安装

在命令提示符下执行以下命令:

 pip install requests

安装完后可以使用命令查看库信息:

pip show requests

 2.网页源码

用户在使用浏览器访间网页时,往往会忽视网页的源代码,而获取网页中的信息需要从源代码出发。例如使用浏览器打开首页,在网页空白处单击鼠标右键,选择快捷菜单中的‘查看源码’。

 网页中的源代码形式与HTML代码形式基本相同,我们可尝试阅读网页中的源代码通过源代码可以轻松地获取网页中的文字、图片、视频等信息,还可以获取图片或视频文件的url并将文件下载到本地。而一个网页除了HTML代码还包含JawaScript脚本语言代码,JavaScript脚本语言使得浏览器可以解析和渲染网页源代码,使得用户可以阅览到图形界面,而不是阅读纯文本代码。网页中有大量数据是包含会在JavaScript脚本语言代码中的,而通过查看源代码的方式是无法获取这些数据的。网页源代码中是无法找到的,但可以通过检查(在网页空白处单击鼠标右键,选择快捷菜单中的检查选项)找到相应的信息

 三.获取网页资源

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)

 2.get()搜索信息

当在网页中搜索人民邮电出版社的某些指定信息时,输入关键词“Excel”时,从搜索结果网页中可以看到当前页面的网址为https://www.ptpress.com.cn/search?keyword=excel.其中https://www.ptpress.com.cn/为官网主页,search表示搜索,keyword表示搜索的关键网(这里为 excel,表示需要搜索的关键词为“excel”),“?”用于分隔search和keyword.在其他网页中搜索也有与以上类似的效果,search或keyword可能会用其他字符表示,但基本形式是相同的。

import requests
r = requests.get('https://www.ptpress.com.cn/search?keyword=excel')
print(r.text)

3.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

4.返回Response对象

通过get()函数获取HTML网页内容后,由于网页的多样性,通常还需要对网页返回的Response对象进行设置。Response属性:

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

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

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

5.设置编码

当访问一个网页时,如果获取的内容是乱码,这是由网页读取编码错误导致的,可以通过设置requests.get(url)返回的Response对象的encoding='utf'-8来修改Response对象.text'文本内容的编码方式。同时Response对象中提供了apparent_encoding()方法来自动识别网页的编码方式,不过由于此方法是由机器自动识别,因此可能会存在识别错误的情况。

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

Response对象.encoding=Response对象.apparent_encoding
import requests
r = requests.get('https://www.baidu.com')
r.encoding = r.apparent_encoding
print(r.text)

6.返回网页内容

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内容以二进制形式写入文件。
执行代码后将在相应文件夹中存储一张图片,

6.小项目案例:实现处理获取的网页信息

 项目描述:使用get()函数获取HTML网页源代码的目的在于让获取的信息为用户所用。

项目任务 :新书快递-人邮教育社区”网页中上架了新书现,需要使用requests库爬取当前网页中所有新书的书名。

项目实现步骤:

步骤1,通过使用requests库获取“新书快递-人邮教育社区”网页的全部内容。
步骤2,从网页中寻找到图书名,为了确保获取正确的图书名,需要提前在网页源代码中寻找到图书名并观察它们的特点。其步骤为:首先进入网页的源代码页面,其次观察到所有新上架图书的书名都在标签<h4>中,且位于<h4>标签的<a>标签中,标签中还存在属性title。这些特点在整个HTML网页源代码中是独一无二的。最后设计正则表达式,过滤开头为title且结尾为</ a></h4>的字符串内容。

项目实现代码:

import requests
import re
r = requests.get('https://www.ryjiaoyu.com/tag/details/7')
result = re.findall(r'title=(.+?)">(.+?)</a></h4>',r.text)
for i in range(len(result)):print('第',i+1,'本书: ',result[i][1])

第3行代码使用get()函数爬取“新书快递-人邮教育社区”网页。
第4行代码使用正则表达式对r.text(网页中的内容)进行查找,最终找出满足正则表达式条件的语句

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

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

相关文章

深入理解设计模式之代理模式:原理、实现与应用

在软件开发中&#xff0c;我们经常需要控制对某些对象的访问——可能是为了延迟加载、添加额外功能或保护敏感资源。这正是代理模式大显身手的地方。作为结构型设计模式的重要成员&#xff0c;代理模式在众多知名框架和系统中扮演着关键角色。本文将全面剖析代理模式的方方面面…

VSCode - VSCode 快速跳转标签页

VSCode 快速跳转标签页 1、标签页列表快速跳转 通过快捷键 Ctrl Tab 即可快速跳转标签页 # 操作方式先按住 Ctrl 键&#xff0c;再按 Tab 键&#xff0c;此时&#xff0c;即可打开标签页列表&#xff08;保持 Ctrl 键一直按住&#xff09;然后&#xff0c;再按 Tab 键&#xf…

深入理解设计模式:享元模式(Flyweight Pattern)

在软件开发中&#xff0c;我们经常会遇到需要创建大量相似对象的情况。如果每个对象都独立存储所有数据&#xff0c;将会消耗大量内存资源&#xff0c;导致系统性能下降。享元模式&#xff08;Flyweight Pattern&#xff09;正是为解决这一问题而生的经典设计模式。本文将深入探…

网络大提速,RDMA,IB,iWrap

本章第一节介绍的存储设备方面的创新解决了CPU访问存储设备的性能问题。但在实际的业务当中,数据的传输除了在节点内部的CPU与存储设备间外,节点之间也存在数据传输的需求。本节我们就介绍在网络传输方面是如何提速的。 在介绍新的网络技术之前,我们看看传统网络是如何传输…

【C++】红黑树,“红“与“黑”的较量

各位大佬好&#xff0c;我是落羽&#xff01;一个坚持不断学习进步的大学生。 如果您觉得我的文章有所帮助&#xff0c;欢迎多多互三分享交流&#xff0c;一起学习进步&#xff01; 也欢迎关注我的blog主页: 落羽的落羽 一、红黑树的概念与规则 红黑树是一种更加特殊的平衡二…

【愚公系列】《MIoT.VC》001-认识、安装 MIoT.VC 软件

💎【行业认证权威头衔】 ✔ 华为云天团核心成员:特约编辑/云享专家/开发者专家/产品云测专家 ✔ 开发者社区全满贯:CSDN博客&商业化双料专家/阿里云签约作者/腾讯云内容共创官/掘金&亚马逊&51CTO顶级博主 ✔ 技术生态共建先锋:横跨鸿蒙、云计算、AI等前沿领域…

git:tag标签远程管理

git tag v1&#xff1a;在当前所在分支创建标签v1git tag -a v2 -m release version&#xff1a;创建一个带有附注的标签git tag -d v2&#xff1a;删除本地标签git tag&#xff1a;查看标签git push origin 标签1 标签2……&#xff1a;把多个标签推送到远程git push origin -…

力扣 hot100 Day49

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 //抄的 class Solution { private:unordered_map<int, i…

jvm-sandbox-repeater 录制和回放

https://github.com/alibaba/jvm-sandbox-repeater/blob/master/docs/user-guide-cn.md 快速录制自己应用 step0 安装sandbox和插件到应用服务器 curl -s https://github.com/alibaba/jvm-sandbox-repeater/releases/download/v1.0.0/install-repeater.sh | sh step1 修改repe…

【C++底层剖析】++a vs a++:到底谁是左值,谁是右值?

在 C 编程中&#xff0c;我们经常使用 a 和 a 来实现自增操作。乍一看它们只是“先加还是后加”的语法糖&#xff0c;但你真的理解它们的底层机制、返回值类型和左值右值属性吗&#xff1f;1. a 和 a 的基础区别表达式名称语义返回值类型左值 / 右值a前置自增先将 a 加 1&#…

【世纪龙科技】汽车故障诊断与排除仿真教学软件让课堂更高效安全

随着汽车产业向智能化、电动化快速转型&#xff0c;职业院校汽修专业的教学模式正面临全新挑战。传统实车实训存在成本高、风险大、场景单一等问题&#xff0c;而行业对人才的要求却越来越高——既需要扎实的理论基础&#xff0c;又必须具备熟练的故障诊断能力。如何在保证安全…

网络基础9:按流负载均衡实验(等价路由)

实验eNS拓扑图&#xff1a;1. 网络拓扑与 IP 配置AR5&#xff1a;GE0/0/0: 192.168.1.1/24&#xff08;连接 AR6&#xff09;GE0/0/1: 192.168.3.1/24&#xff08;连接 AR8&#xff09;Loopback0: 1.1.1.1/32&#xff08;源地址&#xff09;AR6&#xff1a;GE0/0/0: 192.168.1.…

4G模块 A7680发送中文短信到手机

命令说明 基础AT指令 ATi显示产品的标志信息 ATCIMI查询IMSI ATCICCID从SIM卡读取ICCID ATCGSN查询产品序列号 ATCPIN查询卡状态 ATCSQ查询信号强度 ATCGATT查询当前PS域状态 ATCREG查询GPRS注册状态 ATCEREG查询4G注册状态 ATCGPADDR查询PDP地址 ATCMGF选择短信格式 ATCMGS发…

深度学习-线性神经网络

文章目录线性回归基本概念随机梯度下降矢量化加速正态分布和平方损失极大似然估计线性回归实现从0开始**torch.no_grad()的两种用途****为什么需要 l.sum().backward()&#xff1f;**调用现成库softmax回归图像数据集从0开始实现softmax利用框架API实现课程学习自李牧老师B站的…

【王树森推荐系统】推荐系统涨指标的方法04:多样性

涨指标的方法有哪些&#xff1f; 改进召回模型&#xff0c;添加新的召回模型改进粗排和精排模型提升召回&#xff0c;粗排&#xff0c;精排的多样性特殊对待新用户吗&#xff0c;低活用户等特殊人群利用关注&#xff0c;转发&#xff0c;评论这三种交互行为 排序的多样性 精排多…

1. Spring AI概述

一、前言 Spring AI 是由 Spring 团队推出的开源项目&#xff0c;旨在为 Java 开发者提供简洁、一致的 Spring 风格开发体验&#xff0c;用于构建基于生成式人工智能&#xff08;GenAI&#xff09;和大型语言模型&#xff08;LLM&#xff09;的应用程序。它通过标准化抽象层简…

[每日随题10] DP - 重链剖分 - 状压DP

整体概述 难度&#xff1a;1600 →\rightarrow→ 2200 →\rightarrow→ 2600 P6005 [USACO20JAN] Time is Mooney G 标签&#xff1a;DP 前置知识&#xff1a;链式前向星 难度&#xff1a;绿 1600 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 样例输…

【Ubuntu22.04】repo安装方法

背景 repo是Google开发的用于基于git管理Android版本库的一个工具&#xff0c;管理多个Git仓库的工具&#xff0c;它可以帮助您在一个代码库中管理多个Git仓库的代码。其在鸿蒙操作系统中大量使用。下面我们就介绍repo在wsl中的安装部署。 安装方法 使用中国科技大学资源 脚本i…

Vue3的definePros和defineEmits

在 Vue 3 中&#xff0c;defineProps 和 defineEmits 是组合式 API 中用于定义组件的 props 和 事件 的方法&#xff0c;提供了一种更简洁和明确的方式来管理组件的输入和输出。它们属于 Composition API 的一部分&#xff0c;在 Vue 2 中通常使用 props 和 $emit 来实现。1. d…

【华为机试】122. 买卖股票的最佳时机 II

文章目录122. 买卖股票的最佳时机 II描述示例 1示例 2示例 3提示解题思路核心观察关键洞察算法实现方法1&#xff1a;贪心算法&#xff08;推荐&#xff09;方法2&#xff1a;动态规划方法3&#xff1a;动态规划&#xff08;空间优化&#xff09;方法4&#xff1a;波峰波谷法算…