说明:Urllib 是一个python用于操作URL的模块
python2.x ----> Urillib/Urllib2
python3.x ----> Urllib
一、变动说明:
python2 中的Urllib和Urllib2 在python3 中合并为Urllib库,使用方法变动如下:
python2 ------------> python3
import urllib2 ------------> import urllib.request/urllib.error
import urllib --------------> import urllib.request/urllib.error/urllib.parse
import urlparse --------------> import urllib.parse
urllib2.open --------------> urllib.request.urlopen
urllib.urlencode --------------> urllib.parse.urlencode
urllib.quote --------------> urllib.request.quote
cookielib.CookieJar --------------> http.CookieJar
urllib2.Request --------------> urllib.request.Request
二、使用Urllib爬取网页(python3)
导入模块:
import urllib.request
打开网页,并将打开的内容赋给变量(urllopen):
content_text = urllib.request.urlopen(‘http://blog.51cto.com‘)
读取网页内容:
content_text.read() / content_text.readlines() ###读取所有
content_text.readline() ###读取一行
将网页内容保存到文件:
①、使用write方法写入到文件
file_save = open(‘51cto.html‘,"wb") ##以二进制方式写入
file_save.write(content_text.read())
file_save.close()
②、 使用urllib.request.urltrieve函数写入
urllib.request.urlretrieve(url,filename=‘本地文件地址‘)
例:
urllib.request.urlretrieve(‘http://blog.51cto.com‘,filename=‘2.html‘)
urltretrive使用说明
urltrive函数,将远程数据下载到本地
urlretrieve(url, filename=None, reporthook=None, data=None)
参数 finename 指定了保存本地路径(如果参数未指定,urllib会生成一个临时文件保存数据。)
参数 reporthook 是一个下载状态报告。
参数 data 指 post 到服务器的数据,该方法返回一个包含两个元素的(filename, headers)元组,
filename 表示保存到本地的路径,header 表示服务器的响应头。
urlretrieve执行过程中会产生缓存,可用 urlcleanup()进行清除
urllib.request.urlcleanup()
对网址进行编码解码:
编码: urllib.request.quote("http://blog.51cto.com") ----------> http%3A//blog.51cto.com
解码: urllib.request.unquote("http%3A//blog.51cto.com")
方法使用说明:
content_text
.getcode() ###打印状态码
.url() ##打印url地址
.getheaders() ##打印头信息
.info() ##打印响应信息
print (dir(content_text)) ##打印所有方法
三、模拟浏览器headers属性
浏览器headers信息
使用爬虫模拟浏览器头信息:
方法①: urllib.request.build_opener()方法
headers = ("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36")
opener = urllib.request.build_opener() ###创建自定义opener对象
opener.addheaders = [headers] ###添加headers信息
data = opener.open(url) ##模仿浏览器访问网站
方法②、 urllib.request.Request 方法的add_header()属性
url = "http://blog.51cto.com"
req = urllib.request.Request(url) #创建一个request对象
req.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3107.4 Safari/537.36")
data = urllib.request.urlopen(req) ###打开网址