urllib详解

Urllib

简介
urllib模块库是python自带的

注意
url中附带中文记得转码
POST请求的参数需要放到Request请求对象中

示例

from urllib.request import Request, urlopen
from fake_useragent import UserAgent


def cra1_test1():
    url = "http://www.baidu.com"
    headers = {"User-Agent": UserAgent().chrome}
    requests = Request(url, headers=headers)
    resp = urlopen(requests)
    print(resp.getheaders())


if __name__ == '__main__':
    cra1_test1()          

 

 

Urlopen

简介
urlopen()是一个特殊的opener

引入

from urllib.request import urlopen

resp = urlopen(url, data, timeout)



参数详解
url:
data【可选】:传送的数据,默认为空None
timeout【可选】:设置超时时间,默认为socket._GLOBAL_DEFAULT_TIMEOUT

 

 

build_opener

简介
build_opener是一般的opener,支持代理、cookie等高级功能

引入

from urllib.request import build_opener

resp = build_opener(handler处理器【可选】).open(Request对象)



handler处理器详解
代理处理器:handler = ProxyHandler({'http': 'http://398707160:[email protected]:16816'})

 

 

Request封装

Request对象

from urllib.request import Request
request = Request(url,data=xxx,headers=xxx)



Request对象
data:请求数据【字典类型】
如:data1 = {'key1': 'value1','key2': 'value2'}

headers详解
headers:请求头信息
如 headers = {'User-Agent':'xxx'}
请求头:
User-Agent    客户机通过这个头告诉服务器客户机的软件环境
Accept    告诉服务器,客户端支持的数据类型
Accept-Charset    告诉服务器,客户端采用的编码
Accept-Encoding    告诉服务器,客户机支持的数据压缩格式
Accept-Language    告诉服务器,客户机的语言环境
Host    客户机通过这个头告诉服务器,想访问的主机名
If-Modified-Since    客户机通过这个头告诉服务器,资源的缓存时间
Referer    客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的。(一般用于防盗链)
Cookie    客户机通过这个头告诉服务器,可以向服务器带数据
Refresh    服务器通过这个头,告诉浏览器隔多长时间刷新一次
Content-Type    服务器通过这个头,回送数据的类型
Content-Language    服务器通过这个头,告诉服务器的语言环境
Server    服务器通过这个头,告诉浏览器服务器的类型
Content-Encoding    服务器通过这个头,告诉浏览器数据采用的压缩格式
Content-Length    服务器通过这个头,告诉浏览器回送数据的长度

 

 

响应对象

基础
read():【字节】获取响应全部内容
read().decode()【字符串】 格式化读取文件里的全部内容【换行】
readline():【字符串】逐行读取响应内容
geturl():【字符串】获取响应的最终 URL。通常在重定向时会有用。
getcode():获取响应状态码
getheaders():【列表】获取响应头信息
info():【对象】获取响应头信息

进阶
resp.read().decode('utf-8', errors='replace') 处理非法字符【设置 errors =ignore/replace 】

 

 

常用功能

伪造User-Agent

# pip install fake-useragent
from fake_useragent import UserAgent
headers = {'User-Agent':UserAgent().chrome}



中文转码【一个值】

from urllib.parse import quote
url = f'https://www.baidu.com/s?wd={quote('中文')}'


中文转码【键值对】

from urllib.parse import urlencode
parms ={'wd':'中文'}
url = f'http://www.baidu.com/s?{urlencode(parms)}'



忽略SSL安全认证

import ssl
context = ssl._create_unverified_context() # 忽略SSL安全认证
response = urlopen(request, context = context) # 添加到context参数里

 

 

代理ip

ip代理
小象代理
快代理
云代理
66ip 代理
站大爷
开心代理
讯代理

使用

from urllib.request import ProxyHandler
handler = ProxyHandler({'http':'http://398707160:[email protected]:16816'}) # 构建一个可以使用代理的控制器
resp = build_opener(handler).open(req)


        

 

 

Cookie

Cookie
使用cookie

headers = {'Cookie':'xxx'}



保持cookie

from urllib.request import HTTPCookieProcessor
handler = HTTPCookieProcessor()
resp = build_opener(handler).open(req)



捕获cookie

from http.cookiejar import MozillaCookieJar
cookie_jar = MozillaCookieJar()
handler = HTTPCookieProcessor(cookie_jar)
resp = build_opener(handler).open(req)
cookie_jar.save('cookie.txt',ignore_discard=True,ignore_expires=True) #保存cookie到cookie.txt中



使用捕获的cookie

cookie_jar = MozillaCookieJar()
cookie_jar.load('cookie.txt',ignore_discard=True,ignore_expires=True)
handler = HTTPCookieProcessor(cookie_jar)

 

 

 

你可能感兴趣的:(Python,python)