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

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條評論
主站蜘蛛池模板: 日韩毛片欧美一级国产毛片 | 国产小视频在线观看免费 | 黄色成人毛片 | 91视频最新网址 | 欧美三级做爰在线 | 精品国产免费第一区二区三区日韩 | 成人影院午夜久久影院 | 婷婷国产成人久久精品激情 | 成年女人a毛片免费视频 | 中文字幕 一区 婷婷 在线 | 日本中文字幕在线精品 | 操一操 | 中文字幕不卡一区2021 | 美女久久久久久久久久久 | 天天狠天天操 | 久久福利资源站免费观看i 久久高清 | 极品女神西比尔久久精品 | 99精品视频在线观看免费专区 | 亚洲综合色就色手机在线观看 | 中文字幕视频在线 | 欧洲做视频在线观看 | 国产成人久久一区二区三区 | 四虎国产精品视频免费看 | 伊人久久亚洲综合天堂 | 九九99热久久精品在线6手机 | 四虎在线免费 | 日韩欧美h | 日本一视频一区视频二区 | 国产aa免费视频 | 3d动漫免费一区二区三区 | 在线一区播放 | xxxx成年视频免费 | 国产精品国产 | 国产精品日韩一区二区三区 | 国产一级毛片国语版 | 99久久国产| 久久福利小视频 | 欧美高清在线视频一区二区 | 欧美成人香蕉在线观看 | 国产手机在线国内精品 | 国产亚洲欧洲 |