urllib库笔记01

urllib库

urllib库是python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送请求,并且可以保存服务器发送的数据。

  • urlopen函数
from urllib import request
resp = request.urlopen("http://www.baidu.com")
print(resp.read())
print(resp.read(10))  # 指定读取前10个字节
print(resp.readline())  # 读取第一行
print(resp.readlines())  # 将网页中的数据以多行的形式读取
print(resp.getcode())  # 返回当前请求的http状态码
  • urlretrieve函数
    说明:该函数可以方便地将网页上的一个文件保存到本地。
    下载百度首页:
from urllib import request
request.urlretrieve('http://www.baidu.com/', 'baidu.html')
  • urlencode函数
    url中包含中文或者其他字符,当我们使用代码发送请求时,必须手动编码,这时候应该使用urlencode来实现。urlencode可把字典数据转换为url编码的数据
from urllib import parse
data = {'name':'爬虫基础','greet':'Hello world', 'age':100}
qs = parse.urlencode(data)
print(qs)
  • parse_qs函数
    可以将经过编码后的url参数进行解码
from urllib import parse
qs = "oq=%25E4%25BA%25AC%25E4%25B8%259C&rsv_pq=e25adc3c0004c5b5"
print(parse.parse_qs(qs))
  • utlencode demo
from urllib import request
from urllib import parse

url = "http://www.baidu.com/s"
# 若直接写路径不进行编码,会报错
params = {"wd":"刘德华"}
qs = parse.urlencode(params)
# print(qs)
url = url + "?" + qs
resp = request.urlopen(url)
print(resp.read())
  • urlparse和urlsplit
    想要对url的各个组成部分进行分割时,可以用urlparse或者urlsplit进行分割。
from urllib import request, parse

url = "http://www.baidu.com/s?username=zhiliao"

result = parse.urlsplit(url)
# 同样可以用urlparse来完成这个功能,urlparse解析出来的比urlsplit多了params
# 比如有个url为http://www.baidu.com/s;hello?wd=python&username=abc#1
# 那么urlparse可以获取到hello,urlsplit不可以获取到。params用的比较少
# result = parse.urlparse(url)

print('scheme:', result.scheme)
print('netloc:', result.netloc)
print('path:', result.path)
print('query:', result.query)
  • request.Request类
    想在请求的时候增加一些请求头,那么必须使用request.Request类来实现。比如增加一个User-Agent, 示例代码如下:
from urllib import request

headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36'
}
req = request.Request("http://www.baidu.com/", headers=headers)
resp = request.urlopen(req)
print(resp.read())
posted @ 2019-07-11 22:16  Atomyzd  阅读(131)  评论(0编辑  收藏  举报