Python网络爬虫 学习笔记(1)requests库爬虫
文章目录
- Requests库网络爬虫
- requests.get()的基本使用框架
- requests.get()的带异常处理使用框架(重点)
- requests库的其他方法和HTTP协议(非重点)
- requests.get()的可选参数
- 网络爬虫引发的问题(非重点)
- 常见问题:网页禁止Python爬虫访问
Requests库网络爬虫
Requests库概述:Requests库是最简单和最基础的Python网络爬虫库,该库提供了七种主要方法。这七种方法中,request方法是最基础的,其他方法都是通过调用request方法来实现的。
requests.get()的基本使用框架
基本语法:r=requests.get(url)
语法解释:构造一个向服务器请求资源的Request对象,返回值是一个包含服务器资源的Response对象。
完整形式语法:requests.get(url,params=None,**kwargs)
- params:在url中增加的额外参数,是可选的参数。
- **kwargs:12个控制访问的参数。
Response对象的属性:
- status_code:状态码。是200表示访问成功,不是200表示访问失败。
- header:网页的头部
- List item
信息。
- text:HTTP响应的字符串形式,也就是url对应的页面内容。
- encoding:从HTTP的头部所猜测的网页编码方式。如果header中不存在charset字段,则默认编码方式为ISO-8859-1。
- apparent_encoding:从HTTP响应的内容中分析出的编码方式。往往需要用apparent_encoding来替代encoding。
- content:HTTP响应内容的二进制形式。
使用get方法的基本流程:检查网页状态码,如果是200则继续,否则产生异常;
get方法使用的完整例子(爬取百度主页):
# 首先需要导入requests库
import requests
# 使用get方法爬取百度主页的内容
r=requests.get("https://www.baidu.com")
# 判断网页访问是否成功
if r.status_code==200: # 网页访问成功# 如果header中不存在charset字段,则encoding采用默认编码方式,很可能解析错误if r.encoding=="ISO-8859-1":# 将网页内容编码方式修改成从内容分析出的编码方式r.encoding=r.apparent_encoding# 输出网页信息print(r.text)
# 网页访问失败
else:print("网页访问失败!")
运行效果:
requests.get()的带异常处理使用框架(重点)
上面的内容中我们通过if语句来判断状态码从而进行后续的步骤,但是状态码的判断本身应该属于异常处理的范畴,通过if语句判断会破坏程序的主体框架,因此有必要使用异常处理的方法来判定状态码。
Requests库的六种常用异常:
- ConnectionError:网络连接错误异常,如DNS查询失败和拒接连接等。
- HTTPError:HTTP错误异常。
- URLRequired:URL缺失异常。
- TooManyRedirects:由于超过最大重定向次数导致的重定向异常。
- ConnectTimeOut:连接远程服务器超时异常。
- TimeOut:请求URL超时产生的超时异常。
raise_for_status方法:如果Response对象的状态码不是200,则产生HTTPError异常。
经过改进的get方法使用例子:
# 首先需要导入requests库
import requests
# 使用get方法爬取百度主页的内容
r=requests.get("https://www.baidu.com")
# 对可能抛出异常的部分放入try块中
try:# 检测Response对象的状态码,判断是否抛出异常r.raise_for_status()# 如果header中不存在charset字段,则encoding采用默认编码方式,很可能解析错误if r.encoding=="ISO-8859-1":# 将网页内容编码方式修改成从内容分析出的编码方式r.encoding=r.apparent_encoding# 输出网页信息print(r.text)
# 检测到异常后执行的语句
except:print("网页访问失败!")
requests库的其他方法和HTTP协议(非重点)
HTTP概述:
- 定义:超文本传输协议,是一个基于请求和响应模式的、无状态的应用层协议。
- URL:HTTP协议采用URL作为定位网络资源的标识,也就是一个URL就对应一个数据资源。
URL格式:https://host[:port][path]
- host:合法的Internet主机域名或IP地址;
- port:端口号,默认端口号为80。
- path:请求资源的路径。
Reuquests库的其他方法:
- request():构造一个请求,是支撑以下各个方法的基础方法。
- get():获取HTML网页的主要方法。
- head():获取HTML网页头部信息的方法。在一些网页资源很大时可以采用此方法以节约带宽。
- post():向HTML网页提交POST请求的方法。可以在URL位置的资源后增加新的数据。
- put():向HTML网页提交PUT请求的方法。向URL位置存储一个资源,覆盖原先URL位置的资源。
- patch():向HTML网页提交局部修改请求的方法。修改该处资源的部分内容。
- delete():向HTML网页提交删除请求的方法。请求删除URL位置存储的资源。
requests.get()的可选参数
params:
- 内容:字典或字节序列,作为参数增加到URL中。
- 作用:将一些键值对增加到URL中,使得访问URL时能够对资源进行筛选。
data:字典、字节序列或文件对象,主要用于向服务器提交内容。
json:
- 内容:json格式的数据(也是HTTP协议最常使用的数据格式)
- 作用:可以作为内容部分向服务器提交。
head:
- 定制访问某个URL的HTTP协议的协议头。
- 可以模拟任何浏览器的任何版本对网站进行访问。
timeout:
- 内容:设置超时时间,以秒为单位。
- 作用:如果超过指定时间内还没有访问成功,将产生TimeOut异常。
proxies:
- 内容:字典类型,设置访问的代理服务器;
- 作用:使用该字段可以有效隐藏用户爬取网页的源IP地址信息。
网络爬虫引发的问题(非重点)
网络爬虫的分类:
- 小规模爬虫:以爬取网页为目的,数据量小,对爬取速度不敏感。类型代表:Requests库。
- 中规模爬虫:用于爬取系列网站,数据量较大,对爬取速度敏感。典型代表:Scrapy库。
- 大规模爬虫:爬取速度非常关键,对于所有网络信息进行爬取,只能定制开发而不能借助第三方库。典型代表:搜索引擎。
网络爬虫带来的问题:
- 资源开销:受限于编写水平和目的,网络爬虫会给Web服务器带来巨大的资源开销。
- 法律风险:服务器上的数据可能有产权归属,因此使用网络爬虫获取数据可能带来法律风险。
- 隐私泄露:网络爬虫可以突破简单的访问控制,从而获得个人被保护的数据。
网络爬虫的限制:
- 来源审查:检查来访HTTP协议头的User-Agent域,只响应浏览器或友好爬虫的访问。
- 发布Robots协议:告知所有爬虫网站的爬取策略,要求爬虫遵守。
Robots协议:
- 全称:网络爬虫排除标准;
- 作用:告知网络爬虫哪些界面可以抓取,哪些不行;
- 形式:在网站根目录下的robots.txt文件。
- 举例(百度的Robots协议):www.baidu.com/robots.txt
备注:Robots协议是建议而非约束性的,也就是说网络爬虫可以不遵守Robots协议,但是这样可能带来法律风险。如果一个网络爬虫的访问次数和人类访问类似,那么从原则上可以不遵守Robots协议。
常见问题:网页禁止Python爬虫访问
解决方法:设置get函数的header参数,将爬虫伪装成浏览器来访问网页。
方法举例:
-
直接使用Requests爬虫访问亚马逊商城的官网主页,访问失败。
-
在get方法中设置headers参数的内容,模拟使用版本号为5的Mozilla浏览器进行访问(其他内容都不用修改)。
r=requests.get("https://www.amazon.cn/",headers={"user-agent":"Mozilla/5.0"})
- 网页爬取成功(只截取了部分爬取内容)。
相关文章:
Python网络爬虫 学习笔记(1)requests库爬虫
文章目录Requests库网络爬虫requests.get()的基本使用框架requests.get()的带异常处理使用框架(重点)requests库的其他方法和HTTP协议(非重点)requests.get()的可选参数网络爬虫引发的问题(非重点)常见问题…...
Splay
前言 Splay是一种维护平衡二叉树的算法。虽然它常数大,而且比较难打,但Splay十分方便,而且LCT需要用到。 约定 cnticnt_icnti:节点iii的个数 valival_ivali:节点iii的权值 sizisiz_isizi:节点iii的子…...
智能网联汽车ASIL安全等级如何划分
目录一、功能安全标准二、功能安全等级定义三、危险事件的确定四、ASIL安全等级五、危险分析和风险评定六、功能安全目标的分解一、功能安全标准 ISO 26262《道路车辆功能安全》脱胎于IEC 61508《电气/电子/可编程电子安全系统的功能安全》,主要定位在汽车行业&…...
Stable Diffusion 1 - 初始跑通 文字生成图片
文章目录关于 Stable DiffusionLexica代码实现安装依赖库登陆 huggingface查看 huggingface token下载模型计算生成设置宽高测试迭代次数生成多列图片关于 Stable Diffusion A latent text-to-image diffusion model Stable Diffusion 是一个文本到图像的潜在扩散模型ÿ…...
【cuda入门系列】通过代码真实打印线程ID
【cuda入门系列】通过代码真实打印线程ID1.gridDim(6,1),blockDim(4,1)2.gridDim(3,2),blockDim(2,2)【cuda入门系列之参加CUDA线上训练营】在Jetson nano本地跑 hello cuda! 【cuda入门系列之参加CUDA线上训练营】一文认识cuda基本概念 【cuda入门系列之参加CUDA线…...
【Python语言基础】——Python NumPy 数据类型
Python语言基础——Python NumPy 数据类型 文章目录 Python语言基础——Python NumPy 数据类型一、Python NumPy 数据类型一、Python NumPy 数据类型 Python 中的数据类型 默认情况下,Python 拥有以下数据类型: strings - 用于表示文本数据,文本用引号引起来。例如 “ABCD”…...
数据工程师需要具备哪些技能?
成为数据工程师需要具备哪些技能?数据工程工作存在于各个行业,在银行业、医疗保健业、大型科技企业、初创企业和其他行业找到工作机会。许多职位描述要求数据工程师、拥有数学或工程学位,但如果有合适的经验学位往往没那么重要。 大数据开发…...
Cosmos 基础 -- Ignite CLI(二)Module basics: Blog
一、快速入门 Ignite CLI version: v0.26.1 在本教程中,我们将使用一个模块创建一个区块链,该模块允许我们从区块链中写入和读取数据。这个模块将实现创建和阅读博客文章的功能,类似于博客应用程序。最终用户将能够提交新的博客文章&#x…...
Quartz 快速入门案例,看这一篇就够了
前言 Quartz 是基于 Java 实现的任务调度框架,对任务的创建、修改、删除、触发以及监控这些操作直接提供了 api,这意味着开发人员拥有最大的操作权,也带来了更高的灵活性。 什么是任务调度? 任务调度指在将来某个特定的时间、固…...
图解LeetCode——1233. 删除子文件夹(难道:中等)
一、题目 你是一位系统管理员,手里有一份文件夹列表 folder,你的任务是要删除该列表中的所有 子文件夹,并以 任意顺序 返回剩下的文件夹。 如果文件夹 folder[i] 位于另一个文件夹 folder[j] 下,那么 folder[i] 就是 folder[j] …...
Doris--简单使用
一、数据表的创建与数据导入 1.1、创建表 1.1.1、单分区 CREATE TABLE table1 (siteid INT DEFAULT 10,citycode SMALLINT,username VARCHAR(32) DEFAULT ,pv BIGINT SUM DEFAULT 0 -- 聚合模型, value column 使用sum聚合 ) AGGREGATE KEY(siteid, citycode, …...
使用GPT让你的RStudio如虎添翼
API的的调用目前来说不限制地区,但是OpenAI的API的申请限制了地区。运行的时候,如果出现了429,意味着你被限流了,需要等一会才行。 前提是,你需要注册一个OpenAI的账户,然后在https://openai.com/api/ 里申…...
Python 算法交易实验45 再探量化
说明 去年大部分精力都在构建底层架构和工具了,一直都没有时间搞量化。目前底层的数据库服务(ADB)和清洗(衍生 AETL) 工具已经好了,我想尽快的把量化启动起来。 内容 1 思想 作为交易来说,只有买卖。通过数据分析与模型,我们获得的增强点是决策。在合适的时候进行买卖的…...
Dubbo加载配置文件方式,加载流程,加载配置文件源码解析
配置方法 API配置 以Java编码的方式组织配置,Dubbo3配置API详解 :https://dubbo.apache.org/zh/docs3-v2/java-sdk/reference-manual/config/api/#bootstrap-api public static void main(String[] args) throws IOException {ServiceConfig<Greet…...
十大开源测试工具和框架,一定有你需要的
目录 前言 Katalon Studio Selenium Appium JMeter SOAP UI Robot Framework Watir JUnit Robotium Citrus 总结 前言 免费的开源框架和工具由于其开源特性,现在逐渐成为自动化测试的首选解决方案。区别在于,你是喜欢使用类库编写一个全新的…...
加密技术在android中的应用
1、算法基础 算法基础参照linux的全盘加密与文件系统加密在android中的应用 消息摘要算法 对称加密算法 非对称加密算法...
备战蓝桥杯【一维前缀和】
🌹作者:云小逸 📝个人主页:云小逸的主页 📝Github:云小逸的Github 🤟motto:要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前…...
研报精选230214
目录 【行业230214艾瑞股份】中国增强现实(AR)行业研究报告【行业230214国信证券】信息安全深度剖析5:密评和信创双催化,密码产业开启从1到N【行业230214民生证券】磁性元器件深度报告:乘新能源之风,磁性元…...
【SSL/TLS】准备工作:证书格式
证书格式1. 格式说明1.1 文件编码格式1.2 文件后缀格式2. xca导出格式1. 格式说明 1.1 文件编码格式 1. PEM格式: 使用Base 64 ASCII进行编码的纯文本格式。后缀为“.pem”, ".cer", ".crt", ".key" 2. DER格式 二进制编码格式,文件…...
Linux常用命令---系统常用命令
Linux系统常用命令场景一: 查看当前系统内核版本相关信息场景二: sosreport 命令场景三: 如何定位并确定命令?场景四:查看当前系统运行负载怎场景五: 查看当前系统的内存可用情况场景六:查看网卡…...
C 结构体
C 数组允许定义可存储相同类型数据项的变量,结构是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性ÿ…...
手语检测识别
论文:Real-Time Sign Language Detection using Human Pose Estimation Github:https://github.com/google-research/google-research/tree/master/sign_language_detection SLRTP 2020 手语识别任务包括手语检测(Sign language detection&a…...
android fwk模块之Sensor架构
本文基于Android 12源码整理,包含如下内容: 通信架构应用层实现使用方式SensorManager抽象接口具体实现fwk层的实现native中的SensorManager的初始化流程native中的消息队列初始化与数据读取sensorservice实现HAL层的实现通信架构 应用层实现 涉及代码&…...
安装less-loader5出现webpack版本不兼容
今天遇到一个问题: 安装less-loader5之后其它包提示peerDependencies WARNING,意思是包版本不兼容。 【难题】 虽然NPM已经很自动化了,但依赖问题真的是一个难题,无法自动解决,需要人工干预调整。 【解决办法】 去查…...
Java 网络编程
1.UDP和TCPUDP和TCP是传输层协议中最核心的两种协议他们的特点分别是UDP: 无连接,不可靠传输,面向数据报,全双工TCP: 有连接,是可靠传输,面向字节流,全双工有无连接有连接:就好比两个人打电话,打电话的一方发出连接请求,被打电话的一方选择确认连接,此时双方才能进行通话无连接…...
BEV学习记录
近期可能要经常性的开展BEV工作,打算把自己觉着不错的网站拿出来记录一下。 首先贴上来我还没有细读的一篇觉着不错的文章。 自动驾驶感知新范式——BEV感知经典论文总结和对比(上)_苹果姐的博客-CSDN博客_bev视角 开山之作--LSS ECCV 202…...
Webrtc Native C++切换音频输入源
modules/audio_device/audio_device_impl.cc #include “api/audio_options.h” #include “modules/audio_device/include/factory.h” // 创建一个 AudioDeviceModule 对象 auto audio_device_module = webrtc::AudioDeviceModule::Create( webrtc::AudioDeviceModule::kPl…...
裸辞5个月,面试了37家公司,终于找到理想工作了
上半年裁员,下半年裸辞,有不少人高呼裸辞后躺平真的好快乐!但也有很多人,裸辞后的生活五味杂陈。 面试37次终于找到心仪工作 因为工作压力大、领导PUA等各种原因,今年2月下旬我从一家互联网小厂裸辞,没想…...
Mybatis-plus@DS实现动态切换数据源应用
目录1 DS实现动态切换数据源原理2 不可在事务中切换数据库分析解决3 原因解析1 DS实现动态切换数据源原理 首先mybatis-plus使用com.baomidou.dynamic.datasource.AbstractRoutingDataSource继承 AbstractDataSource接管数据源;具体实现类为com.baomidou.dynamic.d…...
SpringBoot的创建和使用
SpringBoot是什么?SpringBoot诞生的目的就是为了简化Spring开发,而相对于Spring,SpringBoot算是一个很大的升级,就如同汽车手动挡变成了自动挡。Spring:SpringBoot:SpringBoot的优点SpringBoot让Spring开发…...
东莞做网站 南城石佳/seo快速收录快速排名
HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,…...
湿地保护宣教网站建设意义/网络宣传怎么做
我是Android和AndroidStudio(AS)的新手,我已经花了好几个小时尝试使用AS“克隆”一个项目。非常感谢上面给出的现有答案让我走上正确的道路。对于任何一个新手,像我一样,以下详细的分步说明应该证明是有用的:>使用Windows资源管…...
大庆建设局网站/如何做宣传推广效果最好
搜索热词用file_get_contents()抓取了 这个网址上的内容http://simonfenci.sinaapp.com/index.PHP?keysimon&wd1314abc看似好像反回的是数组。。但是我不管怎么用foreach循环都报错。。我只想把数组中的word里面的值 取出来。方法如下:正解(其他的字段一样&…...
css div怎么做网站/阿里域名注册网站
git config --global credential.helper store 下次git输入账号密码之后,就不需要输入账号密码了。...
陕西专业网站开发公司/昆明优化网站公司
最近项目中有个在EditText中输入子网掩码(xxx.xxx.xxx.xxx)形式的需求,只需 手动填入数字,自动添加”.”进去。于是想到了EditText的addTextChangedListener, 不过在editText.setText()时就碰到了问题,报了java.lang.StackOverf…...
国外免费网站做推广/俄罗斯搜索引擎yandex推广
小哼买书(C&Java实现) 本篇博客主要是《啊哈!算法》的读书笔记,一本很好的算法书,这里做一下记录。 分别利用三种算法解小哼买书问题,主要依据书中代码,顺带写了一下Java语言的实现。 1、桶…...