亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

python-爬蟲-網(wǎng)絡請求(三)

系統(tǒng) 1608 0

http.cookiejar

前面講到的cookie的使用,我們首先使用的是瀏覽器登陸之后,將中間的cookie取出來,之后將其應用到代碼中,實現(xiàn)代碼請求的功能,但是顯然這樣并不是非常的完美,如果代碼能夠自動的獲取到cookie并完成后續(xù)的工作會更加的完美

對于這個http.cookiejar,該模塊主要的類有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。對于這四類的作用非別如下:
1、CookieJar:管理HTTP cookie值,存儲HTTP請求生成的cookie、向傳出的HTTP請求添加cookie的對象,整個cookie都存儲在內存中,對CookieJar實例進行垃圾回收后cookie也將丟失
2、FileCookieJar:從CookieJar派生而來,用來創(chuàng)建FileCookieJar實例,檢索cookie信息并將cookie存儲到文件中,filename是存儲cookie的文件名,delayload為True時支持延遲訪問文件,即只有在需要時才需讀取文件或在文件中存儲數(shù)據(jù)
3、MozillaCookieJar:從FileCookieJar派生而來,創(chuàng)建與Mozilla瀏覽器cookies.txt兼容的FileCookieJar實例
4、LWPCookieJar:從FileCookieJar派生而來,創(chuàng)建與libwww-per標準的Set-Cookie3文件格式兼容的FileCookieJar實例

除了上面說到的http.cookiejar以外,還需要使用到request.HTTPCookieProcessor
示例:

            
              
                from
              
               urllib 
              
                import
              
               request
	
              
                from
              
               urllib 
              
                import
              
               parse
	
              
                from
              
               http
              
                .
              
              cookiejar 
              
                import
              
               CookieJar
	
	
              
                # 1、登陸
              
              
                # 1.1、創(chuàng)建一個cookiejar對象
              
              
	cookiejar 
              
                =
              
               CookieJar
              
                (
              
              
                )
              
              
                # 1.2、使用cookiejar創(chuàng)建一個HTTPCookieProcess對象
              
              
	handler 
              
                =
              
               request
              
                .
              
              HTTPCookieProcessor
              
                (
              
              cookiejar
              
                )
              
              
                # 1.3、使用上一步創(chuàng)建的handler創(chuàng)建一個opener
              
              
	opener 
              
                =
              
               request
              
                .
              
              build_opener
              
                (
              
              handler
              
                )
              
              
                # 1.4、使用opener發(fā)送登陸的請求
              
              
	headers 
              
                =
              
              
                {
              
              
                'User-Agent'
              
              
                :
              
              
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
              
              
                }
              
              
	data 
              
                =
              
              
                {
              
              
                'email'
              
              
                :
              
              
                'xxx@qq.com'
              
              
                ,
              
              
                'password'
              
              
                :
              
              
                'xxx'
              
              
                }
              
              
	login_url 
              
                =
              
              
                'http://www.renren.com/PLogin.do'
              
              
	req 
              
                =
              
               request
              
                .
              
              Request
              
                (
              
              login_url
              
                ,
              
              data
              
                =
              
              parse
              
                .
              
              urlencode
              
                (
              
              data
              
                )
              
              
                .
              
              encode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                ,
              
              headers
              
                =
              
              headers
              
                )
              
              
	opener
              
                .
              
              
                open
              
              
                (
              
              req
              
                )
              
              
                # 訪問個人主頁
              
              
	dapeng_url 
              
                =
              
              
                'http://www.renren.com/xxx/profile'
              
              
                # 獲取個人主頁的頁面的時候,不要新建一個opener
              
              
                # 而應該使用之前的那個opener,因為之前的那個opener中間已經(jīng)包含了登陸所需要的cookie信息
              
              
	req 
              
                =
              
               request
              
                .
              
              Request
              
                (
              
              dapeng_url
              
                ,
              
              headers
              
                =
              
              headers
              
                )
              
              
	resp 
              
                =
              
               opener
              
                .
              
              
                open
              
              
                (
              
              req
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                'renren.html'
              
              
                ,
              
              
                'w'
              
              
                ,
              
              encoding
              
                =
              
              
                'utf-8'
              
              
                )
              
              
                as
              
               fw
              
                :
              
              
	    fw
              
                .
              
              write
              
                (
              
              resp
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                )
              
            
          

對于上面的代碼,看起來還是比較的亂,下面將其封裝成不同的函數(shù)

            
              
                from
              
               urllib 
              
                import
              
               request
	
              
                from
              
               urllib 
              
                import
              
               parse
	
              
                from
              
               http
              
                .
              
              cookiejar 
              
                import
              
               CookieJar
	
	headers 
              
                =
              
              
                {
              
              
                'User-Agent'
              
              
                :
              
              
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
              
              
                }
              
              
                def
              
              
                get_opener
              
              
                (
              
              
                )
              
              
                :
              
              
	    cookiejar 
              
                =
              
               CookieJar
              
                (
              
              
                )
              
              
	    handler 
              
                =
              
               request
              
                .
              
              HTTPCookieProcessor
              
                (
              
              cookiejar
              
                )
              
              
	    opener 
              
                =
              
               request
              
                .
              
              build_opener
              
                (
              
              handler
              
                )
              
              
                def
              
              
                login_renren
              
              
                (
              
              opener
              
                )
              
              
                :
              
              
	    data 
              
                =
              
              
                {
              
              
                'email'
              
              
                :
              
              
                'xxx@qq.com'
              
              
                ,
              
              
                'password'
              
              
                :
              
              
                'xxx'
              
              
                }
              
              
	    login_url 
              
                =
              
              
                'http://www.renren.com/PLogin.do'
              
              
	    req 
              
                =
              
               request
              
                .
              
              Request
              
                (
              
              login_url
              
                ,
              
               data
              
                =
              
              parse
              
                .
              
              urlencode
              
                (
              
              data
              
                )
              
              
                .
              
              encode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                ,
              
               headers
              
                =
              
              headers
              
                )
              
              
	    opener
              
                .
              
              
                open
              
              
                (
              
              req
              
                )
              
              
                def
              
              
                visit_profile
              
              
                (
              
              opener
              
                )
              
              
                :
              
              
                # 訪問個人主頁
              
              
	    dapeng_url 
              
                =
              
              
                'http://www.renren.com/xxx/profile'
              
              
                # 獲取個人主頁的頁面的時候,不要新建一個opener
              
              
                # 而應該使用之前的那個opener,因為之前的那個opener中間已經(jīng)包含了登陸所需要的cookie信息
              
              
	    req 
              
                =
              
               request
              
                .
              
              Request
              
                (
              
              dapeng_url
              
                ,
              
               headers
              
                =
              
              headers
              
                )
              
              
	    resp 
              
                =
              
               opener
              
                .
              
              
                open
              
              
                (
              
              req
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              
                'renren.html'
              
              
                ,
              
              
                'w'
              
              
                ,
              
               encoding
              
                =
              
              
                'utf-8'
              
              
                )
              
              
                as
              
               fw
              
                :
              
              
	        fw
              
                .
              
              write
              
                (
              
              resp
              
                .
              
              read
              
                (
              
              
                )
              
              
                .
              
              decode
              
                (
              
              
                'utf-8'
              
              
                )
              
              
                )
              
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
	    opener 
              
                =
              
               get_opener
              
                (
              
              
                )
              
              
	    login_renren
              
                (
              
              opener
              
                )
              
              
	    visit_profile
              
                (
              
              opener
              
                )
              
            
          

保存cookie在本地

            
              
                from
              
               urllib 
              
                import
              
               request
	
              
                from
              
               http
              
                .
              
              cookiejar 
              
                import
              
               MozillaCookieJar
	
	cookiejar 
              
                =
              
               MozillaCookieJar
              
                (
              
              
                'cookie.txt'
              
              
                )
              
              
	handler 
              
                =
              
               request
              
                .
              
              HTTPCookieProcessor
              
                (
              
              cookiejar
              
                )
              
              
	opener 
              
                =
              
               request
              
                .
              
              build_opener
              
                (
              
              handler
              
                )
              
              
	
	resp 
              
                =
              
               opener
              
                .
              
              
                open
              
              
                (
              
              
                'http://www.baidu.com'
              
              
                )
              
              
	cookiejar
              
                .
              
              save
              
                (
              
              
                )
              
            
          

這里需要了解到的是在實例化MozillaCookieJar時候,我們就能夠傳入需要最后將cookie保存到的文件名;如果在實例化的時候并沒有寫需要保存到哪個文件中間的話,在最后調用save方法的時候,也是可以將文件名放入其中的
將上面的命令執(zhí)行完成之后,就能夠得到如下的cookie.txt文件

            
              
                # Netscape HTTP Cookie File
              
              
                # http://curl.haxx.se/rfc/cookie_spec.html
              
              
                # This is a generated file!  Do not edit.
              
              
                .
              
              baidu
              
                .
              
              com	TRUE	
              
                /
              
              	FALSE	
              
                3713864400
              
              	BAIDUID	AE67114AD42FA696B9C9139CD37B0806
              
                :
              
              FG
              
                =
              
              
                1
              
              
                .
              
              baidu
              
                .
              
              com	TRUE	
              
                /
              
              	FALSE	
              
                3713864400
              
              	BIDUPSID	AE67114AD42FA696B9C9139CD37B0806

              
                .
              
              baidu
              
                .
              
              com	TRUE	
              
                /
              
              	FALSE	
              
                3713864400
              
              	PSTM	
              
                1566380753
              
            
          

前面說到cookie是存在有生命周期的,如果超過這個時間,cookie就會消失
這里可以通過瀏覽器訪問http://httpbin.org/cookies/set?course=hahaha,這樣就會在瀏覽器中創(chuàng)建一個cookie的key是course,value是hahaha,但是當瀏覽器關閉的時候,這個cookie就會隨之消失,代碼中間也是一樣,代碼執(zhí)行完成之后,cookie就會自動消失,這個時候如果想要將這個過期的cookie也保存在本地文件中間,就需要使用到參數(shù)ignore_discard=True了,如下面代碼所示

            
              
                from
              
               urllib 
              
                import
              
               request
	
              
                from
              
               http
              
                .
              
              cookiejar 
              
                import
              
               MozillaCookieJar
	
	cookiejar 
              
                =
              
               MozillaCookieJar
              
                (
              
              
                'cookie.txt'
              
              
                )
              
              
	handler 
              
                =
              
               request
              
                .
              
              HTTPCookieProcessor
              
                (
              
              cookiejar
              
                )
              
              
	opener 
              
                =
              
               request
              
                .
              
              build_opener
              
                (
              
              handler
              
                )
              
              
	
	resp 
              
                =
              
               opener
              
                .
              
              
                open
              
              
                (
              
              
                'http://httpbin.org/cookies/set?course=hahaha'
              
              
                )
              
              
	cookiejar
              
                .
              
              save
              
                (
              
              ignore_discard
              
                =
              
              
                True
              
              
                )
              
            
          

此時查看cookie.txt文件,可以看到如下的內容

            
              
                # Netscape HTTP Cookie File
              
              
                # http://curl.haxx.se/rfc/cookie_spec.html
              
              
                # This is a generated file!  Do not edit.
              
              

httpbin
              
                .
              
              org	FALSE	
              
                /
              
              	FALSE		course	hahaha

            
          

可以看到,中間的course的值就是我們設置的hahaha
上面介紹到將一個cookie信息寫入到一個文件中間,自然有存入就會有讀取,將一個cookie信息讀取出來的方式就是load方法

            
              
                from
              
               http
              
                .
              
              cookiejar 
              
                import
              
               MozillaCookieJar
	
	cookiejar 
              
                =
              
               MozillaCookieJar
              
                (
              
              
                'cookie.txt'
              
              
                )
              
              
	cookiejar
              
                .
              
              load
              
                (
              
              ignore_discard
              
                =
              
              
                True
              
              
                )
              
              
                for
              
               cookie 
              
                in
              
               cookiejar
              
                :
              
              
                print
              
              
                (
              
              cookie
              
                )
              
            
          

上面在load的時候一樣使用到了ignore_discard的參數(shù),表示忽略過期時間
打印出來的內容如下:

            
              
                <
              
              Cookie course
              
                =
              
              hahaha 
              
                for
              
               httpbin
              
                .
              
              org
              
                /
              
              
                >
              
            
          

可以看到,前面設置的course=hahaha就已經(jīng)成功的讀取出來了


更多文章、技術交流、商務合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 精品国产97在线观看 | 天天色综合5 | 性免费网站 | 在线成人tv天堂中文字幕 | 欧美色老太婆 | 曰本一级毛片 | 中文字幕国产欧美 | 色黄网站青青草原免费 | 97精品久久天干天天蜜 | 久久影院视频 | 国产精品亚洲玖玖玖在线靠爱 | 日韩经典一区 | 日本一极毛片兔费看 | 久久精品69| 天天色天天| 波多野结衣免费免费视频一区 | 精品久久久久久中文字幕网 | 波多野结衣中文字幕一区 | 日韩字幕无线乱码 | 欧洲色综合精品 | 亚洲激情在线观看 | 色综合天天综合网亚洲影院 | 9久9久热精品视频在线观看 | 免费国产之a视频 | 日本3p视频在线看高清 | 亚洲精品国产精品国自产观看 | 久久精品亚洲欧美日韩久久 | 一区二区三区欧美在线 | 亚洲欧美中文日韩在线 | 国产欧美在线观看一区二区 | 仑乱高清在线一级播放 | 在线亚洲欧美日韩 | 在线日韩中文字幕 | 亚洲国产成人精品区 | 国产伦精品一区二区三区视频小说 | 免费在线成人网 | 影视先锋av资源噜噜 | 国产日日操 | 2022国内精品免费福利视频 | 四虎国产精品永久地址99新强 | 欧美一级人与动毛片免费播放 |