1.基础请求框架
from urllib import request url=r"http://www.baidu.com" req=request.Request(url) #构造请求 response=request.urlopen(req).read().decode() #获取响应 print(response)
2.自定义header
from urllib import request import re headers={ "User-Agent":"Mozilla/5.0" } url=r"http://www.baidu.com" req=request.Request(url,headers=headers) #构造请求 response=request.urlopen(req).read().decode() #获取响应 pat=r"<title>(.*?)</title>" #正则匹配规则 data=re.findall(pat,response) #正则匹配筛选 print(data)
3.利用随机数随机更换agent
from urllib import request import re import random #将多个user-agent值放入list agentlist=["Mozilla/5.0", "Mozilla/5.0", "Mozilla/5.0"] #利用随机数随机取一个agent agent=random.choice(agentlist) print(agent) headers={ "User-Agent":agent } url=r"http://www.baidu.com" req=request.Request(url,headers=headers) #构造请求 response=request.urlopen(req).read().decode() #获取响应 pat=r"<title>(.*?)</title>" #正则匹配规则 data=re.findall(pat,response) #正则匹配筛选 print(data)
urlopen是一个特殊的opener(模块构建的)
urlopen()方法不支持代理、cookie等其他的HTTP/HTTPS高级功能。
要支持这些功能:通过request.build_opener()方法创建自定义opener对象。
使用自定义的opener对象,调用open()方法发送请求。
如果程序里所有请求都使用自定义opener,可以使用request.install_opener()将自定义的opener对象定义为全局opener,表示如果之后凡是调用urlopen,都将使用这个opener。
from urllib import request import re headers={ "User-Agent":"Mozilla/5.0" } url=r"http://www.baidu.com" #构建HTTP处理器对象(专门处理HTTP请求的对象) http_hander=request.HTTPHandler() #创建自定义opener opener=request.build_opener(http_hander) #创建自定义请求对象 req=request.Request(url,headers=headers) #发送请求,获取响应 response=opener.open(req).read().decode() pat=r"<title>(.*?)</title>" data=re.findall(pat,response) print(data) #把自定义opener设置为全局,这样用urlopen发送的请求也会使用自定义的opener request.install_opener(opener) #此时的urltopen也会使用自定义的opener test=request.urlopen(req)