urllib使用

urllib

简介

urllib通常分为四个模块

  • request:是最基本的HTTP请求模块,可以用来模拟发送请求
  • error:异常处理模块
  • parse:工具模块,提供许多URL处理方法,比如拆分,解析,合并等
  • robotparser:主要识别网站的robots.txt文件,然后判断网站是否可以爬虫,不常用

发送请求

urlopen()

基本使用:(此方式请求时GET请求)

import urllib.request
response = urllib.request.urlopen("https://www.baidu.com");
print(response.read().decode("utf-8"));

urlopen()的常用参数

  • data参数

作用:如果传递了这个参数,请求方式为POST

data参数是可选的,如果要添加该参数,并且如果它是字节流编码格式的内容,即bytes类型,则需要通过bytes()方法转化。

#测试网址http://httpbin.org/
import  urllib.parse
import  urllib.request
data = bytes(urllib.parse.urlencode({"hello":"world"}),encoding="utf-8")
#post中需要是字节流
response = urllib.request.urlopen("http://httpbin.org/post",data=data)
print(response.read().decode("utf-8"))
  • timeout

作用:可以设置时长,如果请求时间过长,则会抛出异常。

try:
    response = urllib.request.urlopen("http://httpbin.org/post",timeout=0.01)
    print(response.read().decode("utf-8"))
except urllib.error.URLError:
    print("time out")

不常用参数

  • context:必须时ssl.SSLContext类型,用来指定SSL设置
  • cafile,capath:分别指定CA证书和它的路径,在请求HTTPS连接时会有用

响应的属性:response.属性

status响应的状态码
getheaders()响应的头信息

Request

仍然通过urlopen()来放松请求,但是该方法的属性不再是URL,而是一个Request类型的对象

基本使用:

import urllib.request

request = urllib.request.Request("www.baidu.com")
response = urllib.request.urlopen(request)
print(response.read().decode("utf-8"))

其他常用的属性

  • data:如果要传data,必须是bytes(字节流)类型的,如果它是字典,可以先用urllib.pause模块中的urlencode()编码
  • header:该参数是一个字典,就是请求头,可以在构造请求时通过headers参数直接构造,也可以通过调用请求实例add_header()方法添加

最常用的就是通过修改User-Agent来伪装浏览器

#一些网站识别到是爬虫就会给服务器返回418
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36"
}
#构造请求
req = urllib.request.Request(url="https://www.douban.com/",headers=headers)
#将封装的对象传入
response = urllib.request.urlopen(req)
print(response.read().decode("utf-8"))
  • method:用来指示请求的方法,一般时POST,GET

不常用属性

  • origin_req_host:指的是请求方的host名称或者IP地址
  • unverifiable:表示这个请求是否是无法验证的,默认时False,意思是说用户没有足够的权限来选择接受这个请求的结果。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值