一.什么是Urllib库
urllib是python标准库,就是你安装了python,这两个库就已经可以直接使用了;
它包括以下模块:
urllib.request 请求模块
urllib.error 异常处理模块
urllib.parse url解析模块
urllib.robotparser robots.txt解析模块
二.urllib.request
urlopen:
urlopen返回对象提供方法:
- read() , readline() ,readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
- info():返回一个httplib.HTTPMessage对象,表示远程服务器返回的头信息
- getcode():返回Http状态码。如果是http请求,200请求成功完成;404网址未找到
- geturl():返回请求的url
- getheaders():获取请求头信息
获取指定网页内容,并打印到控制台:
import urllib.request
url = 'http://www.baidu.com/'
request_urlopen = urllib.request.urlopen(url)
print(request_urlopen.read().decode())
获取指定网页内容,并保存到指定文件中
import urllib.request
image_url = 'your url'
request_urlopen = urllib.request.urlopen(image_url)
with open('*.jpg','wb') as fp:
//因为是图片,可以直接以字节形式存储
fp.write(request_urlopen.read())
urlretrieve:
# 获取指定网页内容,并保存到指定文件中
import urllib.request
image_url = 'your url'
urllib.request.urlretrieve(image_url,'*.jpg')
三.urllib.parse
urlencode:将URL中的键值对以连接符&划分
这里可以与urlopen结合以实现get方法和post方法:
get:
import urllib.request
import urllib.parse
wd = input('请输入你想要输入的内容:')
url = 'http://www.baidu.com/s?'
ie='utf-8'
data = {
'ie': ie,
'wd': wd
}
urlencode = urllib.parse.urlencode(data)
url_urlencode = url + urlencode
urlopen = urllib.request.urlopen(url_urlencode)
with open('baidu.html','wb') as pb:
pb.write(urlopen.read())
post:
import urllib.request
import urllib.parse
url = 'https://fanyi.baidu.com/sug'
word = 'hello'
form_data = {
'kw': word,
}
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3610.2 Safari/537.36'
}
request = urllib.request.Request(url=url, headers=headers)
form_data__encode = urllib.parse.urlencode(form_data).encode()
urlopen = urllib.request.urlopen(request, form_data__encode)
print(urlopen.read())
quote:将URL编码,url只能由特定的字符组成,字母数字和下划线,如果出现其他的就要对其进行编码
unquote:将URL解码
import urllib.parse
image_url = 'http://www.baidu.com/index.html?name=芸&age=18'
quote = urllib.parse.quote(image_url)
unquote = urllib.parse.unquote(quote)
print(quote+'\n'+unquote)
/*输出结果
http%3A//www.baidu.com/index.html%3Fname%3D%E8%8A%B8%26age%3D18
http://www.baidu.com/index.html?name=芸&age=18
*/
四.浏览器的模拟
有些网页为了防止别人恶意采集其信息所以进行了一些反爬虫的设置UA(user-agent)
比如谷歌浏览器的UA是这样的:
由于我们现在使用的是python来编程模拟浏览器发送请求,它的UA我们使用Fiddler抓包显示如下:
这样是获取不到网站内容的
当我们伪装自己的UA加上headers后
import urllib.parse
import urllib.request
url = 'http://baidu.com/'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36 Core/1.63.6815.400 QQBrowser/10.3.3006.400'
}
request = urllib.request.Request(url=url, headers=headers)
urlopen = urllib.request.urlopen(request)
print(urlopen.read().decode())
这时候就可以正常获取网页内容了: