Python网络爬虫 学习笔记(1)requests库爬虫

news2024/11/30 10:36:18

文章目录

    • 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参数,将爬虫伪装成浏览器来访问网页。

方法举例

  1. 直接使用Requests爬虫访问亚马逊商城的官网主页,访问失败。
    在这里插入图片描述

  2. 在get方法中设置headers参数的内容,模拟使用版本号为5的Mozilla浏览器进行访问(其他内容都不用修改)。

r=requests.get("https://www.amazon.cn/",headers={"user-agent":"Mozilla/5.0"})
  1. 网页爬取成功(只截取了部分爬取内容)。
    在这里插入图片描述

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

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

相关文章

【C/C++】Windows下VS创建Linux项目

如果不想在Linux下用vim编写代码,可以在Windows下使用VS远程连接Linux(Linux下是不支持安装使用VS的),将VS上编写的代码通过 SSH协议 推送到Linux下,注意文件编写是在Windows上进行的,编译是在Linux下进行的…

【Hello Linux】Linux工具介绍 (make/makefile git)

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:介绍Linux的常用工具make/makefile git Linux项目自动化构建工具 – make/Makefile 背景 会不会写Makefile 从侧面说明了一个人是否具…

Spring Cloud微服务网关Gateway组件

目录 网关简介 什么是Spring Cloud Gateway Spring Cloud Gateway 功能特征 核心概念 工作原理 Spring Cloud Gateway快速开始 环境搭建 集成Nacos 路由断言工厂(Route Predicate Factories)配置 自定义路由断言工厂 过滤器工厂( …

window 配置深度学习环境GPU

CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…

秒杀项目之消息推送

目录一、创建消费者二、创建订单链路配置2.1 定义RabbitMQ配置类2.2 创建RabbitmqOrderConfig配置类三、如何实现RabbitMQ重复投递机制3.1 开启发送者消息确认模式3.2 消费发送确认3.2.1 创建ConfirmCallBack确认模式3.2.2 创建ReturnCallBack退回模式3.3 创建生产者3.4 创建消…

金三银四必看软件测试面试题,上百家公司面试都是这些套路

自我介绍说一下测试用例嗯,做测试,好多时间是在琢磨分析测试用例怎么去写,这个每个公司规范可能不太一样,但是大致思想是一致的。都是想要通过测试用例,把每一个分析到位,进行测试。就拿我上家公司来说吧&a…

数据库(2)--加深对统计查询的理解,熟练使用聚合函数

一、内容要求 利用sql建立学生信息数据库,并定义以下基本表: 学生(学号,年龄,性别,系号) 课程(课号,课名,学分,学时) 选课&#xff0…

融云入围「2022 云办公平台 TOP50」,进入「中国协同办公产业图谱」

2 月 10 日,中国科学院旗下《互联网周刊》颁布“2022 云办公平台 TOP50”,融云荣登榜单。 2 月 13 日,艾瑞咨询发布《2023 年中国协同办公行业研究报告》(下简称《报告》),对协同办公行业的供需动态和迭代方…

黑马】后台管理-项目优化和上线

一。项目优化优化1,加载进度条显示安装一个运行依赖,nprogress然后导包,调用对象展示和隐藏在main中基于拦截器实现展示进度条和隐藏进度条的效果如果触发请求拦截器,证明发起请求,希望展示进度条,如果触发…

消防应急照明和疏散指示系统——集中控制型系统的设计与应用

安科瑞 李亚俊 V:Acrel8757 摘要:伴随着建筑领域的良好发展,建筑工程建设越来越复杂,相应的消防配套设施也越来越先进,火灾发生时,人在燃烧产生的噪音和烟气中会产生恐惧、不安等不良的心理状态,进而影响他…

NLP篇章2:理解Transformer

Transformer编码,解码大的结构的理解 编码部分,每一个的小编码器的输入是前一个小编码器的输出, 而每一个小解码器的输入不光是它的前一个解码器的输出,还包括了整个编码部分的输出。 self-attention 自注意力机制 顾名思义就是…

【数据库】 MySQL备份恢复

目录 MySQL日志管理 一, MySQL日志类型 二,错误日志 三, 通用查询日志 四, 慢查询日志 五,二进制日志 1,开启日志 2,二进制日志的管理 3,日志查看 5,二进制日志还原数据…

MAC OSX安装Python环境 + Visual Studio Code

MAC上开发python怎么能少得了python3环境呢,而安装python3环境的方式也有多种,这里仅选用并记录本人认为比较方便的方式 安装Homebrew Homebrew是macOS 缺失的软件包管理器, 使用它可以在MAC上安装很多没有预装的东西,详细说明可…

上海霄腾自动化装备盛装亮相2023生物发酵展

上海霄腾自动化携液体膏体粉剂颗粒等灌装生产线解决方案亮相2023生物发酵展BIO CHINA2023生物发酵展,作为生物发酵产业一年一度行业盛会,由中国生物发酵产业协会主办,上海信世展览服务有限公司承办,2023第10届国际生物发酵产品与技…

SAS应用入门学习笔记5

input 操作符: 代码说明: 1)1 表示第1列字符;7表示第7列字符; 2)col1 表示第一列数据;col2 表示第二列数据; 3)4.2 表示的是4个字符,2表示小数点后两位&a…

Hazel游戏引擎(005)

本人菜鸟,文中若有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/GameEngineLightWeight(中文的注释适合中国人的你) 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码exter…

5、MyBatis框架——Mapper接口映射、给类起别名、MyBatis开启驼峰映射、MyBatis开启日志打印

目录 一、Mapper接口映射 1、创建数据库 2、搭建MVC分层结构 3、配置MyBatis全局参数 4、编辑DAO层接口 5、配置Mapper文件与DAO层绑定 (1)配置Mapper文件 (2)DAO层与Mapper文件标签的快速生成 6、代码测试 二、给类起别…

python|第四章考试题及练习题

本篇文章是对北京理工大学嵩天老师的《Python语言程序设计》第四章考试题及练习题的学习记录。 一、考试题 1、四位玫瑰数 问题描述: 四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。‪‬‪‬‪‬‪‬…

【云原生-Docker】docker容器自定义DNS解析

描述 在特定的情况下,或者在网络策略特殊定义下,需要自定义dns进行域名访问,在宿主机上配置了域名解析,对于docker容器无效。对于局域网内的域名解析,Docker 需要到 Docker 容器中配置 hosts 文件。 实现方式 docke…

使用Pandas也可以进行数据可视化

数据可视化是数据分析的一个重要方面,它提供了一种理解数据并从中得出有意义见解的方法。Pandas 是最常见的于数据分析的 Python 库,它基于Matplotlib扩展了一些常用的可视化图表,可以方便的调用,本篇文章就让我们看看有哪些图表可…