爬虫的第二天 urllib库+代理"/>
爬虫的第二天 urllib库+代理
今天介绍一下urllib库
写此本文只是为了巩固基础,写错或者不对的地方还请指点指点!
urllib库
urllib
库是python
中一个最基本的网络请求库。可以模拟浏览器的行为,向指定的服务器发送一个请求,并返回数据。
介绍一下urllib库中的一些函数
urlopen函数
在python3
的urllib
库中,所有的网络请求的方法,都被集到urllib.request
模块下了。
基本使用:
from urllib import request
res = request.urlopen('')
print(res.read())
urlopen
函数详解:
url
:请求的网址。
data
:请求的data,如果设置了这个值,那么将变成post请求。
返回值:返回值是一个http.client.HTTPResponse
对象:有read()
、readline()
、readlines()
、getcode()
等方法。
urlretrieve函数
这个函数可以方便的将网页的文件保存到本地。
代码示列:
from urllib import request
request.urlretrieve('','baidu.html')
urlencode函数
浏览器发送请求的时候,如果url中包含了中文或者其他特殊字符,那么浏览器会自动的给我们进行编码。
但是我们要用代码请求,那么就必须手动的进行编码,就用urlencode
函数来实现。
代码示列
from urllib import parse
data = {'name':'tyler','age':100,'class':'共好学习'}
re = parse.urlencode(data)
print(re)
#结果
#name=tyler&age=100&class=%E5%85%B1%E5%A5%BD%E5%AD%A6%E4%B9%A0
parse_qs函数
可以将编码后的url
参数进行解码。
拿上面的列子进行解码
from urllib import parse
data = {'name':'tyler','age':100,'class':'共好学习'}
re = parse.urlencode(data)
print(re)
#结果
# name=tyler&age=100&class=%E5%85%B1%E5%A5%BD%E5%AD%A6%E4%B9%A0
qw = parse.parse_qs(re)
print(qw)
#结果
# {'name': ['tyler'], 'age': ['100'], 'class': ['共好学习']}
urlparse函数和urlsplit函数
对url
中的各个组成部分进行分割。
两个函数基本上式一样的,唯一不一样的地方是urlparse
里面多了一个params
属性,而urlsplit
没有这个params
属性。比如有一个url
为:url = ‘;hello?wd=python&username=abc#1’,
那么urlparse
可以获取到hello,而urlsplit
不可以获取到。url
中的params
也用得比较少。
代码示列
from urllib import parse,request
url = '/?from=bd-pc&plan=python-%E4%B8%BB%E8%A6%81%E6%B6%88%E8%B4%B9-%E5%90%8D%E8%AF%8D&unit=c&keyword=python&e_adposition=cl1&e_keywordid=106675892040&e_keywordid2=106675892040'
res1 = parse.urlsplit(url)
# res2 = parse.urlsplit(url)
print('scheme:',res1.scheme)
print('netloc:',res1loc)
print('path:',res1.path)
print('query:',res1.query)
request.Request类
有的时候我们用代码访问浏览器时,如果访问过于频繁,浏览器就认为是代码在访问,就不会再让你访问。你若还想访问的话,那么你就要把你的代码写的更像是在浏览器在浏览,比如添加一个请求头,那么就必须使用request.Request类来实现。
代码示列
from urllib import requestheaders = {
'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Mobile Safari/537.36'
}
req = request.Request("/",headers=headers)
resp = request.urlopen(req)
print(resp.read())
ProxyHandler处理器(代理)
1.代理的原理,在请求目的网站之前,先请求代理服务器,然后让代理服务器去请求目的网站,代理服务器
拿到目的网站的数据后,在转发给我们的代码。
2. : 这个网站可以方便查看http请求的参数。
3.在代码中代理的格式:
使用request.ProxyHandler
代理的格式是字典,字典的key
是依赖于代理服务器能够接受的类型,一般是http
,https
,值是ip:port
。
代码示列:
from urllib import request
url = ''
#使用ProxyHandler ,传入代理 构建一个handler
handler = request.ProxyHandler({'HTTP':'121.232.148.180:9000'})
#使用上面创建handler构建一个open1
open1 = request.build_opener(handler)
# 使用open1去发送一个请求
res = open1.open(url)
print(res.read())
更多推荐
爬虫的第二天 urllib库+代理
发布评论