总览
- urlli库
request模块
request.urlopen函数
request.urlretrieve函数
urlencode函数
parse_qs函数
urlparse和urlsplit函数
request.Request类
request.ProxyHandler类
request.HTTPCookieProcessor类 - http.cookiejar库
CookieJar类
FileCookieJar类
MozillaCookieJar类
LWPCookieJar类 - requests库
- lxml
- BeautifulSoup4
- threading模块
- CrawlSpider
urllib库
Python中一个最基本的网络请求库,可以模拟浏览器的行为,向指定的服务器发送HTTP请求,并且可以保存服务器返回的数据
request模块
在Python3 的urllib库中,所有和网络请求相关的方法,如urlopen,urlretrieve都被集到urllib.request模块
request.urlopen函数
在 urllib.request 模块下,可以打开被传入的url地址
from urllib import request
resp = request.urlopen("url",data)
print(resp.read())
参数 | 解释 |
---|---|
url | 请求的url |
data | 请求的data,如果设置了这个值,那么将变成post请求。 |
返回值 | 返回值是一个http.client.HTTPResponse对象,这个对象是一个类文件句柄对象。有read(size)、readline(读取一行)、readlines(读取多行)以及getcode(获取响应状态码)等方法 |
request.urlretrieve函数
可以将网页上的一个文件(网页、图片、视频、文档)保存到本地
from urllib import request
request.urlretrieve('url','filename'+picturename)
参数 | 解释 |
---|---|
url | 所下载的文件地址 |
filename | 储存文件的名称,可以自定义。文件下载成功后与当前代码保存在同一目录 |
picturename | 储存多个图片时给图片进行命名 |
3)urlencode函数:
可以将网络请求的url地址中的中文或其他特殊字符,转换成服务器可以识别的ASCII编码。
Http协议中参数的传输是"key=value"这种键值对形式的,因此,urlencode函数中传入的参数也必须为字典数据
from urllib import parse
data = {
'name':'鹿温柔','greet':'hello world','age':18}
qs = parse.urlencode(data)
print(qs)
Http协议中参数的传输是"key=value"这种键值对形式的,因此,urlencode函数中传入的参数也必须为字典数据
4)parse_qs函数:
与urlencode相反功能的函数,对经过编码后的url参数进行解码
from urllib import parse
qs = "name=%E7%88%AC%E8%99%AB%E5%9F%BA%E7%A1%80&greet=hello+world&age=100"
print(parse.parse_qs(qs))
5)urlparse和urlsplit函数:
可以对一个url地址进行切割,获取到url地址中的各个组成
from urllib import request,parse
url = 'http://www.baidu.com/s?username=zhiliao'
result = parse.urlparse(url)
# result = parse.urlsplit(url)
print(result)
# 也可以单个打印url地址的组成
# print('scheme:',result.scheme)
# print('netloc:',result.netloc)
# print('path:',result.path)
# print('query:',result.query)
urlparse和urlsplit唯一不同的地方:urlparse里面多了一个params属性,而urlsplit中没有这个属性
6)request.Request类:
在发送请求的时候增加一些请求头来包装爬虫,必须使用request.Request类来实现
from urllib import request
url = "*******"
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
}
req = request.Request(url,headers=headers)
resp = request.urlopen(req)
print(resp.read())