第二章 Urllib库的使用

第二章 Urllib库的使用

Python内置的HTTP请求库,包含如下4个模块:

  • request:它是最基本的HTTP请求模块,可以用来模拟发送请求,需要给库方法传入URL以及额外的参数
  • error:异常处理模块,如果出现错误,我们可以捕获这些异常,然后进行重试或其他操作以保证程序不会意外终止
  • parse:一个工具模块,提供了许多URL处理方法,如拆分,解析,合并等
  • robotparser:主要用来识别网站的robots.txt文件,然后判断哪些网站可以爬,哪些网站不可以爬,一般用的比较少

2.1 基本使用

2.1.1 urlopen()

import urllib.request


# 定义一个url,待访问的网址
url = 'http://www.baidu.com'
# 模拟浏览器向服务器发送请求
response = urllib.request.urlopen(url)
# read()方法返回的是字节形式的二进制数据,转换成字符串要解码decode()
content = response.read().decode('utf-8')

print(content)

2.1.2 1个类型与6个方法

一、response响应是HTTPResponse类型

import urllib.request


url = 'http://www.baidu.com'
response = urllib.request.urlopen(url)
print(type(response))
结果:
<class 'http.client.HTTPResponse'>

二、6个方法

- response.read() 一个字节一个字节的读,read()方法中的数字表示返回的字节的个数
- readline() 读取一行
- readlines() 一行一行的读直到读完
- getcode() 返回状态码,是200就没毛病
- geturl() 返回的是url地址
- getheaders() 返回的是状态信息及响应头

2.1.3 data参数

如果要添加该参数,它需要被转码成字节流类型,即 bytes 类型,通过 bytes()方法转化。一旦传递了这个参数,它的请求方式不再是GET方式,而是POST方式。

2.1.4 timeout参数

timeout参数用于设置超时时间(单位:秒),支持HTTP,HTTPS,FTP请求。如果请求超出了设置的时间还没有得到响应,就会抛出异常。不指定该参数就会使用全局默认时间。

import urllib.request


url = 'http://www.baidu.com'
response = urllib.request.urlopen(url=url, timeout=0.1)
content = response.read().decode('utf-8')
print(content)

报错:
socket.timeout: timed out

2.1.5 Request

利用urlopen()可以实现最基本请求的发起,但是这些简单的参数不足以构建完整的请求。要在请求中加入Headers等信息,需要用更强大的Request类,可以查看一下该类需要的参数。

说明:

  • url参数是必传参数,其他都是可选参数
  • data参数必须传bytes(字节流)类型,如果它是字典先用urllib.parse模块的urlencode()方法编码,还要encode()编码
  • headers是一个字典,就是请求头,我们可以在构造请求时通过headers参数直接构造,也可以调用请求实例add_header()方法添加,最常用的添加请求头就是通过UA伪装
  • origin_req_host指的是请求方的host名称或者ip地址
  • unverifiable表示这个请求是否是无法验证的,默认False
  • method表示请求使用的方法,GET,POST,PUT等

在这里插入图片描述

2.2 解析链接

urllib库中的parse模块,他定义了处理URL的标准接口,url中各部分抽取,合并,转换。

2.2.1 urlparse()

可以实现url的识别与分段

import urllib.parse


url = 'https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%91%A8%E6%9D%B0%E4%BC%A6'
response = urllib.parse.urlparse(url)
print(type(response), response)
<class 'urllib.parse.ParseResult'> ParseResult(scheme='https', netloc='www.baidu.com', path='/s', params='', query='ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E5%91%A8%E6%9D%B0%E4%BC%A6', fragment='')
  • 协议(scheme)
  • 域名(netloc)
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值