PYTHON—urllib库

urllib库

是python中基本的一个网络请求库,可以模拟浏览器的行为,非第三方库,所有和网络请求相关的方法,都被集中到urllib.request模块下面

1.urlopen函数

作用:默认为get请求,如果里面加data = xxx则为post请求,无增加请求头,返回一个类文件句柄对象
获取百度的网络源代码
from urllib import request
response = request.urlopen('http://www.baidu.com')
print(response.read())
# read(size)            读取相应字节的数据,无size时则为全部
print(response.read(10))
# readline              读取一行数据
print(response.readline())
# readllines            读取多行数据
print(response.readlines())
# getcode()             获取响应状态码
print(response.getcode())

urlretrieve('访问网站','路径/文件名')

作用:将网页的文件保存到本地
from urllib import request
request.urlretrieve('http://www.baidu.com','baidu.html')

urlencode()

作用:把查询字符串进行编码urlencode可以把字典数据转换为url编码的数据
from urllib import request
from urllib import parse           #编码和解码都放在parse模块中
parses = {'name':"tom",'age':'56'}
result = parse.urlencode(parses)
print(result)

用法

无编码进行请求 (失败)
urls = 'https://www.baidu.com/s?wd=尼古拉'
respones = request.urlopen(urls)
print(respones.read())
有编码进行请求 (成功)
urls = 'http://www.baidu.com/s'
parses = {'wd':'尼古拉'}              #编码对象
finish = parse.urlencode(parses)     #完成编码
urls =urls + '?'+finish              #完整连接形成
response = request.urlopen(urls)     
print(response.read())

parse_qs函数

作用:将经过编码后的url参数进行解码,urlencode()反过程
re = parse.parse_qs(result)
print(re)

urlparse和urlsplit url解析

应用urlparse (有params)
from urllib import parse
urls = 'https://baike.baidu.com/item/尼古拉·特斯拉/4481228?fromtitle=%E5%B0%BC%E5%8F%A4%E6%8B%89%E7%89%B9%E6%96%AF%E6%8B%89&fromid=9352468&fr=aladdin'
result = parse.urlparse(urls)
print('scheme:',result.scheme)
print('path:',result.path)
print('params:',result.params)
print('query:',result.query)
print('fragment:',result.fragment)
应用urlsplit (无params)
from urllib import parse
urls = 'https://baike.baidu.com/item/尼古拉·特斯拉/4481228?fromtitle=%E5%B0%BC%E5%8F%A4%E6%8B%89%E7%89%B9%E6%96%AF%E6%8B%89&fromid=9352468&fr=aladdin'
result = parse.urlsplit(urls)
print('scheme:',result.scheme)
print('path:',result.path)
# print('params:',result.params)
print('query:',result.query)
print('fragment:',result.fragment)

request.Request类

在请求时要增加请求头时则需要request.request来实现,可增加请求头,可增加post的数据,可增加host,可增加method等,如果爬虫失败,则要增加请求头,在其中可添加data ,method,让服务器误判,且要注意的是关于data等数据要编码,编码为('utf-8'),查看对应网站的请求方式,来修改method

from urllib import request
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
response = request.Request('http://www.zhihu.com',headers=headers)
res = request.urlopen(response)
print(res.read().decode('utf-8'))

你可能感兴趣的:(PYTHON—urllib库)