爬虫入门(一)

爬虫入门(一)

先介绍一下request库

request库通俗的讲就是一个可以自动提交网络请求的API,掌握定向网络数据爬取和网页解析的基本能力。

以下是该API一些常用的方法

requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HTML网页的主要方法,对应于HTTP的GET
requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD
requests.post(向HTML网页提交POST请求的方法,对应于HTTP的POST
requests.put(向HTML网页提交PUT请求的方法,对应于HTTP的PUT
requests.patch() 向HTML网页提交局部修改请求,对应于HTTP的PATCH
requests.delete() 向HTML页面提交删除请求,对应于HTTP的DELETE

以get为例子
在这里插入图片描述
当我们输入一个URL并且调用get方法后,它会根据你的URL找到对应的服务器以及请求文件所在的目录,然后返回一个包含服务器资源的response对象。

import requests
url = "http://www.baidu.com"
r = requests.get(url)//这里的r就是response对象

get方法基本框架如下
在这里插入图片描述

通过一个简单的get方法得到包含服务器资源的response对象后,怎么利用这个对象呢?

我们可以与浏览器作对比,当在浏览器上输入URL后,浏览器会发生什么变化呢?(以一个简单的只包含文字的网页为例子)

  1. 首先对服务器发出请求
  2. 收到服务器的响应头
  3. 检查响应头的状态码(是200说明成功继续45步)
  4. 检查响应头的编码方式
  5. 根据该编码方式,将响应头内容文字显示在浏览器应用上

response对象其实就类似服务器发给浏览器的响应头
所以我们也可以从response对象中得到一些信息。
在这里插入图片描述
可以从response对象中得到返回的状态,当状态为200时,进而可以得到HTTP响应的字符串形式或者二进制形式(非文字类),以及两种猜测的编码方式。
如下:
在这里插入图片描述

思考一下,上面只说了拿到响应头并且状态码为200的情况,如果遇到其它的错误怎么办,我们怎么去发现并解决它?

这就不得不提到python的异常处理功能,那么requests有如下异常:
在这里插入图片描述
最常用的就是connectionerror和timeout和httperror,依次由于多次访问某个网站会被拒绝访问,网络问题导致的超时,状态码不是200造成的。
这时再引入一个方法,可以直接判断状态是不是200,不需要写if语句来判断。

r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要
增加额外的if语句,该语句便于利用try‐except进行异常处理,如果不是200直接抛出HttpError异常

通用代码框架1.0

在这里插入图片描述

再回顾HTTP协议

在这里插入图片描述
在这里插入图片描述

除了GET,其它还有哪些有意思的方法呢

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

post、get和head的区别

HEAD: 只请求页面的首部。

GET: 请求指定的页面信息,并返回实体主体。

POST: 请求服务器接受所指定的文档作为对所标识的URL的新的从属实体。

网络角度分析

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

带来思考

(1)HTTP 定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST。事实上 GET 适用于多数请求,而保留 POST 仅用于更新站点。
(2)在FORM提交的时候,如果不指定Method,则默认为GET请 求,Form中提交的数据将会附加在url之后,以?分开与url分开。字母数字字符原样发送,但空格转换为“+“号,其它符号转换为%XX,其中XX为该符号以16进制表示的ASCII(或ISO Latin-1)值。GET请求请提交的数据放置在HTTP请求协议头中,而POST提交的数据则放在实体数据中
GET方式提交的数据最多只能有1024字节,而POST则没有此限制。
(3)GET 这个是浏览器用语向服务器请求最常用的方法。POST这个方法也是用来传送数据的,但是与GET不同的是,使用POST的时候,数据不是附在URI后面传递的,而是要做为独立的行来传递,此时还必须要发送一个Content_length标题,以标明数据长度,随后一个空白行,然后就是实际传送的数据。网页的表单通常是用POST来传送的。

重要的kwargs参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

致谢北理工爬虫网课
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值