urllib详解

概述

简介

urllib模块库是python自带的

注意事项

url中附带中文记得转码

POST请求的参数需要放到Request请求对象中

urlopen

urlopen

urlopen()是一个特殊的opener,传入的参数仅仅是url,data,timeout

from urllib.request import urlopen
resp = urlopen(url,data,timeout) 

url:

data【可选】:传送的数据,默认为空None

timeout【可选】:设置超时时间,默认为socket._GLOBAL_DEFAULT_TIMEOUT

返回对象:响应对象

build_opener

urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,我们需要创建更一般的opener

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

handler【可选】:创建特定功能的处理器对象,如代理处理器:handler = ProxyHandler({'xxx'})

req:Request对象

响应对象

read():读取文件里的全部内容,返回bytes类型

getcode():返回 HTTP的响应码

geturl():返回实际数据的实际URL

info():返回服务器响应的HTTP报头

Request

Request

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

url:

headers:请求头信息,如headers1 = {'User-Agent':'xxx'}

data:请求数据,data是一个字典,里面要匹配键值对,如:data1 = {'key1': 'value1','key2': 'value2'}

headers

          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	服务器通过这个头,告诉浏览器回送数据的长度

中文转码

转换一个值

 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证书验证

SSL证书:https开头的网站,如果网站的SSL证书是经过CA认证的,则能够正常访问

urllib可以为 HTTPS 请求验证SSL证书,就像web浏览器一样

忽略SSL安全认证

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

伪造User-Agent

注意:fake-useragent在创建对象时,可能创建不了,多部分原因为服务器访问不到的原因

解决方案:拷贝fake-useragent_version.json 的配置文件到用户目录C:\Users\Feel\AppData\Local\Temp

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

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)

代理ip

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

猜你喜欢

转载自blog.csdn.net/m0_63040701/article/details/131540109