Python网络爬虫与信息提取学习

本文基于《Python网络爬虫与信息提取》的学习,参考资料源于“Python网络爬虫与信息提取 北京理工大学:嵩天”,视频链接如下:

学习视频
(学习视频的课程排序不太准确,注意先看某节的简介/介绍,再看内容,最后看总结,【可以参考本文目录顺序】)
视频嵩老师使用python自带的IDLE,而本博客作者使用IDE为pycharm,因此在交互式部分的代码会有出入

导入——课程全局

单元一 Requests库入门

1、HTTP协议及Requests库方法(SHD)
(1)HTTP协议

HTTP,Hypertext Transfer Protocol,超文本传输协议,是一个基于“请求与响应”模式的、无状态的应用层协议,并采用URL(统一资源定位符)作为定位网络资源的标识。

URL格式 > http://host[:port][path]

host:合法的Internet主机域名或IP地址
port:端口号,缺省(默认)端口为80
path:请求资源的路径

HTTP URL的理解:
URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
HTTP协议对资源的操作:

方法 说明
GET 请求获取URL位置的资源
HEAD 请求获取URL位置资源的响应消息报告,即获取该资源的头部信息
POST 请求向URL位置的资源后附加新的数据
PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源
PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容
DELETE 请求删除URL位置存储的资源

理解PATCH和PUT的区别
假设URL位置有一组数据UserInfo,包括UserID、UserName等20个字段。
需求:用户修改了UserName,其他不变。

采取PATCH,仅向URL提交UserName的局部更新请求
采取PUT,必须将所有20个字段一并提交到URL,未提交字段被删除

PATCH的最主要好处:节省网络宽带

(2)Requests库的7个主要方法
方法 说明
requests.request() 构造一个请求,支撑以下各方法的基础方法
requests.get() 获取HML网页的主要方法,对应于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

对比我们可以看到,HTTP协议与Requests对资源操作一一对应。
下面就Requests中的部分方法进行操作:

import requests
r = requests.head("http://httpbin.org/get")
print(r.headers)

{‘Date’: ‘Fri, 03 Jul 2020 11:09:50 GMT’, ‘Content-Type’: ‘application/json’, ‘Content-Length’: ‘307’, ‘Connection’: ‘keep-alive’, ‘Server’: ‘gunicorn/19.9.0’, ‘Access-Control-Allow-Origin’: ‘*’, ‘Access-Control-Allow-Credentials’: ‘true’}

Requests库的post()方法

import requests
payload = {
    "key1" : "value1",
    "key2" : "value2"
}
r = requests.post("http://httpbin.org/post", data=payload)
print(r.text)


可以看到,使用post()方法向URL提交一个字典时,网页自动编码到form(表单)中

import requests
r = requests.post("http://httpbin.org/post", data="ABC")
print(r.text)


可以看到,使用post()方法向URL提交一个字符串时,网页自动编码到data中
Requests库的post()方法

import requests
payload = {
    "key1" : "value1",
    "key2" : "value2"
}
r = requests.put("http://httpbin.org/post", data=payload)
print(r.text)


向URL发送post请求,相当于传递新增数据,而put还会覆盖原有数据。当然,在一些URL中,POST和PUT方法也会不被允许使用,上述例子在我访问的时候已经不被运行使用了。上述例子主要是为了了解使用这些方法后,URL会如何处理这些数据。

2、Requests的get方法
(1)get方法

首先使用get方法发出请求

requests.get(yrl, params = None, **kwargs)
url:拟获取页面的url链接
params:url中的额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
(2)Requests库的2个对象

注意Requests库的2个重要对象,我们不仅要发出请求,还要得到响应

(3)Response响应

下列就是我们调用响应的方法:

属性 说明
r.status_code HTTP请求的返回请求状态码
r.text HTTP响应页面内容的字符串形式
r.encoding 从HTTP header中猜猜的响应内容编码方式
r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式)
r.content HTTP响应内容的二进制形式

下面我们就访问b站首页并获取响应内容

import requests
r = requests.get("https://www.bilibili.com/")
print(r.status_code)
print(type(r))
print(r.headers)

在这里插入图片描述
下面就是一些常见的状态码以及对应的含义:

那么使用request访问基本流程就是这样的:

对于响应内容的编码类型,有两种获取方式,r.encoding是根据HTTP头文件中是否存在charset来判断,而r.apparent_encoding是就返回内容分析,因此从后者中可以更准确了解响应内容的编码格式。

r.encoding : 如果header中不存在charset,则认为编码为ISO-8859-1
r.apparent_encoding : 根据网页内容分析出的编码方式

import requests
r = requests.get("https://www.baidu.com/")
print(r.encoding)
print(r.apparent_encoding)

ISO-8859-1
utf-8
这样就可以便于我们去解析响应内容,如果直接返回原格式相应内容:

在这里插入图片描述
下面我们修改解析方式

import requests
r = requests.get("https://www.baidu.com/")
r.encoding = "utf-8"
print(r.text)

这样可以解析中文,使得人眼可读性提高
在这里插入图片描述

3、Rquests库主要方法解析
(1)requests库的request方法

requests.request(method, url, **kwargs)
method : 请求方式,对应get / put / post / put / patch / delete / options 7种
url : 拟获取页面的url链接
**kwargs : 控制访问参数,共13个

(2)request方法的13个控制参数

下面介绍 13个访问的控制参数:

参数 用途
params 字典或字节序列,作为参数增加到url中
data 字典、字节序列或文件对象,作为Request的内容
json Json格式的数据,作为Request的内容
headers 字典,HTTP定制头
cookies 字典或者CookieJar,Request中的cookie
auth 元组,支持HTTP认证功能
files 字典类型,传输文件
timeout 设定超时时间,单位为秒
proxies 字典类型,设定访问代理服务器,可以增加登录认证
allow_redirects True/False,默认为True,重定向开关
stream True/False,默认为True,获取内容立即下载开关
verify True/False,默认为True,认证SSL证书开关
cert 本地SSL证书路径

SSL 证书就是遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。

(3)requests库的其他方法

下面介绍requests的其他方法:
其中,url : 拟获取页面的url链接, **kwargs : 13个访问参数
在下列这些方法中,有些参数是必须指定的,那么13

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值