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)                        ###打开网址