Python
еЯЇдЇОmitmдЄ≠йЧідЇЇзЪД嚥еЉ?иОЈе?ЦжЙАжЬЙеЕђдЉЧе?ЈеОЖе?≤жЦЗзЂ†пЉМиѓДиЃЇпЉМйШЕиѓїйЗ?
feature
1пЉМжФѓжМ?ж∞іеє≥жЙ©е±Х
2пЉМжФѓжМ?еҐЮйЗ?жЫіжЦ∞дЄОиЗ™еК®еМЦжКУе?ЦйШЕиѓїйЗ?пЉМиѓДиЃЇжХ∞ж?Ѓ
3пЉМжФѓжМ?жКУе?Це∞?з¶?е?ОзїІзї≠ж?Ґе§?жКУе?Ц
4пЉМжФѓжМ?е?ДйШґжЃµжЧґйЧійҐСзОЗжОІеИґ
5пЉМжФѓжМ?жМ?зї≠зЫСжОІжМЗеЃЪеЕђдЉЧе?Ј
дї£з†?жЪВдЄ?еЉАжЇ?пЉМе¶ВжЬЙйЧЃйҐШдЇ§жµ?е?ѓеЬ®иѓ•дїУеЇУж??issue,еѓєеЇФе§Дз?Жжµ?з®ЛеЫЊе¶ВдЄЛпЉЪ
nice_download.py е§ЪзЇњз®ЛжЦЗдїґдЄЛиљљеЩ®
з?ЖиЃЇеЬ®е§ІеЮЛжЦЗдїґдЄЛиљљпЉМеЄ¶еЃљеЕЕиґ≥зЪДжГЕеЖµдЄЛпЉМе?ѓеҐЮеК†жХ∞е??еА?дЄЛиљљйАЯеЇ¶
еОЯз?ЖжШѓе§ЪзЇњз®ЛеѓєзЫЃж†ЗжЦЗдїґеИЖе?ЧдЄЛиљљ
1,е?СйА?headиѓЈж±ВиОЈе?ЦзЫЃж†ЗжЦЗдїґжАїе§Іе∞?пЉМдї•е?КељУеЙ?жШѓе?¶жФѓжМ?еИЖе?ЧдЄЛиљљ(иѓ¶жГЕ:httpе??иЃЃheaderе§іrangeе?КresponseзЪДcontent-range)пЉМзО∞еЬ®еЯЇжЬђйГљжФѓжМ?
2,дЄЛиљљеЙ?еИЫеїЇдЄАдЄ™еТМи¶?дЄЛиљљжЦЗдїґдЄАж†Је§Іе∞?зЪДжЦЗдїґ
3,ж†єж?Ѓ1дЄ≠иОЈеЊЧзЪДжЦЗдїґе§Іе∞?еИЖе?Че§ЪзЇњз®Л,е?ДдЄ™зЇњз®ЛдЄЛиљљдЄ?е?МзЪДжХ∞ж?Ѓе?Ч
е∞?еЮЛжЦЗдїґе?ѓиГљзЬЛдЄ?еЗЇеК†йАЯжХИжЮЬпЉМеЬ®е§ІеЮЛжЦЗдїґдЄКе∞±дЉЪжЛЙе§ІеЈЃиЈ?
еЕ≥дЇОhttpзЪДrangeзЙєжАІпЉЪ
жЬЙдЇЫжЦЗдїґдЄЛиљљеЩ®еЬ®дЄЛиљљдЄ≠жЦ≠дєЛе?Ое?ѓдї•еЬ®дЄ≠жЦ≠дљ?зљЃзїІзї≠дЄЛиљљпЉМиАМдЄ?ењЕйЗ?жЦ∞еЉАеІЛзЪДеОЯеЫ†е∞±жШѓеИ©зФ®дЇЖжФѓжМ?rangeзЪДзЙєжАІ
иЃ∞ељХдЇЖдЄ≠жЦ≠жЧґзЪДжЦЗдїґе??зІїдљ?зљЃ,еЬ®еЃЮзО∞жЧґе?™и¶?еЬ®дЄ≠жЦ≠еЉВеЄЄзЪДжЧґеАЩиЃ∞ељХжЦЗдїґе??зІїдљ?зљЃеИ∞дЄіжЧґжЦЗдїґ
дЄЛжђ°зїІзї≠дЄЛиљљиѓїе?ЦдЄіжЧґжЦЗдїґдЄ≠зЪДе??зІїе?≥е?ѓжФѓжМ?жЦ≠зВєдЄЛиљљ,дЄЛиљљеЃМжИ?жЧґеИ†йЩ§иЃ∞ељХжЦЗдїґе??зІїзЪДдЄіжЧґжЦЗдїґе?≥е?ѓ
иѓіжШОпЉЪ
nice_download.pyжШѓе§ЪзЇњз®Лж®°еЉ?,жЙАдї•еОїйЩ§жЦ≠зВєдЄЛиљљеКЯиГљпЉМе?¶еИЩзїіжК§дЄіжЧґжЦЗдїґе??зІїдљ?зљЃжѓФзїіжК§е?ХдЄАињЫз®ЛзЪДдЄіжЧґжЦЗдїґе??зІїдљ?зљЃи¶?е§?ж?ВзЪДе§Ъ
жЯ•зЬЛеЄЃеК©пЉЪpython nice_download.py -h
еЯЇдЇОtensorflowзЪДй™Миѓ?з†?иѓЖеИЂ
дЊ?иµЦ:
pip install tensorflow
pip install numpy
0x01,cd tensorflow
0x02,ж®°еЮЛиЃ≠зїГпЉЪpython train.py
0x03,й™Миѓ?й™Миѓ?пЉЪpython cnn_test.py
еЈ≤жЬЙе§Іе§ЪзЫЄеЕ≥ж°ИдЊЛпЉМжµЛиѓХзЫЄеЕ≥жАїзїУдЄОжИ™еЫЊе¶ВдЄЛ:
жАїзїУжЦЗж°£пЉЪеЯЇдЇОжЬЇеЩ®е≠¶дє†(TensorFlow)зЪДе§?ж?Вй™Миѓ?з†?иѓЖеИЂ.pdf
redpackage.py && red_package_optimize.py дЄАзІ?зЇҐеМЕеИЖйЕ?жА?иЈѓ
red_package_optimize.pyдЄЇдЉШеМЦзЙИпЉМredpackage.pyзЪДrangeжЬЙзВєжµ™иієеЖЕе≠ШпЉМжѓФе¶ВеЬ®зЇҐеМЕдЄ™жХ∞зЙєеИЂе§ІзЪДжГЕеЖµдЄЛ
жМЗеЃЪзЇҐеМЕжАїйЗСйҐ?пЉМеЖ?жМЗеЃЪзЇҐеМЕзЪДдЄ™жХ∞пЉМиОЈеЊЧжѓ?дЄ™зЇҐеМЕеИЖйЕ?йЗСйҐ?иѓ¶жГЕ
дЊЛпЉМзЇҐеМЕжАїйЗСйҐ?дЄЇ10еЕГпЉМеИЖжИ?7дЄ™
вЮЬ Py git:(master) вЬЧ py redpackage.py 10 7
[0.57, 2.37, 1.91, 0.32, 1.3, 2.24, 1.29]
зђђ 1 дЄ™зЇҐеМЕйЗСйҐ?:0.57еЕГ
зђђ 2 дЄ™зЇҐеМЕйЗСйҐ?:2.37еЕГ
зђђ 3 дЄ™зЇҐеМЕйЗСйҐ?:1.91еЕГ
зђђ 4 дЄ™зЇҐеМЕйЗСйҐ?:0.32еЕГ
зђђ 5 дЄ™зЇҐеМЕйЗСйҐ?:1.3еЕГ
зђђ 6 дЄ™зЇҐеМЕйЗСйҐ?:2.24еЕГ
зђђ 7 дЄ™зЇҐеМЕйЗСйҐ?:1.29еЕГ
й™Миѓ?:зЇҐеМЕжАїйЗСйҐ? is 10.0еЕГ, еИЖйЕ?е?О res sum is 10.0еЕГ
ac.py е≠Чзђ¶дЄ≤ж?Ь糥зЃЧж≥ХпЉИtireж†С+ACиЗ™еК®жЬЇ)
е≠¶дє†иЃ∞ељХ:
е¶ВжЮЬдљ†зЪДжЬђеЬ∞е?™жЬЙеЗ†дЄ™пЉМеЗ†е??дЄ™иѓ?пЉМйВ£дєИж≤°жЬЙењЕи¶?дљњзФ®пЉМзЫіжО•е≠ШйЕ?зљЃжЦЗдїґпЉМе≠ЧеЕЄжЯ•жЙЊе?≥е?ѓпЉМ
ињЩжѓФе?Сapiе?СиµЈhttpиѓЈж±Ви¶?ењЂзЪДе§ЪгАВдљЖе¶ВжЮЬиѓ?зЪДжХ∞зЫЃдЄ?жЦ≠еҐЮеК†пЉМйВ£дєИе?ОжЬЯе∞ЖдЄ?еИ©дЇОзїіжК§пЉМ
йЬАи¶?жЬ?еК°еМЦгАВ
ињЩдЄ™зЃЧж≥Хе≠ШеЬ®дЇОеЃЮйЩЕеЬЇжЩѓ,еИ§жЦ≠жЯ?дЄ™е?Хиѓ?жШѓе?¶жШѓжХ?жДЯиѓ?пЉМе∞±жґЙе?КеИ∞е≠Чзђ¶дЄ≤жЯ•жЙЊгАВ
жХ?жДЯиѓ?襀е∞?и£ЕжИ?дЇЖдЄАдЄ™apiжО•е?£,дљњзФ®иµЈж?•дєЯеЊИжЦєдЊњ,зЫіжО•е?Сapiж??дЇ§е?Хиѓ?,
зЬЛињФеЫЮзїУжЮЬе∞±зЯ•й?УжШѓе?¶еСљдЄ≠,еСљдЄ≠дЇЖеИЩе≠Чзђ¶дЄ≤е≠ШеЬ®,и°®жШОжЯ•жЙЊеИ∞дЇЖгАВ
йЬАи¶?жХ∞ж?ЃзїУжЮДдЄОзЃЧж≥ХзЯ•иѓЖпЉЪ
е?ВиАГжЦЗж°£1(жµЈйЗ?жХ∞ж?Ѓе§Дз?ЖдєЛTireж†СпЉИе≠ЧеЕЄж†С))пЉЪ
http://blog.csdn.net/ts173383201/article/details/7858598
е?ВиАГжЦЗж°£2(ACиЗ™еК®жЬЇжАїзїУ)пЉЪ
http://blog.csdn.net/mobius_strip/article/details/22549517
trieзЪДж†ЄењГжА?жГ≥жШѓз©ЇйЧіж?ҐжЧґйЧі,иЈЯељ©иЩєи°®зЪДжА?жГ≥дЄАиЗі,дљЖtrieж†СдЄ?жШѓељ©иЩєи°®,
зЃАиАМи®АдєЛ,trieж†СеИ©зФ®е≠Чзђ¶дЄ≤зЪДеЕђеЕ±еЙ?зЉАж?•йЩ?дљОжߕ胥жЧґйЧізЪДеЉАйФАдї•иЊЊеИ∞ж??йЂШжХИзОЗзЪДзЫЃзЪДгАВ
еЃГжЬЙ3дЄ™еЯЇжЬђжАІиі®пЉЪ
ж†єиКВзВєдЄ?еМЕе?Ђе≠Чзђ¶пЉМйЩ§ж†єиКВзВєе§Цжѓ?дЄАдЄ™иКВзВєйГље?™еМЕе?ЂдЄАдЄ™е≠Чзђ¶гАВ
дїОж†єиКВзВєеИ∞жЯ?дЄАиКВзВєпЉМиЈѓеЊДдЄКзї?ињЗзЪДе≠Чзђ¶ињЮжО•иµЈж?•пЉМдЄЇиѓ•иКВзВєеѓєеЇФзЪДе≠Чзђ¶дЄ≤гАВ
жѓ?дЄ™иКВзВєзЪДжЙАжЬЙе≠?иКВзВєеМЕе?ЂзЪДе≠Чзђ¶йГљдЄ?зЫЄе?МгАВ
е§?еИґдЇЖеИЂдЇЇзФїзЪДеЫЊпЉМе§ІиЗіе∞±жШѓдЄАзІ?е¶ВдЄЛзЪДж†СзїУжЮД,йЬАи¶?зФ®иѓ≠и®АжЮДйА†ињЩж£µж†Се?≥е?ѓ:
fail жМЗйТИзЪДз?ЖиІ£еЫЊиІ£,дї•дЄЛеЖЕеЃєйЬАи¶?дїФзїЖиѓї
е?ВиАГпЉЪhttp://www.cnblogs.com/crazyacking/p/4659501.html
ж†СдЄКзЪДиѓ?еИЖеИЂжШѓпЉЪ
{ he , hers , his , she}
жМЙеЫЊжЙАз§ЇеИЖжИ?3е±ВгАВзЬЛеИ∞зђђдЄЙе±ВпЉМжШѓ"she"пЉМеЕґдЄ≠пЉЪ
вС†sжМЗе?Сroot
вС°hеЕИжЙЊеИ∞sзЪДfailжМЗйТИ
е?СзО∞жШѓ0е?ЈжМЗйТИпЉМдЄ?жШѓhпЉМзДґе?Оhе∞±дЄ?йЂШеЕідЇЖпЉМеЖ?йЧЃйЧЃsзЪДfailжМЗйТИrootпЉЪвАЬдљ†жЬЙж≤°жЬЙеДње≠?еТМжИСе?Ме??е?ЂhзЪДвА?
rootиѓіпЉЪвАЬжЬЙпЉМдљ†жМЗе?СдїЦе?ІвА?пЉМзДґе?Оhе∞±йЂШеЕізЪДжМЗе?СдЇЖзђђдЄАи°МзЪДh.
вСҐeеЉАеІЛжЙЊдЇЖпЉМй¶ЦеЕИйЧЃдїЦиА?зИЄhпЉЪвАЬдљ†зЪДfailжМЗйТИжМЗз?Аи∞?вА?
hиѓіпЉЪвАЬеЫЊдЄКзђђдЄАи°МйВ£дЄ™hеХКвА?
зДґе?Оeе∞±е±?饆е±?饆еЬ∞иЈСеОїйЧЃеЫЊдЄКзђђдЄАи°МйВ£дЄ™hпЉЪвАЬдљ†жЬЙж≤°жЬЙе??е≠ЧеТМжИСдЄАж†ЈзЪДеДње≠?еХКвА?
еЫЊдЄКзђђдЄАи°МйВ£дЄ™hиѓіпЉЪвАЬжЬЙпЉМдїЦеЬ∞е?АжШѓxxxвА?
жЬАе?ОeзЪДfailжМЗйТИе∞±жМЗе?СxxxеЬ∞е?АпЉМдєЯе∞±жШѓзђђдЄАи°МйВ£дЄ™eдЇЖ
е?СзО∞ињЩж†ЈпЉМе¶ВжЮЬдЄАдЄ™е≠Чзђ¶дЄ≤жЯ•еИ∞зђђдЄЙи°МзЪДeдї•е?ОзЪДе≠Чзђ¶жЙ?дЄ?еМєйЕ?пЉМйВ£иѓіжШОдїЦеЙ?й?ҐеЇФиѓ•жЬЙдЄ™вАШheвАЩ
еИЪе•љeзЪДе§±иі•жМЗйТИжМЗе?СзЪДжШѓзђђдЄАи°МзЪДвАШhe...вАЩзЪДйВ£дЄ™eпЉЫ
ињЩж†Је∞±дЄ?зФ®дїОhеЉАеІЛеЖ?жЙЊдЄАй??пЉМиАМжШѓжО•з?АзђђдЄАи°МзЪДeзїІзї≠еЊАе?ОжЙЊпЉМдїОиАМиКВзЬ?дЇЖжЧґйЧі.
вЮЬ ~ du -h word.md && wc -l word.md
1.0M word.md
57193 word.md
жЬђеЬ∞жµЛиѓХдЇЖдЄАдЄЛпЉМ57000ж?°иЃ∞ељХе§ІдЇОе?†1Mз°ђзЫШз©ЇйЧіпЉМйВ£дєИ6MзЪДз©ЇйЧіе§ІзЇ¶еМЕе?ЂиЃ∞ељХ34Wж?°иЃ∞ељХ,
жИСдЉ†еИ∞githubзЪДword.mdж≤°жЬЙеЗ†дЄ™е≠Чзђ¶,е?™е?ЪдЇЖжЉФз§Ї,иАМдЄФжѓ?дЄ™е?Хиѓ?ињШеК†дЇЖrankз≠ЙзЇІпЉМ\tеИґи°®зђ¶,еЃЮйЩЕе?†зФ®з©ЇйЧіеЇФиѓ•жЫіе∞?,
зФЯдЇІзОѓеҐГзФЪиЗ≥е?ѓдї•зЫіжО•е∞ЖињЩдЇЫжХ∞ж?ЃзЉУе≠ШеИ∞еЖЕе≠ШдЄ≠гАВ
жµЛиѓХж?Ь糥жМЗеЃЪе≠Чзђ¶дЄ≤пЉЪ
жЯ•жЙЊеИ∞дЇЖ
вЮЬ ~ python ac.py lock
Good ! Find it, the item is:
[(0, 3, 'lock', 1, 2)]
жЯ•жЙЊеИ∞дЇЖ
вЮЬ ~ python ac.py stop
Good ! Find it, the item is:
[(0, 3, 'stop', 2, 3)]
ж≤°жЬЙжЯ•жЙЊеИ∞
вЮЬ ~ python ac.py test
Sorry, The item not in file dict
е¶ВжЮЬжЯ•жЙЊеИ∞дЇЖињФеЫЮдЄАдЄ™listпЉМlistдЄ≠itemз±їеЮЛдЄЇtuple, еєґдЄФеМЕе?ЂдЇЖеЬ®ж†СдЄ≠еМєйЕ?зЪДиµЈ,зїИзВєдљ?зљЃindex
calc24.py зЃЧ24жЄЄжИ?е∞?з®ЛеЇ?
жЄЄжИ?иІДеИЩпЉЪзїЩеЃЪ4дЄ™жХ∞пЉМе?ѓдї•жЙІи°МзЪДињ?зЃЧжЬЙ + - * / , ж±ВеЗЇзЃЧзЪДзїУжЮЬжШѓ24зЪДзЃЧж≥ХињЗз®Л
get helpпЉЪ
вЮЬ Py git:(master) вЬЧ py calc24.py -h
Usage: usage -n 1,2,3,4
Options:
-h, --help show this help message and exit
-n NUMS specify num list
exp:
вЮЬ Py git:(master) вЬЧ py calc24.py -n 10,8,9,4
[10, 8, 9, 4]
9 - 10 = -1
4 + -1 = 3
8 * 3 = 24
Success
or random test:
вЮЬ Py git:(master) вЬЧ py calc24.py
[9, 10, 3, 6]
10 - 9 = 1
3 + 1 = 4
6 * 4 = 24
Success
~~~pythonиљЃе≠?еЊИеЉЇе§І~~~
rpn.py йАЖж≥ҐеЕ∞и°®иЊЊеЉ? python зЙИеЃЮзО∞
йАЖж≥ҐеЕ∞и°®иЊЊеЉ?襀府ж≥ЫеЇФзФ®дЇОзЉЦиѓСеОЯз?ЖдЄ≠пЉМжШѓдЄАзІ?жШѓзФ±ж≥ҐеЕ∞жХ∞е≠¶еЃґжЙђ¬Јж≠¶е?°и∞Ґзїіе•З1920еєіеЉХеЕ•зЪДжХ∞е≠¶и°®иЊЊеЉ?жЦєеЉ?пЉМеЬ®йАЖж≥ҐеЕ∞иЃ∞ж≥ХдЄ≠пЉМ
жЙАжЬЙжУ?дљЬзђ¶зљЃдЇОжУ?дљЬжХ∞зЪДе?Ой?ҐпЉМеЫ†ж≠§дєЯ襀зІ∞дЄЇе?ОзЉАи°®з§Їж≥ХгАВйАЖж≥ҐеЕ∞иЃ∞ж≥ХдЄ?йЬАи¶?жЛђе?Јж?•ж†ЗиѓЖжУ?дљЬзђ¶зЪДдЉШеЕИзЇІгАВ
дї•еИ©зФ®е†Жж†ИзїУжЮДеЗ?е∞СиЃ°зЃЧжЬЇеЖЕе≠ШиЃњйЧЃгАВ
вЮЬ Py git:(master) вЬЧ python rpn.py
['11111111111111', '9999999999999', '*', '99', '12', '4', '/', '-', '10', '+', '+']
True 111111111111098888888888995 111111111111098888888888995
True 326 326
dispatch.py иљЃиљђйШЯеИЧ | е??з®ЛеЃЮзО∞
дљ†зЪДжЙЛе§ідЄКдЉЪжЬЙе§ЪдЄ™дїїеК°пЉМжѓ?дЄ™дїїеК°иАЧжЧґеЊИйХњпЉМиАМдљ†е?ИдЄ?жГ≥е?Мж≠•е§Дз?ЖпЉМиАМжШѓеЄМжЬЫиГљеГ?е§ЪзЇњз®ЛдЄАж†ЈдЇ§жЫњжЙІи°МгАВ
yield ж≤°жЬЙйАїиЊСжД?дєЙпЉМдїЕжШѓдљЬдЄЇжЪВе?ЬзЪДж†ЗењЧзВєгАВ
з®ЛеЇ?жµ?е?ѓдї•еЬ®ж≠§жЪВе?ЬпЉМдєЯе?ѓдї•еЬ®ж≠§ж?Ґе§?гАВиАМйАЪињЗеЃЮзО∞дЄАдЄ™и∞ГеЇ¶еЩ®пЉМеЃМжИ?е§ЪдЄ™дїїеК°зЪДеєґи°Ме§Дз?ЖгАВ
йАЪињЗиљЃиљђйШЯеИЧдЊ?жђ°еФ§иµЈдїїеК°пЉМеєґе∞ЖеЈ≤зї?еЃМжИ?зЪДдїїеК°жЄЕеЗЇйШЯеИЧпЉМж®°жЛЯдїїеК°и∞ГеЇ¶зЪДињЗз®ЛгАВ
ж†ЄењГдї£з†?пЉЪ
from collections import deque
class Runner(object):
def __init__(self, tasks):
self.tasks = deque(tasks)
def next(self):
return self.tasks.pop()
def run(self):
while len(self.tasks):
task = self.next()
try:
next(task)
except StopIteration:
pass
else:
self.tasks.appendleft(task)
def task(name, times):
for i in range(times):
yield
print(name, i)
Runner([
task('hsfzxjy', 5),
task('Jack', 4),
task('Bob', 6)
]).run()
coroutine.py йАЪињЗgeventзђђдЄЙжЦєеЇУеЃЮзО∞е??з®Л
дЄКй?ҐзЪДdispatch.pyйАЪињЗyieldж??дЊЫдЇЖеѓєе??з®ЛзЪДжФѓжМ?,ж®°жЛЯдЇЖдїїеК°и∞ГеЇ¶гАВиАМдЄЛй?ҐзЪДињЩдЄ™geventзђђдЄЙжЦєеЇУе∞±жЫізЃАе?ХдЇЖгАВ
зђђдЄЙжЦєзЪДgeventдЄЇPythonж??дЊЫдЇЖжѓФиЊГеЃМеЦДзЪДе??з®ЛжФѓжМ?гАВйАЪињЗgreenletеЃЮзО∞е??з®ЛпЉМеЕґеЯЇжЬђжА?жГ≥жШѓпЉЪ
ељУдЄАдЄ™greenletй?ЗеИ∞IOжУ?дљЬжЧґпЉМжѓФе¶ВиЃњйЧЃзљСзїЬпЉМе∞±иЗ™еК®еИЗж?ҐеИ∞еЕґдїЦзЪДgreenletпЉМз≠ЙеИ∞IOжУ?дљЬеЃМжИ?пЉМеЖ?еЬ®йАВељУзЪДжЧґеАЩеИЗж?ҐеЫЮж?•зїІзї≠жЙІи°МгАВ
зФ±дЇОIOжУ?дљЬй?ЮеЄЄиАЧжЧґпЉМзї?еЄЄдљњз®ЛеЇ?е§ДдЇОз≠ЙеЊЕзКґжА?пЉМжЬЙдЇЖgeventдЄЇжИСдїђиЗ™еК®еИЗж?Ґе??з®ЛпЉМе∞±дњ?иѓ?жАїжЬЙgreenletеЬ®ињ?и°МпЉМиАМдЄ?жШѓз≠ЙеЊЕIOгАВ
зФ±дЇОеИЗж?ҐжШѓеЬ®IOжУ?дљЬжЧґиЗ™еК®еЃМжИ?пЉМжЙАдї•geventйЬАи¶?дњЃжФєPythonиЗ™еЄ¶зЪДдЄАдЇЫж†ЗеЗЖеЇУпЉМињЩдЄАињЗз®ЛеЬ®е?ѓеК®жЧґйАЪињЗmonkey patchеЃМжИ?пЉЪ
дЊ?иµЦпЉЪ
pip install gevent
жЙІи°МпЉЪ
вЮЬ Py git:(master) вЬЧ python coroutine.py
GET: https://www.python.org/
GET: https://www.yahoo.com/
GET: https://github.com/
91430 bytes received from https://github.com/.
47391 bytes received from https://www.python.org/.
461975 bytes received from https://www.yahoo.com/.
base64_str.py base64зЉЦз†?еОЯз?Ж
base64зЉЦз†?еОЯз?ЖпЉМдљњзФ®PythonеЃЮзО∞base64зЉЦз†?пЉМе?ѓиГљжЬЙbugпЉМжЬ™еЃМеЕ®еЃМеЦДзЙИ
1,еЗЖе§ЗдЄАдЄ™еМЕе?Ђ64дЄ™е≠Чзђ¶зЪДжХ∞зїД
2,еѓєдЇМињЫеИґжХ∞ж?ЃињЫи°Ме§Дз?ЖпЉМжѓ?3дЄ™е≠ЧиКВдЄАзїДпЉМдЄАеЕ±жШѓ3x8=24bitпЉМеИТдЄЇ4зїДпЉМжѓ?зїДж≠£е•љ6дЄ™bit
3,еЊЧеИ∞4дЄ™жХ∞е≠ЧдљЬ䪯糥еЉХпЉМзДґе?ОжЯ•и°®пЉМиОЈеЊЧзЫЄеЇФзЪД4дЄ™е≠Чзђ¶пЉМе∞±жШѓзЉЦз†?е?ОзЪДе≠Чзђ¶дЄ≤
4,е¶ВжЮЬи¶?зЉЦз†?зЪДдЇМињЫеИґжХ∞ж?ЃдЄ?жШѓ3зЪДеА?жХ∞пЉМжЬАе?ОдЉЪеЙ©дЄЛ1дЄ™жИЦ2дЄ™е≠ЧиКВ,Base64зФ®\x00е≠ЧиКВеЬ®жЬЂе∞Њи°•иґ≥е?ОпЉМеЖ?еЬ®зЉЦз†?зЪДжЬЂе∞ЊеК†дЄК1дЄ™жИЦ2дЄ™=е?ЈпЉМ
и°®з§Їи°•дЇЖе§Ъе∞Се≠ЧиКВпЉМиІ£з†?зЪДжЧґеАЩпЉМдЉЪиЗ™еК®еОїжОЙгАВ
Base64зЉЦз†?дЉЪжКК3е≠ЧиКВзЪДдЇМињЫеИґжХ∞ж?ЃзЉЦз†?дЄЇ4е≠ЧиКВзЪДжЦЗжЬђжХ∞ж?ЃпЉМйХњеЇ¶еҐЮеК†33%
дЊЛпЉЪ
вЮЬ Py git:(master) вЬЧ python base64_str.py lock
bG9jaw==
вЮЬ Py git:(master) вЬЧ echo -n lock|base64
bG9jaw==
rsa.py RSAзЃЧж≥ХжЉФз§Ї
вЮЬ py python rsa.py
дЄЛй?ҐжШѓдЄАдЄ™RSAеК†иІ£еѓЖзЃЧж≥ХзЪДзЃАе?ХжЉФз§Ї:
жК•жЦЗ еК†еѓЖ еК†еѓЖе?ОеѓЖжЦЗ
12 248832 17
15 759375 15
22 5153632 22
5 3125 10
---------------------------
----------жЙІи°МиІ£еѓЖ---------
---------------------------
еОЯеІЛжК•жЦЗ еѓЖжЦЗ еК†еѓЖ иІ£еѓЖжК•жЦЗ
12 17 1419857 12
15 15 759375 15
22 22 5153632 22
5 10 100000 5
selenium.py иЗ™еК®еМЦжµЛиѓХdemo
е?С1пЉЪ
жЙІи°М python selenium.py еІЛзїИжЧ†ж≥ХеФ§йЖТchromeгАВ
жЬАзїИе?СзО∞chromedriverеЊИжЧ©дєЛеЙ?еЃЙи£ЕзЪДпЉМж≤°жЬЙињЫи°МпЉЪbrew upgrade chromedriverпЉМеѓЉиЗіжЙІи°МиДЪжЬђжЧґжК•йФЩ
upgrade chromedriver дєЛе?ОиІ£еЖ≥йЧЃйҐШпЉМеЃШжЦєжЦЗж°£иѓіжШОдЇЖseleniumжФѓжМ?е•љеЗ†дЄ™Browser driverгАВ
жЉФз§ЇжЧґзФ®зЪДжШѓChromeпЉМpythonзЪДunittestж®°е?ЧпЉМжЦЗж°£дЄКиѓідєЯе?ѓдї•зФ®pytest
е§ІиЗіжФѓжМ?ињЩдї•дЄЛеЗ†зІ?DOMжЯ•жЙЊ,дЄ?е?Миѓ≠и®АзЪДжО•е?£зХ•еЊЃзЪДе∞?еМЇеИЂ
driver.findElement(By.id(<element ID>))
driver.findElement(By.name(<element name>))
driver.findElement(By.className(<element class>))
driver.findElement(By.tagName(<htmltagname>))
driver.findElement(By.linkText(<linktext>))
driver.findElement(By.partialLinkText(<linktext>))
driver.findElement(By.cssSelector(<css selector>))
driver.findElement(By.xpath(<xpath>))
жФѓжМ?Using Selenium with remote WebDriver
жФѓжМ?ињЬз®ЛWebDriverпЉМйїШиЃ§зЫСе?ђ4444зЂѓе?£
е?ѓеК®пЉЪbrew services start selenium-server-standalone
е?Ьж≠ҐпЉЪbrew services stop selenium-server-standalone
иЃњйЧЃhttp://127.0.0.1:4444 зВєеЗїconsole,
жЦ∞еїЇж≠£еЬ®жµЛиѓХжЙАдљњзФ®зЪДwebdriver,еѓєдЇОж≠£еЬ®ињ?и°МdriverзЪДжµЛиѓХз®ЛеЇ?пЉМе?ѓдї•жИ™еЫЊзЬЛељУеЙ?жµЛиѓХз®ЛеЇ?зЪДињ?и°Мдљ?зљЃ
Python ж≤ЩзЃ±йАГйАЄ
йЗ?жЄ©2012.hack.luзЪДжѓФиµЫйҐШзЫЃпЉМеЬ®ињЩжђ°жМСжИШдЄ≠пЉМйЬАи¶?иѓїе?Ц'./1.key'жЦЗдїґзЪДеЖЕеЃєгАВ
дїЦдїђй¶ЦеЕИйАЪињЗеИ†йЩ§еЉХзФ®ж?•йФАжѓ?жЙУеЉАжЦЗдїґзЪДеЖЕзљЃеЗљжХ∞гАВзДґе?ОеЃГдїђеЕ?иЃЄжВ®жЙІи°МзФ®жИЈиЊУеЕ•гАВзЬЛзЬЛдїЦдїђзЪДдї£з†?з®?еЊЃдњЃжФєзЪДзЙИжЬђпЉЪ
def make_secure():
UNSAFE = ['open',
'file',
'execfile',
'compile',
'reload',
'__import__',
'eval',
'input']
for func in UNSAFE:
del __builtins__.__dict__[func]
from re import findall
# Remove dangerous builtins
make_secure()
print 'Go Ahead, Expoit me >;D'
while True:
try:
# Read user input until the first whitespace character
inp = findall('\S+', raw_input())[0]
a = None
# Set a to the result from executing the user input
exec 'a=' + inp
print 'Return Value:', a
except Exception, e:
print 'Exception:', e
зФ±дЇОж≤°жЬЙеЬ®__builtins__дЄ≠еЉХзФ®fileеТМopenпЉМжЙАдї•еЄЄиІДзЪДзЉЦз†?жКАеЈІжШѓи°МдЄ?йАЪзЪДгАВдљЖе?ѓдї•еЬ®PythonиІ£йЗКеЩ®дЄ≠жМЦжОШеЗЇе?¶дЄАзІ?дї£жЫњfileжИЦopenеЉХзФ®зЪДжЦєж≥ХгАВ
е?¶з±їиѓїе?ЦжЦЗдїґзЪДжЦєеЉ?пЉЪ
().__class__.__bases__[0].__subclasses__()[40]('1.key').read()
ињЩдЄ™жЦєж≥ХдЊ?зДґе?ѓдї•иѓїе?ЦеИ∞1.keyзЪДеЖЕеЃєпЉМcoder,hack,geekе?ѓдї•жЈ±еЕ•дЇЖиІ£дЄЛпЉМжЬђдЇЇжµЛиѓХжЧґзЪДpythonзЙИжЬђдЄЇпЉЪPython 2.7.12
avl_tree.py еє≥и°°дЇМе?Йж?Ь糥ж†С
зЙєзВєпЉЪ
1гА?иЛ•еЃГзЪДеЈ¶е≠?ж†СдЄ?дЄЇз©ЇпЉМеИЩеЈ¶е≠?ж†СдЄКжЙАжЬЙзЪДиКВзВєеАЉйГље∞?дЇОеЃГзЪДж†єиКВзВєеАЉгАВ
2гА?иЛ•еЃГзЪДе?≥е≠?ж†СдЄ?дЄЇз©ЇпЉМеИЩе?≥е≠?ж†СдЄКжЙАжЬЙзЪДиКВзВєеАЉе?Зе§ІдЇОеЃГзЪДж†єиКВзВєеАЉгАВ
3гА?еЃГзЪДеЈ¶е?≥е≠?ж†СдєЯеИЖеИЂе?ѓдї•еЕЕељУдЄЇдЇМе?ЙжЯ•жЙЊж†СгАВ
4гА?жѓ?дЄ™иКВзВєзЪДеЈ¶е≠?ж†СеТМе?≥е≠?ж†СзЪДйЂШеЇ¶еЈЃиЗ≥е§Ъз≠ЙдЇО1гАВ
е¶ВжЮЬжЩЃйАЪдЇМе?Йж?Ь糥ж†СзЪДжЈ±еЇ¶еЊИйЂШдЄФе?ХдЄАеЈ¶иЊєиКВзВєеЊИе§ЪжИЦиАЕе?ХдЄАе?≥иЊєиКВзВєеЊИе§ЪпЉМйВ£дєИжЯ•жЙЊжАІиГљеЗ†дєОе∞±е?ШжИ?дЇЖзЇњжАІзЪД
иАМеє≥и°°дЇМе?Йж†СзЪДжѓ?дЄ™иКВзВєзЪДеЈ¶е≠?ж†СеТМе?≥е≠?ж†СзЪДйЂШеЇ¶еЈЃиЗ≥е§Ъз≠ЙдЇО1пЉМињЩзІ?ж†СзїУжЮДзЪДжЯ•жЙЊжАІиГљжЧґйЧіе§?ж?ВеЇ¶иґЛе?Сlgn
вЮЬ Py git:(master) вЬЧ py avl_tree.py
8
9
1
rb_tree.py зЇҐйїСж†С
зЇҐйїСж†Се§ЪзФ®еЬ®еЖЕйГ®жОТеЇ?пЉМе?≥еЕ®жФЊеЬ®еЖЕе≠ШдЄ≠зЪДпЉМеЊЃиљѓSTLзЪДmapеТМsetзЪДеЖЕйГ®еЃЮзО∞е∞±жШѓзЇҐйїСж†СгАВ
Bж†Се§ЪзФ®еЬ®еЖЕе≠ШйЗМжФЊдЄ?дЄЛпЉМе§ІйГ®еИЖжХ∞ж?Ѓе≠ШеВ®еЬ®е§Це≠ШдЄКжЧґгАВеЫ†дЄЇBж†Се±ВжХ∞е∞СпЉМеЫ†ж≠§е?ѓдї•з°Ѓдњ?жѓ?жђ°жУ?дљЬпЉМиѓїе?Цз£?зЫШзЪДжђ°жХ∞е∞ље?ѓиГљзЪДе∞СгАВ
еЬ®жХ∞ж?ЃиЊГе∞?пЉМе?ѓдї•еЃМеЕ®жФЊеИ∞еЖЕе≠ШдЄ≠жЧґпЉМзЇҐйїСж†СзЪДжЧґйЧіе§?ж?ВеЇ¶жѓФBж†СдљОгАВ
е??дєЛпЉМжХ∞ж?ЃйЗ?иЊГе§ІпЉМе§Це≠ШдЄ≠е?†дЄїи¶?йГ®еИЖжЧґпЉМBж†СеЫ†еЕґиѓїз£?зЫШжђ°жХ∞е∞СпЉМиАМеЕЈжЬЙжЫіењЂзЪДйАЯеЇ¶гАВ
зЙєзВєпЉЪ
пЉИ1пЉЙжѓ?дЄ™иКВзВєжИЦиАЕжШѓйїСиЙ≤пЉМжИЦиАЕжШѓзЇҐиЙ≤гАВ
пЉИ2пЉЙж†єиКВзВєжШѓйїСиЙ≤гАВ
пЉИ3пЉЙжѓ?дЄ™е?ґе≠?иКВзВєпЉИNILпЉЙжШѓйїСиЙ≤гАВ [ж≥®жД?пЉЪињЩйЗМе?ґе≠?иКВзВєпЉМжШѓжМЗдЄЇз©Ї(NILжИЦNULL)зЪДе?ґе≠?иКВзВєпЉ?]
пЉИ4пЉЙе¶ВжЮЬдЄАдЄ™иКВзВєжШѓзЇҐиЙ≤зЪДпЉМеИЩеЃГзЪДе≠?иКВзВєењЕй°їжШѓйїСиЙ≤зЪДгАВ
пЉИ5пЉЙдїОдЄАдЄ™иКВзВєеИ∞иѓ•иКВзВєзЪДе≠?е≠ЩиКВзВєзЪДжЙАжЬЙиЈѓеЊДдЄКеМЕе?ЂзЫЄе?МжХ∞зЫЃзЪДйїСиКВзВєгАВ
revert_list.py е??иљђйУЊи°®
вЮЬ Py git:(master) вЬЧ py revert_list.py
1
2
3
start revert list ...
3
2
1
palindrome.py pythonзЙИеЫЮжЦЗжХ∞,heapq_sort.pyеЯЇдЇОе†ЖжОТеЇ?
life is short , use python
-(1)жЧґйЧіе§?ж?ВеЇ¶пЉЪO(n)пЉМз©ЇйЧіе§?ж?ВеЇ¶пЉЪO(1)гАВдїОдЄ§е§іе?СдЄ≠йЧіжЙЂж??
-(2)жЧґйЧіе§?ж?ВеЇ¶пЉЪO(n)пЉМз©ЇйЧіе§?ж?ВеЇ¶пЉЪO(1)гАВеЕИдїОдЄ≠йЧіеЉАеІЛгА?зДґе?Ое?СдЄ§иЊєжЙ©е±Х
е†ЖжОТеЃЮзО∞пЉМpythonеѓєжЬЙеѓєеЇФе∞?и£Ее•љзЪДheapqж®°е?Ч
py heapq_sort.py
kmp.py kmpе≠Чзђ¶дЄ≤жЯ•жЙЊзЃЧж≥Х
вЮЬ Py git:(master) вЬЧ python kmp.py
Found 'sase' start at string 'asfdehhaassdsdasasedwa' 15 index position, find use times: 23
Found 'sase' start at string '12s3sasexxx' 4 index position, find use times: 9
ж†ЄењГзЃЧж≥ХпЉЪ
def kmp(string, match):
n = len(string)
m = len(match)
i = 0
j = 0
count_times_used = 0
while i < n:
count_times_used += 1
if match[j] == string[i]:
if j == m - 1:
print "Found '%s' start at string '%s' %s index position, find use times: %s" % (match, string, i - m + 1, count_times_used,)
return
i += 1
j += 1
elif j > 0:
j = j - 1
else:
i += 1
compress.py е≠Чзђ¶дЄ≤еОЛзЉ©
йТИеѓєињЮзї≠йЗ?е§?иЊГе§ЪзЪДе≠Чзђ¶еОЛзЉ©пЉМе?¶еИЩдЄ?иµЈеОЛзЉ©жХИжЮЬ
вЮЬ Py git:(master) вЬЧ python compress.py
еОЯеІЛе≠Чзђ¶дЄ≤:xAAACCCBBDBB111
еОЛзЉ©е?О:x1A3C3B2D1B213
жЙІи°МиІ£еОЛ...
x
A
A
A
C
C
C
B
B
D
B
B
1
1
1
иІ£еОЛеЃМжѓХ
иІ£еОЛе?О:xAAACCCBBDBB111
hashtable.py hashи°®еЃЮзО∞
hash_table = HashTable(5); # еИЖйЕ?5е?Ч
hash_table.set(1,'x')
print hash_table.get(1)
ж†ЄењГдї£з†?пЉЪ
class Item(object):
def __init__(self, key, value):
self.key = key
self.value = value
class HashTable(object):
def __init__(self, size):
self.size = size
self.table = [[] for _ in xrange(self.size)]
def hash_function(self, key):
return key % self.size
def set(self, key, value):
hash_index = self.hash_function(key)
for item in self.table[hash_index]:
if item.key == key:
item.value = value
return
self.table[hash_index].append(Item(key, value))
def get(self, key):
hash_index = self.hash_function(key)
for item in self.table[hash_index]:
if item.key == key:
return item.value
return None
def remove(self, key):
hash_index = self.hash_function(key)
for i, item in enumerate(self.table[hash_index]):
if item.key == key:
del self.table[hash_index][i]
interpreter.py PythonиІ£йЗКеЩ®з?ЖиІ£
PythonдЉЪжЙІи°МеЕґдїЦ3дЄ™ж≠•й™§пЉЪиѓ?ж≥ХеИЖжЮ?пЉМиѓ≠ж≥ХиІ£жЮ?еТМзЉЦиѓСгАВ
ињЩдЄЙж≠•е?ИиµЈж?•жККжЇ?дї£з†?иљђж?ҐжИ?code object,еЃГеМЕе?Ђз?АиІ£йЗКеЩ®е?ѓдї•з?ЖиІ£зЪДжМЗдї§гАВиАМиІ£йЗКеЩ®зЪДеЈ•дљЬе∞±жШѓиІ£йЗКcode objectдЄ≠зЪДжМЗдї§гАВ
ж†ЄењГдї£з†?
class Interpreter:
def __init__(self):
self.stack = []
def load_value(self, number):
self.stack.append(number)
def print_answer(self):
answer = self.stack.pop()
print(answer)
def add_two_values(self):
first_num = self.stack.pop()
second_num = self.stack.pop()
total = first_num + second_num
self.stack.append(total)
def run_code(self, what_to_execute):
instructions = what_to_execute["instructions"]
numbers = what_to_execute["numbers"]
for each_step in instructions:
instruction, argument = each_step
if instruction == "load_value":
number = numbers[argument]
self.load_value(number)
elif instruction == "add_two_values":
self.add_two_values()
elif instruction == "print_answer":
self.print_answer()
linked_list.py ењЂйАЯжЯ•жЙЊе?ХйУЊи°®дЄ≠йЧіиКВзВє
вЮЬ Py git:(master) py linked_list.py
жЩЃйАЪй??еОЖжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:n3,糥еЉХдЄЇ:2пЉМй??еОЖдЄАжђ°йУЊи°®пЉМеЬ®дїО0й??еОЖеИ∞дЄ≠йЧідљ?зљЃ
ењЂжЕҐжМЗйТИжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:n3,糥еЉХдЄЇ:2пЉМе?™й??еОЖдЄАжђ°йУЊи°®
ж†ЄењГдї£з†?пЉЪ
class Node(object):
def __init__(self,data,next):
self.data=data
self.next=next
n1 = Node('n1',None)
n2 = Node('n2',n1)
n3 = Node('n3',n2)
n4 = Node('n4',n3)
n5 = Node('n5',n4)
head = n5 # йУЊи°®зЪДе§іиКВзВє
p1 = head # дЄАжђ°ж≠•ињЫ1дЄ™node
p2 = head # дЄАжђ°ж≠•ињЫ2дЄ™node
step = 0
while (p2.next is not None and p2.next.next is not None):
p2 = p2.next.next
p1 = p1.next
step = step + 1
print 'ењЂжЕҐжМЗйТИжЦєеЉ?,е?ХйУЊи°®дЄ≠йЧіиКВзВєдЄЇ:%s,糥еЉХдЄЇ:%sпЉМе?™й??еОЖдЄАжђ°йУЊи°®' % (p1.data,step)
KжЬАињСйВїзЃЧж≥Х
ињЩдЄ™зЃЧж≥ХжѓФsvmзЃАе?ХеЊИе§Ъ
е?™йЬАдљњзФ®еИ?дЄ≠жЙАе≠¶зЪДдЄ§зВєиЈ?з¶їеЕђеЉ?пЉИжђІжЛЙиЈ?з¶їеЕђеЉ?пЉЙпЉМиЃ°зЃЧзЫЃж†ЗзВєеИ∞е?ДзїДзЪДиЈ?з¶їпЉМзЬЛзїњзВєеТМеУ™зїДжЫіжО•ињСгАВ
kдї£и°®е?ЦељУеЙ?и¶?еИЖз±їзЪДзВєжЬАињСзЪДkдЄ™зВєпЉМињЩkдЄ™зВєе¶ВжЮЬеЕґдЄ≠е±ЮдЇОзЇҐзВєдЄ™жХ∞е?†е§ЪжХ∞пЉМжИСдїђе∞±иЃ§дЄЇзїњзВєеЇФиѓ•еИТеИЖдЄЇзЇҐзїДпЉМе??дєЛпЉМеИЩеИТеИЖдЄЇйїСзїДгАВ
kеАЉдЄОеИЖз±їжХ∞жИ?ж≠£зЫЄеЕ≥пЉМзО∞еЬ®жШѓ2дЄ™еИЖзїДпЉМйВ£дєИkеАЉе?Ц3пЉМе?ЗиЃЊжШѓ3дЄ™еИЖзїДпЉМйВ£дєИkеАЉе∞±и¶?е?Ц5
е?ВиАГиѓіжШОпЉЪhttps://zh.wikipedia.org/wiki/жЬАињСйД∞е±Еж≥Х
дЊ?иµЦпЉЪ
pip install numpy
pip install matplotlib
дЄЛеЫЊдЄ≠ж†Зж≥®иЊГе§ІзЪДзЇҐзВєеЬ®иЃ°зЃЧдєЛе?О襀еИЖйЕ?еИ∞зЇҐзїД
жЙІи°МпЉЪpython knn.py
жФѓжМ?е?СйЗ?жЬЇ svm.py
ињЯжЧ©дЉЪењШиЃ∞зЪДsvm
е±ЮеИЖз±їзЃЧж≥ХпЉМзЫЃж†ЗжШѓеѓїжЙЊдЄАдЄ™жЬАдЉШиґЕеє≥й?ҐпЉМжѓФknnзЃЧж≥Хе§?ж?В
demoдЄЇзЇњжАІе?ѓеИЖз¶їжХ∞ж?Ѓ
е?ВиАГ1пЉЪhttps://zh.wikipedia.org/zh-hans/жФѓжМ?е?СйЗ?жЬЇ
е?ВиАГ2пЉЪhttp://blog.csdn.net/viewcode/article/details/12840405
е?ВиАГ3пЉЪhttp://blog.csdn.net/lisi1129/article/details/70209945?locationNum=8&fps=1
дЊ?иµЦпЉЪ
pip install numpy
pip install matplotlib
жЙІи°МпЉЪpython svm.py
(еЙ?еЇ?пЉМдЄ≠еЇ?пЉМе?ОеЇ?пЉМе±ВеЇ?) btree.py
вЮЬ Py git:(master) вЬЧ python btree.py
еЙ?еЇ?й??еОЖпЉЪ root A C D F G B E
дЄ≠еЇ?й??еОЖпЉЪ C F D G A root B E
е?ОеЇ?й??еОЖпЉЪ F G D C A E B root
е±ВеЇ?й??еОЖпЉЪ root A B C E D F G
жЮДйА†ж†СзїУжЮДе¶ВдЄЛеЫЊ
Scrapy зИђиЩЂжµЛиѓХпЉИй°єзЫЃдї£з†?еЬ®дїУеЇУcrawl_360зЫЃељХдЄЛпЉЙ
еЃЙи£ЕдЊ?иµЦпЉЪ
pip install Scrapy
pip install sqlalchemy
pip install sqlacodegen
pip install mysql-connector
еИЫеїЇdbпЉЪCREATE DATABASE crawl DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci
еИЫеїЇи°®пЉЪcrawl_360/readme/sql.sql жЦЗдїґ
sqlacodegenеИЫеїЇmodelsпЉЪ
sqlacodegen --outfile=models.py mysql://root@localhost:3306/crawl --tables butian
жЙЊжµЛиѓХзЪДзЫЃж†ЗжКУе?Цй°µй?ҐпЉЪhttp://butian.360.cn/Loo й°µй?ҐиҐЂжКЂйЬ≤жЉ?жіЮзЪДдЉ?дЄЪеИЧи°®
еИЫеїЇй°єзЫЃ: scrapy startproject crawl_360
зЫЃељХзїУжЮД:
вЮЬ crawl_360 tree
.
вФЬвФАвФА crawl_360
вФВ¬†¬† вФЬвФАвФА __init__.py
вФВ¬†¬† вФЬвФАвФА __init__.pyc
вФВ¬†¬† вФЬвФАвФА items.py
вФВ¬†¬† вФЬвФАвФА items.pyc
вФВ¬†¬† вФЬвФАвФА middlewares.py
вФВ¬†¬† вФЬвФАвФА models
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА __init__.py
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА __init__.pyc
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА db.py
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА db.pyc
вФВ¬†¬† вФВ¬†¬† вФЬвФАвФА models.py
вФВ¬†¬† вФВ¬†¬† вФФвФАвФА models.pyc
вФВ¬†¬† вФЬвФАвФА pipelines.py
вФВ¬†¬† вФЬвФАвФА pipelines.pyc
вФВ¬†¬† вФЬвФАвФА reademe
вФВ¬†¬† вФВ¬†¬† вФФвФАвФА sql.sql
вФВ¬†¬† вФЬвФАвФА settings.py
вФВ¬†¬† вФЬвФАвФА settings.pyc
вФВ¬†¬† вФФвФАвФА spiders
вФВ¬†¬† вФЬвФАвФА __init__.py
вФВ¬†¬† вФЬвФАвФА __init__.pyc
вФВ¬†¬† вФЬвФАвФА butian.py
вФВ¬†¬† вФФвФАвФА butian.pyc
вФФвФАвФА scrapy.cfg
зФЯжИ?дЄАдЄ™зИђиЩЂпЉЪ
cd crawl_360 && scrapy genspider butian butian.360.cn/Loo
зЉЦеЖЩзИђиЩЂдї£з†? (crawl_360зЫЃељХдЄЛпЉМxpathдї£з†?30и°Ме?≥е?ѓ)
зИђе?ЦпЉЪscrapy crawl butian
е?¶пЉЪseleniumдєЯжШѓдЄАжђЊй?ЮеЄЄдЄ?йФЩзЪДеЈ•еЕЈпЉМе?ѓжШѓдљњзФ®seleniumи∞ГзФ®Browser driverжЫіеК†йАЉзЬЯзЬЯеЃЮзФ®жИЈжУ?дљЬ
Celery еИЖеЄГеЉ?дїїеК°йШЯеИЧTest (дїУеЇУceleryжЦЗдїґе§єдЄЛ)
pip3 install celery
pip3 install redis
зЉЦеЖЩtasks.py
from celery import Celery
app = Celery('TASK', broker='redis://127.0.0.1', backend='redis://127.0.0.1')
@app.task
def add(x, y):
print 'start ...'
print 'get param :%s,%s' % (x, y,)
return x + yе?ѓеК®celery worker ж?•еЉАеІЛзЫСе?ђеєґжЙІи°МдїїеК°
celery -A tasks worker --loglevel=info
tasks дїїеК°жЦЗдїґе??пЉМworker дїїеК°иІТиЙ≤пЉМ--loglevel=info дїїеК°жЧ•ењЧзЇІеИЂ
127.0.0.1:6379> keys *
1) "_kombu.binding.celery"
2) "_kombu.binding.celeryev"
3) "_kombu.binding.celery.pidbox"
127.0.0.1:6379>
redis йЫЖе?ИзїУжЮД(set),жЯ•зЬЛvalue:
SMEMBERS _kombu.binding.celery
еЬ®tasks.pyжЦЗдїґзЫЃељХжЙУеЉАзїИзЂѓињЫеЕ•pyзЪДдЇ§дЇТеЉ?ж®°еЉ?
>>> from tasks import add
>>> add.delay(1,2)
<AsyncResult: edb1b071-ed94-46fc-8250-a13e3db0e1a4>
>>> t = add.delay(4,5)
>>> t.get()
9
>>> t.ready()
True
celeryеЄЄзФ®жО•е?£
tasks.add(4,6) ---> жЬђеЬ∞жЙІи°М
tasks.add.delay(3,4) --> workerжЙІи°М
t=tasks.add.delay(3,4) --> t.get() иОЈе?ЦзїУжЮЬпЉМжИЦе?°дљ?пЉМйШїе°Ю
t.ready()---> FalseпЉЪжЬ™жЙІи°МеЃМпЉМTrueпЉЪеЈ≤жЙІи°МеЃМ
t.get(propagate=False) жКЫеЗЇзЃАе?ХеЉВеЄЄпЉМдљЖз®ЛеЇ?дЄ?дЉЪе?Ьж≠Ґ
t.traceback ињљиЄ™еЃМжХіеЉВеЄЄ
иЃ°зЃЧзїУжЮЬдњ?е≠ШеЬ®redisдЄ≠,йїШиЃ§зїУжЮЬжЬЙжХИжЬЯдЄЇ1е§©
127.0.0.1:6379> ttl celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
(integer) 85917
127.0.0.1:6379> get celery-task-meta-6eb3ee46-e86d-409a-9eb5-0c7d9b005035
"{\"status\": \"SUCCESS\", \"traceback\": null, \"result\": 9, \"task_id\": \"6eb3ee46-e86d-409a-9eb5-0c7d9b005035\", \"children\": []}"
127.0.0.1:6379>











