cookielibpython3
⑴ python3 解決最少加50分 決不食言
拋磚引玉
import cookielib
import urllib, urllib2
cj = cookielib.CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
#登錄
request = urllib2.Request(url)
response = opener.open(request)
cj.extract_cookies(response, request)
...
#訪問其它頁面
request = urllib2.Request(url)
cj.add_cookie_header(request)
response = opener.open(request)
...
⑵ 求教python缺少cookielib模塊怎麼辦
如果是python2 就不缺
如果是python3 修改為http.cookiejar
The cookielib mole has been renamed to http.cookiejar in Python 3
⑶ python3和python2的區別
一些對應常見的例子:
1. 統一了字元編碼支持。我特意把它拿出來放在第一條...
2. 增加了新的語法。print/exec等成為了函數,格式化字元串變數,類型標注,添加了nonlocal、yield from、async/await、yield for關鍵詞和__annotations__、__context__、__traceback__、__qualname__等nder方法。
3. 修改了一些語法。metaclass,raise、map、filter以及dict的items/keys/values方法返回迭代對象而不是列表,描述符協議,保存類屬性定義順序,保存關鍵字參數順序
4. 去掉了一些語法。cmp、<>(也就是!=)、xrange(其實就是range)、不再有經典類
5. 增加一些新的模塊。concurrent.futures、venv、unittest.mock、asyncio、selectors、typing等
6. 修改了一些模塊。主要是對模塊添加函數/類/方法(如functools.lru_cache、threading.Barrier)或者參數。
7. 模塊改名。把一些相關的模塊放進同一個包裡面(如httplib, BaseHTTPServer, CGIHTTPServer, SimpleHTTPServer, Cookie, cookielib放進了http裡面,urllib, urllib2, urlparse, robotparse放進了urllib裡面),個例如SocketServer改成了socketserver,Queue改成queue等
8. 去掉了一些模塊或者函數。gopherlib、md5、contextlib.nested、inspect.getmoleinfo等。去掉的內容的原因主要是2點:1. 過時的技術產物,已經沒什麼人在用了;2. 出現了新的替代產物後者被證明存在意義不大。理論上對於開發者影響很小。
9. 優化。重新實現了dict可以減少20%-25%的內存使用;提升pickle序列化和反序列化的效率;collections.OrderedDict改用C實現;通過os.scandir對glob模塊中的glob()及iglob()進行優化,使得它們現在大概快了3-6倍等.. 這些都是喜大普奔的好消息,同樣開發者不需要感知,默默的就會讓結果變得更好。
10. 其他。構建過程、C的API、安全性等方面的修改,通常對於開發者不需要關心。
最後,重提一下我經常說的那句話:
Python 2/3的思想基本是共通的,只有少量的語法有差別甚至不兼容。當對Python熟悉到
一定程度時, 即使只會Python 2也可以在很短的時間就能寫Python 3的代碼。
⑷ python3和Python2的區別
你應該是剛接觸Python吧,建議直接學Python3.x
下面是Python2.x與3.x版本區別:
Python的3.0版本,常被稱為Python 3000,或簡稱Py3k。相對於Python的早期版本,這是一個較大的升級。
為了不帶入過多的累贅,Python 3.0在設計的時候沒有考慮向下相容。
許多針對早期Python版本設計的程式都無法在Python 3.0上正常執行。
為了照顧現有程式,Python 2.6作為一個過渡版本,基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,允許使用部分Python 3.0的語法與函數。
新的Python程式建議使用Python 3.0版本的語法。
除非執行環境無法安裝Python 3.0或者程式本身使用了不支援Python 3.0的第三方庫。目前不支援Python 3.0的第三方庫有Twisted, py2exe, PIL等。
大多數第三方庫都正在努力地相容Python 3.0版本。即使無法立即使用Python 3.0,也建議編寫相容Python 3.0版本的程式,然後使用Python 2.6, Python 2.7來執行。
Python 3.0的變化主要在以下幾個方面:
1.print 函數
print語句沒有了,取而代之的是print()函數。 Python 2.6與Python 2.7部分地支持這種形式的print語法。在Python 2.6與Python 2.7裡面,以下三種形式是等價的:
print"fish"
print("fish")#注意print後面有個空格
print("fish")#print()不能帶有任何其它參數
然而,Python 2.6實際已經支持新的print()語法:
from__future__importprint_function
print("fish","panda",sep=',')
2.Unicode(這是一個極其好的改進)
Python 2 有 ASCII str() 類型,unicode() 是單獨的,不是 byte 類型。
現在, 在 Python 3,我們最終有了 Unicode (utf-8) 字元串,以及一個位元組類:byte 和 bytearrays。
由於 Python3.X 源碼文件默認使用utf-8編碼,這就使得以下代碼是合法的:
>>>中國='china'
>>>print(中國)
china
Python 2.x
>>>str="我愛北京天安門"
>>>str
''
>>>str=u"我愛北京天安門"
>>>str
u''
Python 3.x
>>>str="我愛北京天安門"
>>>str
'我愛北京天安門'
3.除法運算
Python中的除法較其它語言顯得非常高端,有套很復雜的規則。Python中的除法有兩個運算符,/和//
首先來說/除法:
在python 2.x中/除法就跟我們熟悉的大多數語言,比如Java啊C啊差不多,整數相除的結果是一個整數,把小數部分完全忽略掉,浮點數除法會保留小數點的部分得到一個浮點數的結果。
在python 3.x中/除法不再這么做了,對於整數之間的相除,結果也會是浮點數。
Python 2.x:
>>>1/2
0
>>>1.0/2.0
0.5
Python 3.x:
>>>1/2
0.5
而對於//除法,這種除法叫做floor除法,會對除法的結果自動進行一個floor操作,在python 2.x和python 3.x中是一致的。
python 2.x
>>>-1//2
-1
python 3.x:
>>>-1//2
-1
注意的是並不是舍棄小數部分,而是執行floor操作,如果要截取小數部分,那麼需要使用math模塊的trunc函數
python 3.x:
>>>importmath
>>>math.trunc(1/2)
0
>>>math.trunc(-1/2)
0
4.異常
在 Python 3 中處理異常也輕微的改變了,在 Python 3 中我們現在使用 as 作為關鍵詞。
捕獲異常的語法由except exc, var改為except exc as var。
使用語法except (exc1, exc2) as var可以同時捕獲多種類別的異常。 Python 2.6已經支持這兩種語法。
1. 在2.x時代,所有類型的對象都是可以被直接拋出的,在3.x時代,只有繼承自BaseException的對象才可以被拋出。
2. 2.x raise語句使用逗號將拋出對象類型和參數分開,3.x取消了這種奇葩的寫法,直接調用構造函數拋出對象即可。
在2.x時代,異常在代碼中除了表示程序錯誤,還經常做一些普通控制結構應該做的事情,在3.x中可以看出,設計者讓異常變的更加專一,只有在錯誤發生的情況才能去用異常捕獲語句來處理。
5.xrange
在 Python 2 中 xrange() 創建迭代對象的用法是非常流行的。比如: for 循環或者是列表/集合/字典推導式。
這個表現十分像生成器(比如。"惰性求值")。但是這個 xrange-iterable 是無窮的,意味著你可以無限遍歷。
由於它的惰性求值,如果你不得僅僅不遍歷它一次,xrange() 函數 比 range() 更快(比如 for 循環)。盡管如此,對比迭代一次,不建議你重復迭代多次,因為生成器每次都從頭開始。
在 Python 3 中,range() 是像 xrange() 那樣實現以至於一個專門的 xrange() 函數都不再存在(在 Python 3 中 xrange() 會拋出命名異常)。
importtimeit
n=10000
deftest_range(n):
returnforiinrange(n):
pass
deftest_xrange(n):
foriinxrange(n):
pass
Python 2
print'Python',python_version()
print' timingrange()'
%timeittest_range(n)
print' timingxrange()'
%timeittest_xrange(n)
Python2.7.6
timingrange()
1000loops,bestof3:433µsperloop
timingxrange()
1000loops,bestof3:350µsperloop
Python 3
print('Python',python_version())
print(' timingrange()')
%timeittest_range(n)
Python3.4.1
timingrange()
1000loops,bestof3:520µsperloop
print(xrange(10))
---------------------------------------------------------------------------
NameErrorTraceback(mostrecentcalllast)
<ipython-input-5-5d8f9b79ea70>in<mole>()
---->1print(xrange(10))
NameError:name'xrange'isnotdefined
6.八進制字面量表示
八進制數必須寫成0o777,原來的形式0777不能用了;二進制必須寫成0b111。
新增了一個bin()函數用於將一個整數轉換成二進制字串。 Python 2.6已經支持這兩種語法。
在Python 3.x中,表示八進制字面量的方式只有一種,就是0o1000。
python 2.x
>>>0o1000
512
>>>01000
512
python 3.x
>>>01000
File"<stdin>",line1
01000
^
SyntaxError:invalidtoken
>>>0o1000
512
7.不等運算符
Python 2.x中不等於有兩種寫法 != 和 <>
Python 3.x中去掉了<>, 只有!=一種寫法,還好,我從來沒有使用<>的習慣
8.去掉了repr表達式``
Python 2.x 中反引號``相當於repr函數的作用
Python 3.x 中去掉了``這種寫法,只允許使用repr函數,這樣做的目的是為了使代碼看上去更清晰么?不過我感覺用repr的機會很少,一般只在debug的時候才用,多數時候還是用str函數來用字元串描述對象。
defsendMail(from_:str,to:str,title:str,body:str)->bool:
pass
9.多個模塊被改名(根據PEP8)
>>>s=b.decode()
>>>s
'china'
>>>b1=s.encode()
>>>b1
b'china'
3)dict的.keys()、.items 和.values()方法返回迭代器,而之前的iterkeys()等函數都被廢棄。同時去掉的還有 dict.has_key(),用 in替代它吧 。
⑸ python3模擬登錄有哪些情況
使用谷歌瀏覽器F12查看登錄請求內容
1.request header需要參數:User-Agent、Referer等。
2.post內容。
python 3.x中urllib庫和urilib2庫合並成了urllib庫。
urllib2.urlopen()變成了urllib.request.urlopen()
urllib2.Request()變成了urllib.request.Request()
cookielib 模塊-》http.cookiejar
#!/usr/bin/envpython
#-*-coding:gb2312-*-
#__author__="zhaowei"
'''
python3.4
模擬登錄鄭州公積金網站,查詢繳存至月份。
'''
fromhtml.parserimportHTMLParser
importurllib
importhttp.cookiejar
importstring
importre
hosturl='http://www.zzgjj.com/index.asp'
posturl='http://www.zzgjj.com/user/login.asp'
cj=http.cookiejar.CookieJar()
cookie_support=urllib.request.HTTPCookieProcessor(cj)
opener=urllib.request.build_opener(cookie_support,urllib.request.HTTPHandler)
urllib.request.install_opener(opener)
h=urllib.request.urlopen(hosturl)
headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64;rv:38.0)Gecko/20100101Firefox/38.0',
'Referer':'http://www.zzgjj.com/index.asp'}
postData={'selectlb':'1',#登錄模式,身份證2,賬號1
'username':'1423141234',#公積金賬號
'radename':'趙威',#姓名
'mm':'88888',#密碼
'submit322':'確認'#固定值
}
postData=urllib.parse.urlencode(postData,encoding='gb2312').encode('gb2312')
#因為post裡面有中文,因此需要先把url經過gb2312編碼處理,然後再把請求編碼為gb2312位元組碼(post必須是位元組碼)。
request=urllib.request.Request(posturl,postData,headers)
response=urllib.request.urlopen(request)
text=response.read()
html=text.decode('gb2312')
hgjj_last_data=re.findall('<td><p>繳至月份:</p>(s*)</td>(s*)<td>(.*?)</td>',html)
#使用正則表達式匹配繳至月份
print(hgjj_last_data[0][2])
⑹ python3 爬蟲怎麼設置cookies
都是要使用requests這個神級模塊,你可以讓requests自己處理完全可以,當然也可以一步步設置cookies當然也是可以的,詳細的可以參考文檔http://docs.python-requests.org/zh_CN/latest/
⑺ python3中如何使用cookie python2中有個cookielib 在python3中應該怎麼使用
我通常是使用request這個開放的庫。裡面有cookielib的具體用法。
個人感覺,cookie這東西,還真不如自己解析UA完成,用第三方的庫又累,又不可控。
⑻ python3爬取cookie時報405是怎麼回事
cookielib模塊的主要作用是提供可存儲cookie的對象,以便於與urllib2模塊配合使用來訪問Internet資源。 Cookielib模塊非常強大,我們可以利用本模塊的CookieJar類的對象來捕獲cookie並在後續連接請求時重新發送,比如可以實現模擬登錄 功能。
該模塊主要的對象有CookieJar、FileCookieJar、MozillaCookieJar、LWPCookieJar。
⑼ python2和python3的區別
簡單的說,2是舊3是新,3是2的升級版,3完全高於2,2是時代的眼淚3是現在和未來,2逐漸被淘汰3用的人越來越多。
之前兩個版本共存只是因為諸多package的更新換代並沒有跟上,但是到了現在只要還有活人維護的package基本都兼容3了,然而新建的package卻越來越多不兼容2。使用2的意義基本沒有了,日常用3大不了留一個2備用就行。
⑽ python中的cookielib有什麼作用
登錄只有做一次,登錄後瀏覽頁面之類的,如果沒有cookie,就會提示你沒有登錄