From 9ec75754b34f9c18ed6f08ea7155f3a43fae8150 Mon Sep 17 00:00:00 2001 From: mouse Date: Mon, 31 Oct 2016 22:33:11 +0800 Subject: [PATCH 01/68] add a decorater --- ...60\345\231\250\345\260\217\351\205\214.md" | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 "\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" diff --git "a/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" "b/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" new file mode 100644 index 0000000..ea769bd --- /dev/null +++ "b/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" @@ -0,0 +1,87 @@ +# 装饰器小酌 + +标签(空格分隔): python + +--- +Python中的装饰器真是个好东西。熟悉我的人都知道,挺能喷的一个人。但是,技术不是喷出来的,前言写的再花,也不会让我的装饰器比别人的更有威力。哈哈哈 + +## 开撸 + +### 1. 不带参数的 +```python +# coding=utf-8 + +from functools import wraps + + +def log(func): + @wraps(func) + def wrapper(*args, **kw): + print("I'm a log ^*^") + result = func(*args, **kw) + return result + return wrapper + + +@log +def hello(): + print('Hello everybody') + +hello() + +# 输出 +I'm a log ^*^ +Hello everybody +``` +### 2.带参数的怎么写呢??? +请看 +```python +# coding=utf-8 + +from functools import wraps + + +def logs(text): + def decorate(func): + @wraps(func) + def wrapper(*args, **kw): + print('{0}, {1}'.format(text, func.__name__)) + rs = func(*args, **kw) + return rs + return wrapper + return decorate + + +@logs('木一晟') +def hello(name): + print('Hello, {}'.format(name)) + +hello('木一晟') + +# 输出 +木一晟, hello +Hello, 木一晟 +``` + +### 3. flask_login.login_required +flask_login.login_required 是也是一个装饰器,login_required 装饰器的主要作用就是让只有已登陆和认证过的用户才能继续调用被其装饰的视图(view)函数。下面是截取的 **片段** +```python + +def login_required(func): + @wraps(func) + def decorated_view(*args, **kwargs): + if request.method in EXEMPT_METHODS: + return func(*args, **kwargs) + elif current_app.login_manager._login_disabled: + return func(*args, **kwargs) + elif not current_user.is_authenticated: + return current_app.login_manager.unauthorized() + return func(*args, **kwargs) + return decorated_view + +``` +就到这里吧,反正很少有人会来看。就一个人浪吧。 + +## 参考 +哦,对了,附上一个[牛逼的链接](http://stackoverflow.com/questions/739654/how-to-make-a-chain-of-function-decorators-in-python/1594484#1594484),墙裂推荐不熟悉装饰器的小伙伴们看看。 + From 784012d2e9edbfbe27786e0ba9a27597e78b96eb Mon Sep 17 00:00:00 2001 From: mouse Date: Fri, 4 Nov 2016 13:02:30 +0800 Subject: [PATCH 02/68] add test.py This is a async Crawl! --- test.py | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 test.py diff --git a/test.py b/test.py new file mode 100644 index 0000000..c8a5b14 --- /dev/null +++ b/test.py @@ -0,0 +1,71 @@ +#!/usr/bin/python3 +# coding=utf-8 + +import logging +import re +import aiohttp +import asyncio +from bs4 import BeautifulSoup +from pymongo import MongoClient + + +class DouBanCrawl(): + + def __init__(self, url): + self.url = url + + async def fetch(self, url, headers): + res = await aiohttp.request('GET', url) + body = res.read() + return (await body) + + def infos_get(self, html, name=None): + soup = BeautifulSoup(html, 'lxml') + scores = soup.select('.rating_num') + scores = [score.text for score in scores] + quotes = soup.select('p.quote > span') + quotes = [quote.text for quote in quotes] + pattern = r"https://movie.douban.com/subject/\w+/" + hrefs = re.findall(pattern, str(html))[::2] + title_list = soup.select('div.pic > a') + try: + titles = [re.findall(r'alt="(.*?)"', str(title))[0] + for title in title_list] + img_links = [re.findall(r'src="(.*?)"', str(src))[0] + for src in title_list] + except IndexError: + pass + return img_links, titles, scores, quotes, hrefs + + async def save_info(self, page): + url = self.url.format(page) + # print(url) + with await sem: + html = await self.fetch(url, headers) + img_links, titles, scores, quotes, hrefs = self.infos_get(html) + for infos in zip(img_links, titles, scores, quotes, hrefs): + info = {'img': infos[0], + 'name': infos[1], + 'score': infos[2], + 'quote': infos[3], + 'href': infos[4] + } + count = coll.find({"name": infos[1]}).count() + if count == 0: + coll.insert(info) + + +if __name__ == '__main__': + url = 'https://movie.douban.com/top250?start={}&filter=' + headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \ + (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'} + client = MongoClient('localhost', 27017) + db = client.movies + coll = db.coll + douban = DouBanCrawl(url) + pages = range(0, 250, 25) + sem = asyncio.Semaphore(4) # 限制协程并发量 + loop = asyncio.get_event_loop() + f = asyncio.wait([douban.save_info(page) for page in pages]) + loop.run_until_complete(f) # %time 为Ipython 自带功能模块 + print('Done') From 9b04336444fa26cde7a545db23765a8617001060 Mon Sep 17 00:00:00 2001 From: mouse Date: Fri, 4 Nov 2016 13:14:09 +0800 Subject: [PATCH 03/68] modity sth --- README.md | 3 + ...7\345\220\221\350\260\203\346\237\245.pdf" | Bin 505827 -> 0 bytes ...275\261Top250 \347\210\254\350\231\253.md" | 70 +++++++++++++++--- 3 files changed, 63 insertions(+), 10 deletions(-) delete mode 100644 "\345\205\250\351\235\242\346\224\276\345\274\200\344\272\214\345\255\251\346\224\277\347\255\226\350\203\214\346\231\257\344\270\213\350\202\262\351\276\204\345\261\205\346\260\221\347\224\237\350\202\262\346\204\217\345\220\221\350\260\203\346\237\245.pdf" diff --git a/README.md b/README.md index ce619f3..3db4262 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,6 @@ python练习中的一些代码,以防重装系统再次丢失 1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) 2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) 3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) +4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) +5. [装饰器小酌](https://github.com/lambdaplus/python/blob/master/%E8%A3%85%E9%A5%B0%E5%99%A8%E5%B0%8F%E9%85%8C.md) +6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) diff --git "a/\345\205\250\351\235\242\346\224\276\345\274\200\344\272\214\345\255\251\346\224\277\347\255\226\350\203\214\346\231\257\344\270\213\350\202\262\351\276\204\345\261\205\346\260\221\347\224\237\350\202\262\346\204\217\345\220\221\350\260\203\346\237\245.pdf" "b/\345\205\250\351\235\242\346\224\276\345\274\200\344\272\214\345\255\251\346\224\277\347\255\226\350\203\214\346\231\257\344\270\213\350\202\262\351\276\204\345\261\205\346\260\221\347\224\237\350\202\262\346\204\217\345\220\221\350\260\203\346\237\245.pdf" deleted file mode 100644 index 1989bbdc9c4c845042e9edd9be9b4d0e91775e52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 505827 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∨yD7aw$_i2pZF@J{oA6c`28m3`C@TX0>Y7hN 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�nbGyM_4;(ajAB#I6_&yphBbZfo-bSjmEk6 zjMoQdd$$#;#5XIQIfwLejAU{1yp$Vv2*tYa(dMT}s%e;O`#AQNk}ATBGP$C17xUSZ zbzYX#UOVUeqAaqaby#eY(x-szv7%NLHn%j-Du$rRarQjnmnCez=Q>WK%A1Wz{&06q;FG($0mI~RkKTt? zc&zUNq(nGAzoU!_=IbO%xrjy3bHn>a=^fc76vDF8W1RRQnkG_o!@Bb)rfBeemfK22 zwRg21Ux`yvdDPP>Wz96a`(YYOEAp0K;bQ*vW*U6E<$1;d_=7Ed(n~`4(K9{NuN0jm z9jGCe7A%u7PbKK~bTwyi2#R&r;fE6MJhgrhJgplb^^&*hn%)&v*8+Y>miEX*&99eLyTju`}w@XqezV%(C^5R-eHic5TfXssYK#av(r zS8Z9HzhC!^h*Ft2)l$)yHvNFo@|=@=METf*?Avd9?N1J}>$O>$(0IR25wtUBez?I@-xL`Gk46(&GLyLsRYWo7Z&o*l7Z1Nj)wF?}vtoa1=-> zT)HAncHV@NtF;wHa>T&YwDPlrG!+STe++R{)V)>rw_XpT(3+)0t_Or|RPs3=1)E0* z8u}#nbS~u@oRAW>VM8UgBGJS3dRY>iFCjhr4$Xmlf8-|d>!7~dHXJ+h!(>s`pRnnmxD-QL6b(8*l5 zjJK&>>h9B$-JIuM6Bbb8v$}U7ZfSGjTS1_$MGN*i=eGTi8 zsn*{r(0{MEC$dnrXlap@Dz{cNBmWTX1Mzu{haww3Iq2u!N*YAoS9&OtFBtP#!f`Lh zp^oYs+KG!2ETifSO%?LHG8{C#@D?hV>@u7*+{nAB zh>2mcYbqLBo0&KxKcUG%!z1wPze_vVfB%ot95h^Cc88@ z4JXpf!K)#!cg@Vy%ILC#JB%^#4`k$;Z#Z`FrQNn1rEo zM&nyqUHcJp^@qof<`1tn+gdA3n(}iRkG#Pqk_ZpJICk}gYye8(r+iL0005U#yg?{08bkm5kv+Ymf!|uX@^`S z7@q33_#U5#2n2zLdBw#&DI_(rK>NtawK?Uvlm!U^{sZWV8vT-oB=tBk$N3qqH$IhE`W4K%>tzj`p8d^l>R;TbRIM~f$Xaw$3)z?mX;T} zMBGry=(9h+=dfF%)48)WbgJ^<(*XojJop(!2r*(A3;F-F=9a#$@M z{>YHXtyZ*evhwnwHJy-a4#JUH-bs+ELBxD*dox6Rsn{ zVvzf6H^*JjOc`Oubvn(OJ^i{3DpWn{D;{OBVCXe*)pX#Pun%8&16nR`-_a*?bCyj3 z3`dR4piu3CRpB|%RNo0Cg|e=0z856qDnEbzoE4n64u1PO7JV&`gC)uR)(9_q9*cSS zfS6?GJuE%YCy2ah1PjvvSA#KCObR&XTPs zlm}a2N9mcxnE0p}4oZZBgUD*Irz3ExPyWn|x$G@jS@c0*B?Dx_NQ&$0LBUEpkn|j= zo`;aLW(Rh!ERRq(c#Iu?BotaD2SHz>*Q9f7&?_x`M=IVQOCJ zO3G1$*&V^l_>*4`&<* z-3QbU_`Q1tt5+^CFld?>4FZ|Fxi^nN>x2FMmMvBwgNH^XV0biNTo-_{pG=S&I6VPL z(s#9zAl(EYet3fgTa_+#x!^(YrSN<0z&j(k`1-7Q-Ap?jIXD~DRN}siym##x&AM)@ zM3C|34mW}(?WM|P4MUpt$LvEc@OjrkjyzmAYGH2PaEGRO4s`uI6w9z9cuFle>w@}U zgwSR{OgQWWWv|6S5h^@JRWWDt(9`L|HnAHHt0T}^V6(WPuMe^fEoJ3Zph=`dfnsiqeB;XfbsoVs|5Z+$DsyD?{qK7v4PNCnkz+j z0lUTCUIATGBU8`*sM|Q{^+gd4Mr7I|3%l=C!5{RBOZ3KZ$c*(H0 z2`?|~J4LS{OXmX71fMn|qyRq9GI(PTGiO*>yr;tX^J8u(Dcx2c^E*0(H=q9e+0dmv z-o?!F0zujdXLP#z)0^6f@L|^B>3c;ihfLy=5}sRJy4G=m8GB(KgxrIdf`xA2Ummt; zs3SKHURsOac?go$_ZQYm@SZBCCk8l3sXX){`o8&&Mj z1o^LdAjk6;G-R*#JMt~W)F-Z8Ut3$8G{4D4P zH-UNt`|@31WY&0TsrvW}blR2^+K)YzkHGYiY`N zvwAxYz6NmK@CoS5^kZO80bR1-a3gr2H#Qe~k~n~c+UJRB(JRi-zmN@T%+N2ucNSII zkhCKsM+^Nmx#LpxR*KFT_-qoH`x6bs=%_qh*s(5ZaB>YYAV(u9n?P(PHBgYrah&J@Y zIw`yg+v3=l)E6(-;N+3I4LtZ9CLW5sAeiw%4S?hdbfTDxT6U*8QO=?1;OT77z|LcC zzV)d(p7NOrG8OO8Pq z+pyCbX}!!^Ag(1RBTEflxw_B2wz;{9OtgU|H|27__jL9UoG-YI>707UgNSwpi*`mS z@fV6fF#%jOZ@>Q~<9DAzePPov>Q5TA@wX$8q28l1^hsgh`IbU;GdQpgEM2rhVtaG+ zKEl&5D8daqZ~JF%wgwcweW7$&)<80o;q%=K7cQX91o$jLc+} zEivJ4mt=W9^GsX1H3_A`2M{A*%RgJ*m8$j=dYub#DxOPw9tS&)Qc_KjZpUTZ6iihu zbH+DhDT53RRCymJ{7KsEC#TjP(iYD*qK3l0+*Sx4i;MoHVk)sS_)F> zPQ_y5uU((qnjylb_%`T2#ZrcR+2A2r_o$@E3ZJ-%xF(JB0*s9JZdzd-fWL&mnqEX? z#AX9z6(3@dq1Gf&(5+TN4Uu|hT~s6Rf!H0ntF5O&$8x$FziJ3_;I&X%!bnm4lxm(w z!!}!ztWq3JaEa*Cm7DjVgmK|pf`bl%cF^+5Bclm0PK$(5iE1;Sqrl1`v-JiF5n}qb z@S`a5@*ou>E$uQcNW1G#c-AbA-h4y4?lNX-X#tZ4HT63nljg110X&;{w-$Jp#n`<~ zL=opP>Vl`tSvN4PK zMtou-mTIqw56rcVv(litIj9TsY2a)v6(<-Q9u|UO^-V=;n72-AlvAB*xbunG^_w)V zZZWgmmkY9Y3-dEFns$}JS}7~rngFkd4DWgkbws_9GVkbcS0XJZRFEdv7sRaKP3?1d9B-Q6_@9TW2f zRn=0Oit#k!P$_DIO%@sA*pI@g#gemG@n|hB@{pepiSmK$Lz8^iWEvSZU%z<4m4AG{ zbQB~%4ZA)Cc(8SR+u~oi7It>URiVk((y(q9@ATw4zvqJkc$A1vdBD@kt-&2|x3tz- zIBp+$0-8s|jT6n9M>nUS;G19D%iY>?)r5+)`W9@w9h76} zS69fk!8}uRYGK=kCy6oh+ub?)r!v*>G=O;3UNA(Dk#n2fF7?R`xv(|JE1es^Bo3Aq zy*LmL+CJ|9#a0*;y6xH2FOkvlaBOUv$myFTiTRKLnL?t>rBW@DGPg>ZDH$?^ zRLYdhLnskRnL>v5Sl!RF@BKW_@BQcZyzl4pKEHSG&;H}ywePjo_j_H}d7bBR9>;Nl zU@+k#1gj>)GSHQlhoytMDgpx>+XOarhEV1qVv2l2Lj$hw9VfnmN_EJufTx%jJi%7*3u$P&(LP-Ss#)XR ziC4)g3Q`a5-ye<0$}XcJjlB6qnZ|SL&y*n0GP2fXRYAYwf|}REc61yT$jw)!8y5^x z5w|IR@Qn)hK8^q0Bz1mAlPT?ixl)leHX*nTs)H%Ai(%?9C!8cjb8PCFs6$h`c8oKAM4l@nH{KFY zIZKyEM@Qk(_{z_$$fXO0Mi>ebI>>7DTD+ExktV&!`WMqgi}alNw5~wJ>tOlovmOIg zYkwan#MGg#$l6rgiW_s_YNPRa6x8__4Bs<5T$P`+T#~BL&NvFGfB1Y?1e|^>9HZ^3 z!OnsTPp(pyZ3q8x^JAi>lPIrKK7PcIVHoA)R;ul>zJ6I)!%_V`F8ROS%BT%lc9okk zm^ak|#Y#gfD4S(|wXh)Yo{Q0kYP)x`q;jR#Tf+IJkb6&2ga7T~j^()e=`{svQDZdG z?2FHu*48%3*vJ)T6u!OKaVWb_1OdKeET(s4uM{$;UnSasYj?sFxH*ZbkM%Wv-TcBQ zU7tKFP`VA17bFOT7gXJj5g}A+@q1qUA% z1-!3yR;zx2#ye|9xl+Xv4|#$z)~Ij*VsIveQNT*5!DkVZAQ< z{4Sgrf%Fu-v3)260a+!sVi?H`zOQ_}7QrY8PVh*w_;;Rojb|Uo1hs0BoB(!m_j2zR zWmes6?qKJehK4@aJLAw(W)i?hgdZ_RR`v|aNgtMW5059r`sa(3 zpo~3r>d{p1Fc&vBH!rU$vQ*5$&OPm<0y%5J+2MNdEO%TdYVDM*eMl^N_G~XVWnPXv z569z=SJXgPq8KoEQWQMU;moc}>=Gcy94jN*7eL#=!DD7~ZF^{p22z4h*6pwfWMW`= zU#Us|^R9Z(3P!a#ls_s1nX;`8Wv^W@a6izh)MD9;LuLbECu+@EAln7V3f^Z;cNKDB zSl(F19tnA1IqOFB-%{AO&dJn*61sH)w9G4&m@-|On?@X^nnb*vK% z^`idsf(cSm7{fHTU=$FrXPe=w)H{T)UAuNwVro6yyRefDKzvs#0o@GVWA{LFR5OJ( z3e!x(E1O^9<-WL(R!~&Lv7!Wjt#gmOnKw0@MIcX9?--rUY@egd*quS1G+RHkNo#*o z3Xx4K@)q1suJb7EY+vuvyi(W#t;PPshxwJgoWMp8=iIy*?>Y51kiHs^Ol}D;477ys zrnTI|pg1E?hk}d1wM~!=7GcZY0m_KbqUG#(Ycn-^M%UA)FCCULFVMD;`g>8q2adXa z{Ta)h-L4ki-cQ?56*44;N~P_=G$eR-BD(1M1_lOtc>F-7LK+c;3@#EkiG}((rW#y) z%2@?ZpSC5iJFL@x_vVeJ0{a;Z#0AYB7o4l(L?M}k(UQx^*SfH$V`5mx)edXX(bJje zY0;fI3l<_^mh2}K{M16v4^uC(l+S2Po}DrI#>L4gkK67b zj~=YFo!TzmPSeVj<`xW{p`knn@ctptSpM}7|JyHN>ZZq#R!QnQWnRj=bi)-9Nvwww zY@Kp7KWnV6373cjOAQxmY=qs0$a-P%=(BtIa57EwsMDq*8PY?C?YQtyGSO>|{ItW2 z++I^wS?`pF37?T2DNkj?ar{%btbq9S44HZ+KYX|$f$7i3u*LoPz#5tL+QS<+>y!wx zAgYR!|N5Bfzdn$wE;vIaty)asb1F_IS?qp8kHf)ftF_fm=WE zN61|KcISFXB8E8t<@bX85klb}b3v${BqbYIsdv>sxwx-TtrT}3Xy>KRHCD;@@1H+3oac_;$OyxO^z*QV z5vL}u+9SKrdBlidV`&co#)V3xtP$ra=Es=^$Bx}CdWCr56jT#~-=~p05K+o3%6xJk zP2ZKn5lma59#S3QL8bzu8*48>uBdw7n6IryHSA)>Q5({0Jt-g|@osSxAr7qn3;p%; z)RF$UA|Mn5W|QKJ=x*&9u@6=C*12=QP*FfaY{6AtrfPEJh~1Iid`uy|j9jZb!mRb; zUJTjR$UU(C8-$!?v8|W%-T=_9ey>Y*+#||gCN4gFJ9#l^+A#59Fl@?q?Ql4+Z$sD(GC&e;0SdjbF9;{6gusL6facmheC!JVDt)YP?o z2(TX(X^*vz9Wgd81koCo16($;0YhD4IEmJRkSNWTE0|5Q=_0ZE)%!gfY#TzUkD8id zmN^DylaDz+NJ+7UxG|EQjqMUwyj5Ue`7Gf}Kd|CV%`((8X)cGd0V`AA)D$6Y&Uwj*U%3>xc3);J8};B(nFAX% z8%j%+xjrGkA2=6t_(Vv>P&#VG7vi&#iz?y|Dv>s#fd&2SR@D0IM&pP@PoHX@L1wuw zcdt7I?lSRpMs^_Y`Q>1w)QQcp&_P98YrnL&FA+$qPbZoA@M_q|s-OK#w|&-QuGkQ3OKQlmyEu!TAhWMxcj=#OfG~q9JBT zIfk1(-0j7hyLa!}8RwZteuTCdHdy&5wK8W&Pl?#M-Wc&d_nXDeX0f15lK}Nvb3O)b zie>O+NQe3A6JSS^S`kOA=E`Shg)~3M19h7O)lPvo6cs{3f$^ULtCT`UwxM-Q(}H{&&vL|TJ#5V_B*#~QrvcrSKjnYX^I;uaUdRBlFn z{>{I?JHXtJiHWH*u;x`>NDb?^*Le!Htlu7Bl!aS2`Ot(3SNeYj2~A zJ^C1VJ_3Zrme`%j%G{goVJE9_XqlOqe4r-3YiI~tw9t#%=CMyZOu@ln<=01soXAyf ziAPgTf@;ivDN-&>i3rbBfD>u8P*c+1HGf6YS@Q*F4 z_G=F+S(KG?f}LG{Oh5boJPSNnys=O??aoIETW1+RBI}9CK~XaP>R!H*dD9n+!Q3t? z>el^)04&`U@=Tgf)f!7LYrO*}uCl6Ulb{_;hO2jl!^BI}XtQ6vLWtGtV@FPxc}JDd z>QMv;F2^khHyARtSaP$o_w7D6j~W<8g??DQbMh{%7Id^yVqzZRcry=lC;p`gIY8W zUR;4>>65o!9sssU$~Z#p%<^*HFGUbo3=G)n)5(V6G`*-mkf$YwTE4J?q$0%K1ERJ$ z$72E)aLnUX19snhm$;{6q_qo`m+}cmy{IUJQw=)Dck!u*CB>Uc4i(#U#IhA~sb5&a zbhmsb?Bj@zuL?`Hipuc#mO0s(e!)byiKfP=L7yPoir!szzO2JLE{VkNb-JiE>eC;Y zDOnI=b%jypqB^)FxOiHtBb8VH=kmN6qn{-oyPi7Vp5?1f<;#j8NdqqxT9 zuR}q5iK%;s24QgjGoFL+8$MbL_j$Z|L95PtIv8bs4Y(vI3T!(cs64o@qDL{Zi09k3 z3v(D@wW6e?6fb{|!ObB#v4VON_0LDMwa=z3tpS&PY%#L1IGwmWevlw|YqVWjK+9xQ zL|MwRc+G+7N2E@dZ%t0eMuTXzwa$$vy@S$ARdak$I51$F{~62mQDHJQ$rDNwwmOQW z5UagsCaz1Ts>OBWkQ7IcJ#pG78i~E!pjN4t{Er}`=t~&`0`cM#e+(&t_jKU5@4~{u zhyGk0H0vCI*L$dpU+s;#2Vk#Cyr;W+hV?ZO-nu%pc;y|NZ4F~I#-G@Mw;;c~xaeQL zPjd;-Q4f5Qx4dXR>**;=vmw8q-_6cyem!1)0g0`S%%9SpJK8e2IT@Scfr`&JvkXp$ z`&h={JP}dR(*dDnr>Q^8o7BT?T~}9kPsico$A#PLAdC8T*e@C7)&(WCJ$nLBE_5f~ zU|_gvEkU!hv#CP7sa2JhnWu`Vj$#kS(yaTl{8ZB#V`5{&+7!Wc7&g*dKDVb7rVZ^m zR^y+3kFWbjoXJ%+Ku7fCNwVkR(7s;W%6}f7ab3|x)byI<0f)IknJwo;qxaiP>V!?5 z<*(c_F)gBnwgOaW7_4qvKwEt8!n2YK!Xh&pn743pKD3crCwt}U)!D_sJJ2V=^M2gz z;99DZChGgL01q(4;$w6CjT_jB@wlACwzwGk74@T$JM720ehY=~0hJPpW?Kn;!ba*X z_d0$Kx-`1dOEH-5TY+II8l-r-4U%0Y@Z&N#%nZ*&-(=j-F_sMk zlKtn9uguF>Zqz$vW1XQm216Fk9!ZCbVF@aJ1s5XN+BYcAc+Qv|UmOW7rHj3ZSR6*a zemT&WTD5udMp3-Hv#F=&uDREp3ypVnz4~+CXxzg*d)y_~?%dBXBI$A*e|)TWLx;21 zh{o$9xT`d2VWQXUIEWZ4%NsZgXujS5h~iAsO1H=G!g|S&eY?$u{8*sy0>H{O)vI5X z5%L)+P|l-AMoF)%L64cyHPm!^?0LiJ#X@V(V&A9Itqx8$V*1tj4q2@w8PrkbL8}$= zG@%`i=CcqO1x0KuyzpZ{^C@kB%sZ;b=ilswF~xH4q~|}5aQ>uQ_{zo&7j>BV)nLpB zGs${??T%kLm-P-rp8L0G7HIM(4c(@#Vpy-CD*!aYp7?R-)8%6NInSf*~SahD@$Jp9c+we{*6A@S&c6@CBHE89pSu$G0^j0=XGqjW(UB>AX+ zud+!~tHhm@WZAliZM3~(t5G||XcVyEWb#=I_(B++JvW0y06u&prp_)d2VnwJa3U&j zfC2@9+*GJ04wP*a_@0`2_T$GEWj?Mf?=PV-(G@_MVP;}-f}e=yA27@|CDR62TSFP@ z)eE5M@l_-^Um1WO-9CQ?VD0z12b84Y`91P>ra&8^`hlU{ok& z%vx7%sv}@dxWW7caEt*h{v(aNzaQdWL1T*2nzqT^c3d$&(@v zy2^)Vn*00Jfa3uyGuw;7gLbiV%1CE0{Hm*66TWWnDE?k2^sVPv)8mpi)XHp|Hi4qn zc+L#+bJN6}7`P78D9!82FpPOAC{g16@UVoc)7WqJe|mofPAx)#j~f^jkLl>t?W08l z-82!Gm5KAIQy3D@rVJBWI6Cn0^78WYSNhMMHgP(Ax|-7;ElAu)3UYFz`Iy6rDQ!|- zwgVUu_H)_Z^0l?U|Kc38tv?stZ>?um3o`Q2#3M(@v26UCIXQiu{a}N{!O0nM4SW~$ zbtpJ#BC6@#^I0r3pa*&~NARH39RTn=iW=eq$Ja=HqKY63D|+9-M|_I>N-|mBLjQ%r&zF(n2Tej{pKHG&vXZa<*zO0 zZ+i3kwT7?n-F7~KzgKDxDmf)kUr@v6Mwps#l8Ameyq|13S7`hQWKnp?NUmWPG_vtC zX!RqUJavj-slQ{Go&~+9JjHc|jZ=VQfMJ|0?a3hxfZXWZp7nK+STp*Bcn#;=ik9_w z0PlHa7!<&aMPd?F0-W3^n)?CUD-J~okwcLPol=3wR(7yA>3URtD9KlZ669#hlsx0zwO}2OA%{vy&zX zy%_~KuSo9*$RVQXeGV-!gqefz^?CEAg*p)oH$4M`_Uj{vE|b`1$lm5kZ=VHLRX;88 z4oRo1KMX6tc?xCXIDP0J2OIOYQt!=wCU6%k}8y<)zwpHIUEC=j@AQWNJ$ac zKye`fs2D&l4>WL=c=L~-%LvvoD3~yo_L@xH8#%daqEn zer;{l(LKjBTy`U0R#QhsV-Vkd@u?;J3FfvcPUz8pQ*b>^)@I}3K5qRwYWR|EI(1E~ z5#a`CDFuZ;4E`jY(vD|}B7De}dA4ik*pbk`yrJg9VC8NS5dHUpbewW^?aQ;HUim#U zYd$PX;Z;0f0eoJI)CmCjbs^ynGHUqZ#Rq2pI5q0HbaA_xsr03u&rFx?t?CKi@tuwqedrzSM+N;7oQf1a2*gwSLv{T!^` zwngTH4cNn}2?uz;P1=H7G}jT}Lqn+x-@Y}!H<4;ZXo*I}$*guKHuhv+<%frn1)~3k z;s*NsZJ~AI&1m41UI%{)ZqjGb1V|yFSQzk5!$=Y`v zk_n|7KV?aO>u4{d`nPa|kXjZDmp=`{&!aYM;!;v|{dQ=>!DB~EQgXtytb3QX`K`a( zA4rj`8~Uzn_gB;Qha{=l?l>H{RjB@- z(OQcXBX8T5_u-k!bdb>0ufVmT|I`R2^CYS6dir@{Vj{@m=4~di;Z^bp)E+4_jjN>j zK$|sxHzHrP>G>h6z&&=X9OS)haO2JzVt#LP^8n8>f+8aQcvsf=*ciG64u?jNJCyF( zv*$OmYtyH=JOS|b=&Hcy8u?P^%Oh6{CD81(aLXXHY_R zG&$V6)3s-h8s$QHDPBIUE^^@`r^er%*fU|2Y|0wk(X+HNVyZkl3+-PrWODPk!@6u- zMWcyB!Yri>%>zmx9ytN_f8YhpKNXjq(l$V{*W{h!Cs1<@1h7^ky)2VOl_7ky4NN|E z_!uupzGKxZ%BGGkgWYVVFCJ{p1h}3JJUZ2mmf)5^OU{fxmPDcqzu=a|G!oC2KFTba zXYR=zR9c*r^y~Wb@Z%f7-~aAcRc%kxUwHAlL|I|v_3J_3MW29E8~LQ^dLB1!!3Df@ zR2uHzY|+&-rKvS5_DJ<<1k3mQ$e<2vAg zbT*g?E`03MVUwD{-tu%Z_e}k=z%<%82phbK>H0TsUg(aVL(@%;OaJ~3Fj~F?lrO#J z{bs9iMs{}C{wBbG9u6$Y=s0ZQ;JFCq)0(Zok)N_igB2)I6u>2anw{fx8Pj<$@G^1_ zU}~Oaxqq9C^qPkg-|pL^dFSu%kLK9DUT&w!_4Drq2R$6-KSN675&Q#W+y>0Y>%IPI@UgT(us#kM`%4r*fx1h|$HzN&S8p{{{5Tyw`?`s_S??KB02QNW52% z+nbwZ;8l)PwSiZoJKt;3I8yAxcLUlVj$G+&SFRhbT{%^0wAM3p&9U-%y24A(Hv-<9hV4)MtMTqh>(J->Q5>fPf2XpG#c z84)KJSk3ptHt;@U5QRU7E}7Tf0Dwkl6KvhQ8R?_MYqrqS7&eSXrA_nN(pfKC8!pcF zbzdo(3OH+ixx_pgcl(IiQNrLUGs$@N2WxVVm3k34Y7<@~6T}8xb7mP$oxvD-K7j!A z-J5r3nFW5yd-RBY_q8WKKL6&eIwwhkAfR&M(*S>TS?8?S^77K zelYy=sw$5iX%V!dU5VmCGdCnG2Q>WgYK0S>Q#mOn6P?;>(mfVobaNq*6i}HvCMEbRPR;xm5xsh)><#jR?(v)| zN;`L+MT7%10Ll&8&j(#R zUgD&saC+wR=}$%j)~9H;(CTi_^Uod$w70iEFD{bBw-%%Xm^gpvl0z60EJb~3{ml4u zO@|)+NXPXa0m=65=R3bIz-GzH|KyZ}2&4YT%_Hh`u?4>Wbi?h_0}oGBjMhZg&w9|z z!lL^)8QiVlJ>b}7mhVCP5Azuq$X^P+(f$ zeR!X!sHi>$$u6f)GqAAuS~qm)MYUa$k7AYxtM~x^ zsbA(bG70bJ!s)JNMPNFF@pZ`(v-6QYeO=pR2f z+ANsc@l~T7$dH>-yyBTOKGi*Yw(h2BdC!t9aC0_IaKp?a$oQ@Xz`PC(#`cF8xYFbD z4n&d{S=RTpHe{Z~Ekz{W{60slN9XYOmi=W!@utkn-^wWp!dtjB>xJ*B<(k*X40@m9 z&9W}Ncf?%QvEm;SVWxWT zsA6Xs6Xw|jIpQjIGzPJXpPa1z2jS}a4iejLK!+ei1`e0(KV2^PkXEm&yPLu0a#U1) z&Y``brdeidg9=?}_2@ObM{RNHO0~|OE$C~7QEQePSAsF&C#UE6nbD0|#N^F0ejF5@ zN_$Vlb1Zgvv4tbmo&XhH)WJS^d1g;gboDXHhU9&9O#D{0eRg^_0Zp}Y1QDGLEG(72 zlYB(PIwL<*#kzuHA`b>;r+nt;fL?u*e)d7{PE3ppz$jG8O0jG`+f4(2IB}S}uc`O! zp%yat78pzP_WJ9xy0E+>Z~8l137+&({r}spzL@ zQ^weEW6l1S2WArTr!>CHCr-Nkd%k6)(Zm(xPTD=4Wxlyq1Uoe_1YSRKclv-UnOS`J zi5^q}pXH!IL2wQ(=@QmtWU4f$rk(cZsIxfudY1zL+I3+%;u7-T7#Y8NcllFfK=O;o zwLtua$7UY{BCgR?X8raL`_(#NoE?Ii?f~lNZK0>qYj)J2q($g)lGJx{aUbHIes|hhE(T1}m_0C)-)rIaf~hJd+j?p)r7)e8X+J{Ja_eGb2 zhPQ8PBnEEf)muMLy!r3<%e8q*#J*T-6IdAI89BL1`1!kH%|C7604PBFDI_cV*#3oN zw#rFHfxizf$bA=y>y@bli5c!cFC1}aiTN*o|F6>ee-!2NU#0c`X{=RBY5kcdWl_^A zMR;kg(Qo^|V-;Ac8iZA8kz3$FJkv{AeOSKnsk8%yYy9uL-r54&7ndNH>q|^boapsO z=?wn@hgr9tqHM=qX{g<1+`e`N*?$x~ZS(FQmmXNg`_mx^xH}9k7jDz@PeVYaLc)>u z2{l|CWr{R-fEL1NRa7{7-v8@U!opLI{^xJMe+Jb&tOt12FQ_Og&YzUA0I!GM$fM(1Z5cH!l*pvy#TcWmhRkP=T0+%#+4;N0W?=A z4Wo;abE~;%XAP|SQgni>OPRan=Kd<-Bi?Rmy6!S|js!$LfJ)?GF|4e`r}8B2x4N*eMoy^ z4)k4ZD6U%nWE$nORkASPBC_w53vtOa2!M$N#E%{O|oq zFenT0@$o2;K1r8SZxzKTC5Uk$A9e;A15weo#tb3M3w!jUL27q*w-0!EprM{ON5h8B zi-$7r5hQxhp$GA=^Xh^-9S-Sf`Nh7x^6GWxYv$_H=|6-|Y!=PiT68qN%B`(&Vq5Ut z{9Ola6+Sh7=^wwF@2O+erTvH$8Vo)GMm>E+8V|Gs%ylLVocmNKFDI801=}C(bLY5WwRF&d(d?SVIi@HrXm`H@ML2IuPvwI(Zk>%X z_(h3+a%;Qt678sp?e^5H^U3sa+rG9p8vna&i|_7V)*qu2ca7DH>XEl;`z16ZPxqqC zcGh*gcx~DS+DLR^sS=0OKXi0BIy%x?5{?}^28a0Ykm0Jjyb$U+P;UrLx5K_`yjozf zc4O^i>KWO+sfwv*$6;Fq7v~DL-7dfNSPPCE>p4)RaD3P~oyq05OL9Q6Tb;j-RWIcQ ztXXu9=f`K!G zMIlPAC&_@xufz1-g)dm9^P^n@i)|W@B8X;F8>PaE*dXKvJ-KXZv{(m(ICZ zffJcUMYn?8>*_mnwsy{SB?Q>G|NZbh3uEa6_|WvtOkVd^4NXkE@MIbf=UFI<^rJ7R zKm(R5`u?r@m&jmFFh#tm8o*(6T-=#)ke{Q(qLnE+fr57^-N=r7deQ71C@I**uBlV=YXxk@ew>< zL#Oliz-L=}96!7~L;_=TO66@_LPB?EXK~Q#O0fFRtDj!rpj0{hI8fC@yacwj+s6vt zKTrjl060h(qedy61NzbVz?DI(+!*x3|C%D@@uEX1dyD5sAxW<)+?8chXLff<;yRCA zKH>D=99-f9Cf({9w|Jl2L?*JOsrUv;!&d3l7mQF~o(~{UUzobTYg;HNM7V0X!I6OE z7+C@puP%s8$CESN%`q$&Cl4M)=+O>1gT#{={Ey=!u`QIct2X@CuM9uan6cxo7)8na zKgKHXUqAK#DM!aBR=Y8+G$O>EbmFIzeepmvi)jNvf5Fz;aWH^(w;QgZ>kBG>HJNhXW zj&Muby9}05Sa^7QN5}7_C)wE(I2hK{VA~=2Z+WQ#JtlEci_jvfprCMfTux37Ju-hL zko4n^P8-mjVRSR8$0=BuX+1nAh%6piUgFWG@a4(o&9bRnc`IEB#m*WU zfe6A_x$n1nOI`3wOnzJ?P2+&3*Th79PY)c10 z{3l-$i^>t?-Gd`3O0nMH~0lt-?Y=0EY*z!dn4DZwL#*Tr}0E+Hx~8I-i`{ zr0nqlu-X(%Vg~jj(O(IUKyy>9>Bd=C*9i=I3T}g_ueG`P2RdcA9isWwSI*GR9MFm^ z8?_>b%2F0RPm||&M0XW?^An474VqMnn^R_1mbUwmBb&RA1m<0zGfigD2*}*=X`a^< z{tMaIlyr4g6bl__@|&?+QmJ)cIC=E{T624ESt!T5$MnNJ5Zf8BfIsvW%h9rtm-lKN z#o}|cKmT|{VVH{NmkkGr&Vtu&WPh^XLl+#CF085=h#|l2es8h9!t@qeK^;_rp-WL- z`UJ|9(UAEiEB8oDAa^8)m&C&{1)*WIY7c)9$FKS=vz zU-`+m9D$s-);CC8`;|(9=Avg$XOZhxL(t-4bkR?WijIaO=(IUy zrX-3gtUQmLQ!_jQzIcD%s9Wnaj+1l=V0iz&Jw@1u6t}DV#qVX4n0J(OO!A#k$Fm(G zE*!jy&2<~)@D)Qkr5Pkjmmr;lLi+9A^b2w=_&r>>K;5$$v?A4u4G0**$suJq z|7Lq~iU>hkI(O9e<>k#Xbr|pJZ0-@i!Ae`7PTlhPIoWGIgZH4nsy6x&xl#CeFH82F z3L~Br-qxIqt*W_eEC?+HcEnQdFN}w9e{1#b_lkLFw3FP2QH z+&r$DMBSXUSJSt99{!FKn`(>Wue6oHqyQ>4LK*s7`8JZWGo<^7dUE%%o{JW9kRa_b*5eYs)?2yo>;D4$hmt@dn!!mu zFFrgnR$utMNiNvaHATL#_B~NAeh??zyGI^j5)KPqU^dX`_ByEyW;z+nI=2E+r#W$qH$rUH*UQM<$c6oGK!?%^^51Sa8;e+uqYfT^75TX)7XjzJq2HHE} zfmSR0whoi(PPb`~FT(E2eA0lj#So#Joe3hP*&SAFT2x_W*f^4JKs_P4WSQkxm;UOx zf^UY?=J}O{5ktM@2Lju%jwTQuzw}pa0Tu;M$0%za=e@#BiF+P08HeahQO5N_atCKc z53t|hOJY*!EGZcJ`r$FXubav!;@rWE^Y9QJ6_b$A7LIazQq|ZRP z>&JH>!$M`2=?gFg(dkGM@5LmEgzu2p=19p1-go!NC5}0skZA5ziY=(9xPTrX24;&` z>@F7K*rlwjtfI1nA2xSd@wpX+5rRQh4&vZd=+?IDD)Q(IL$407&@sBMPKPJz6(-I} zDW2Y~ZeTzsNcA<1sI?mBRgIG2gu4DCcU2SJnE2mdk2SF6L(? zKmgncs=9JBGiD1y+|~jwSEJqJrPYbV-+MTER##U`e1;Q`y9jL**+?W_wo*2B73v}x z6hyHTZW!0+9~LB#^)HjOZ@%tY4zwyYoA`ftA%=3hL;p_g~ge$=rXZ|+$P zwhJ~Tha5v_3{AQ*x%Q59&_;V;sb0J*9;EwM^ z_YrgRQ-;>}!;3M7%}T-_WoBk)rtROGHg>cf{U0Unjl`D*6oD9e} z>>M3$CnP-HP1K?@|7^x~?&YVR3C}zn&_^V?Ji4UFH<6haE?mHyO-M@8`2u&ym|Gb3 zKJ)r@q-IGF{R8nL(6_6^Z|J1tJbrvrudB5+WS4L4Aa)Vvp#f%FILpFy3f?(WH(2@a z3xqD|cs(W|n#S48vI%6NYyD>5y;32aH@W9Rz$R95RaI8DFf|oTD&E4+e_KIAXeKrK z+yU;P9vGSg0*gdxU9+|A_oc%^DrrpM>>e4p(viLOB%9W2`?{M|cjMwjD{Y+_E@hv; zxa|Y8WBY5_#IHI`ipO4+R4Pt}D+6weJkrVYn9v$oIu*5lE$J+}a}dIfNt0%O{jveK z3AbNl=h$TMCanvM%10>nA_-Mh`gASODGG*~?b`4>l=aXbw;1`F|K1;)xgg$9^30h? zJ6Xc;q#LeJGtU3!=a=so{_*2SXJ>r4E9f-=$p4m3f~H+@enE&cB0L;m>KF0ej~~@# zWd$!^jgEeI1Oy$=>8z(Q=q~zMOdW#SvP;l=* zkDmKBBx#sH_eC5UnF6d{!^fg)*RBDO*Uj|s@!_Zt?=10j^!5F<6#K3QoHQ#-OaFj? z8#+%xa{zr!Mx1)sz`#I92sYI-9iTE?c5Ub;CwuYD;VN=}#hW8Z)L$ba*=Pa7OA+TUI6{;qam$qbgqsRLiXE+7lN?4_^&7BqE% z7${ZJP5>l9HU=VnvU*TIUf9l^myY=O_`o4UwkJF%CkF(Z^lk5z5pz1y3%1DN)uZAk zot<~67%w@0J&Im$-m_w-4Ac8|_FC*1-D~Ft<{_+gBXX(4SHX^h3tW?U%GoYPF>+zy z^o7koj-2B>e-`(%SRQsHf0BH72Rgyfo`N{YNK19(K*Oy7Ur*1yK_{8J{bojuX2!2v zVs~GvwLLMA46b6fXi7L1Ev*wt{N>GgHa|HHt}MflvYz=nq*dRl*tDKh->kY)_$4(} z@ZON1gn-zaci38k_j6NHs$RVs*{*PlwV<=5j96`L>+5jTJco3eii%2L_kO@%Wiat= z5C$mzp{?!3;{6iWt^zW8L=IeBT<5?D^Bx3{0-DO3GAS}K?ZTctWl*ko+X+TMaMdj7 z0%?Ts)XSxU{Z}B%QCl~MSi7y6Z)sl!r{>Bl5}OXg*3ilWel^#ceP<=Ffd>`i$|E30 z>~*Ja)w%o0@#pmPEr!b>mrQXGtK#Z_!9{o{V zOC~!`YHMp>xS;0qYjM{3Mr&`cghLt5JOm9lVC;V@B!v2cO0LNh=i9C=YxWR zAg8NWft?y`Ag1C>yi5ZJIYZ#W0RBXo#z&*A?bW+lw(-#M)J{$?3w|z}&#Ahyn)Lnq z_c5MOVeS3v__KTV(Y0(THLV9Zs5k;<8eNWLNt1dUQh1P!JkoG^^6XhtV`H2Wz(uY! zWW+*Fx7fJ zBZ)0h6__zlUC3>u*hb%KL3BbV88rRns!2Vty~RI*YO7+87abi(Rg1Vbxx2dyhN3~I zMaVC?LA-4AazKMo@G=VUyzhWy3z>q6@IAAij5#3JUsFRpYkSOv%Kg>j$uT@;z(P*d zF=Jy-c!7E|3$1Ca{k^#O#Enx>+i}!_Fld69i`awI_<^&eiJmZGG{q$D=`Jgps7v-3 zTKfiivXtKQVh-N$gs*@5cJNlg=c=kTGb|6bH?VG>f&mFz+)0aFb^IKTd9Y@-&ERki zo)MD0pT|np=4=-C(iA)C=(zp<(cY0LK2TlL?g|B>h3Ca@Etzy18+5vsg<*x8AX4l* znUtO`%(M0DLM+>>^0YLnJ(z;N_thD>{Pd(Gz7s?O{X&-+-?@#ntgmY2LQi;k&A>fS z$dFYlYs<2@2&t~I@jI>wc!8I_|I8_52{Q2ORVvIVMIRd49Lp!#QF|YWk4Y z_>x}NhY#$mtOK7vd%-pPL%8)7+VYlal&v)^1QE*_Y}obt2o#SaID(fj=+NduJ_`2O zE%(aMed%EUX$^IkA`fEc6IwPtB6;lF;NIVX8)XH?#;Z%y*UhxoF7UBoGcQeV(u>-c zN;3QfVrFfvw%2r7>0Y`8Yl#idfiQVC$Pb)oZfP-U)!C>u6JZd`wti?}Kt@JJfFmFv zz%E$lVH0c#g1^KjP%~_gWjpqw)iw|kTc@Zo7qH?JU4c1B@?T^D{oG*BN7CU zvzj<%n`zsnl294LxF)ojjE1-9XWEBv;5)ICmU$Bo z&-r#9e8p|OF1WRhT{V?$EX(-e z7x5At+A?ByLL}$J*G=uaQ_Oh6u#7VBLzi*|&#N(WkcoifDU(%fRv&sSFM6kvZkCYP zW;NcwWB!7TazSDRCeE6VulBF``u)2U*(zG*?1viWSSIML-o2ao^($h${ufaXdBieC zrlfY+*YVVhfBUv!f#h!Zitpw4b#xY>B6K#CvZz-&6EZdM{Cxg)!OxDi2L`OBC#Al= zKA9a(2U8jL_u-!3P(Q4#xLL&mEDH#-eu$;shO8Ali<=*dZ)oha3m;1i4-I91$HvOK zCY4Q8g8MnzYe>mzng<-FE`J1@?j@}d+>wmd+zjWq9R8x=K2hroxC2HHTYeSL;PM_y zkI|8nmtR<1tTsaPYp@N6te^uI#E_uZ+7q2`-h2gEYk$VxKCPmHujjI(x-R(sH8p}` zF?Ly6u25`*oZVYwbbYb#6BY)=k)frc%7u_-&U-W|d>IesGa&GWo2vEU@M{SdSZ}eW z2`&i;Qxaw}34u9JRQBiTIAkl4?ep`+nzE{|@siPTLXIp~HilFyLvwjnIoof#m z(KAGqsjLfi>na@OoLvknq6@)<@Y~0n7N49fT^Y$Fzt5R={rb-v_SC-r))TYN@aZoG zWM@LOr{oUbM?#v~>RCR^tL0=W51#zC2*zu)UyslqzisLr;C_x_uT>DCNwDtnnpLgzTDPd?Vf@~(l{$aCzt1FPA-5|JP^Fm@-G8P0> z0mE#9GB&LyU%t#RvpBhjP08nc#0uM*d(y#s& zg$hi1_T_`BT~8xOsSNKq63%gf6nr4N7+JeBvnb>l{=)CS*6np@bP zft7xw@>wA=_@_@dXQ~CQ@UXJly1QSm9B@QH>a@xF*q}*8t}}Dr%wOO2QrXtq*SAmlLkc5&@MGhh)Hf1u}Ph z%}{|%X>)V4z)`#X!!!q@sq4nBD8USGu#NE>ub}o`+$9umBsH}$o^?C!34BuF7TowX zxm8&!(haZJ-_NgsOo}N*pWv>QH!vj>sP!+=EKpE*1_L+LeUMO8zk*8>hKPkJM%4mH z(bL!8_Xh6+43^?9Trh2$rEDsA{MVm6>)|0I#y~skzc@pvM|E7U@5kDqzPe<5KRrFY z?OMc5yxVX`z*qES?Xb@FQTz0;lq5)CaYG3%&;LBm!os4iUg;4Am;;w#;V~cxJ)NCZ z+Zu8j>g%WG=He#c@EQ^Ns%Z$bmk!j(xM3|gHpi{A4(&pOLXTTJF)HIM%8bx5XuAcL zTe)x$8D`}emMW=fdUU%a@MlaupaaAnXcpM6vwVQMf=Mr76$)=;dKc&}iO z2L-J%haq&>#wI564m~!}3)y*JMs9SIwo&^UD+-yZOH@!@L}VZ7#!*7c8h-xd$?`Xl z7@tM6d2EO1N4OnBoMlilhbjY5?#?nn?T*pydx@r|96UTrNV0I3z#%O43wjh8xkPA) z>PuFTSl6gGw8Qc9M82Khfc#|^Me5C-n{eCicmB9jD>A3~DG?>RP%SR;c&ocfNp4X@ z9c}G%0Rf+K;hS*oT=9&MG5I_q32OEj`asNW(H4@DGUzpC5Y~=q^B;yU;i_Rg)h&`9CWSZ7^A|pdSZEmuZM-(c+H6pmF z<+!cwz;?N-tZCc5vPp>6xW5nX-w%T&87t=!qFTV*2J6#aEQ6MMQH5v0^f-L@aHPn4 zp;i+@fWJQ|5uzlv%ak!M#g=}4Nhnu^aehSGE z{5@=)9~jqgh!5kG4;bK&A~e2t73$U}nUh1k7Ut&#F2lBA%hu}JB=w+c=kMLWe)a03 z*aG-0qM1r0sGpx-;|`h$P9ifCQ&>loJv>}GZ!Dg?J|&{1I35v%pMOkE^t6PL-UbVJ zsG|uBS*7;m2lXv@yJp_-4-MJbK#^>=GCcTQz2-6Jh>;#(#!nHkY-bMle!m2VEo%SJ zm{pm@BYOL%G>$#PlM%fOdT(j%QHO)EY`f`{LM`vWk{_}OwhU9fR8M3|usP(szKU?D(VrLjAZ?p690FYi zk^v;Pw6shIJ%+{TnnMZB*%k!5hZBV`i``Gw-c`FxlggMZrzJ+#ypzkaVT1Oh_R247 zGA0zBL>yD0!PbbTYz+?WRD25fB3O}?&F4;!5Gxr0XBE(>BkQpy87;7 zr^dU+gyU!j5ec|SOAxApgM-mv6IlM2Cy^J)8nI~ z8Xv+UFEaxrhvTZ&82n---CvS4#&Rr6hQ556118uwE9FIhZ&Sf(pUvxOTL1&{r}7Ok z9gE9Md6XvmAo}W6bGQ!=>!qJ(@7qtnXhrnZcO4Z0hBg)vk0;^Or;^r+J14O*XjqA0 zV6^cBR5cej9b8wM+US3a6&!WiXPRpyOG?d8U?Tt{8JKwx}N%#5J7WUa% zg&CkC0nO?mLYXqp;{bP2hn=jdJ{Q+au~3LS{u zZoQGah4~+E;ou18r)fDUZ+K|w#5>PZav;)de(d=}`XQ|3-n==G=!dj0+B)^}R)&tv zGVx9!BD~u|m#F47btuV(KB2I%a8MjcKzwEus!$|T#l{=i=&s5h+rZ&9{pC>M-Cr{^ z&lT3*8Kbu^zIVg?BE*d~y(lYchY-N_?F)OpX{Uee02SANjyk!CdidawO_n_ zI}Qfd$62F7Oy?==*gCA=cv8Q1>&~qv@v1{8mwtE{w~(CHK@a)J9id5eq5ii zZN2(Q=9Kp5DVnc`E&_IMSrRs+ygLzo?mN=w=s^Lhnuy(psK?2VsvPcFz z4>`*JTd;itwKTGKN}gxm@W1iLcKHM}55UoB5e|QOpHx{!j}Nl?-}s<^{xvK56kGJp zwzj7~93Z7a?2~++gfu5AivGs;$;sq|gqxWF&#y9!3=hxF%w%|qvVVE}9K$z(_ygRZ zmZQu*1FA805BSHi&UyEpDAiR}mmBPn{Q$J$Xs4*wzkher*Xu_Xg-l?YJwE8fIz=JH z_Oto9xjG*z9p0Oo>E$pAM8mFH?VE+QN|^b92@Tj8kBJNPZO%tlaRY5b}CR!gc1G z#qd-B-~!FHZJeq97i(_;meu#Ii;9G_bazR2r*sNPgLF!FgDBnIAkr;elG5EN-AJc2 zc;@%}|M%JZ-gEA~`+3e)pU*GXT64}d=N#jG-!TRzFiY(+U{7G6F!v#~Rt|TY;eLbR z0Y#7g%|)O@O6o0)kDr1`0N1+%@{nz8Y=Fd7v>0gL0XTJj?x>B&4lR#mDI*UyXd4*4 zSlEe0KS0jbAp)ZpC{l)d0b3|NY#asqxZ-X)&uy^+yIb5KEWBlMI2EbM|^aw;G^SWSLa>7s_f z=6Lw{Unn;ky+Jl;LM$6wTXGDoK)W=%k3Up$N%&-K1B2wkq(HgOJWr4?094S0e>MkE zp!xYf9kL_fdcOkeaz_7E0SJO^_WDy=Tg!26ca2EzgJC@x0gME&=eD;C&k$i^PS4Kn z93T7MU6^UJ^YGjN1`2cs@YYzV9VK~qdGRQyrnIcxLfh{SL6SDGKNJ0t6uywE_jd>L( z0$<~KG+hav^D2X2ajWsqnIXjaG7##b_4 zdV{)aa{xSrn2kS!L&&tkB)8wd`Ajwk`$_b)2+BylSHH${&* z$ZtQ93Lpt!H?oZvYk(>rHTLw>h(Bo~=|dWSLXl|#C$q2x+~%-On*u;$0m=}4WU@gU zm0DW20jT7Hx0u*VWEiH9ZpIG{3i-2SZ-4_g$H&TwMoRkH9oRJhADsZ8^Mo2a_H+7m zuVFPLeF(@21~BZcd8lXLs0VMTh$KG)mmI8Oc_ScWVKui8j?1gN1y=`$s+5!zA0mV& zJ&jKW+uCP-O0w(&J3~$qy zUFtDa1(X`YN`?Nku(tNvIlv4!I-s}-1v(a1pt@5!o^`J{KgfXBQ(@!??l=G+g=~i+ z7|0MW1M374nnLgZSbdvr@7Sh6At9zIR;$Pi8BmE(o5V#6(~5zGg_M*Ow*$3Gz=QEo zZuK~<9_*Q$>M~%+@7a;IHS~89u)%E>h6t{Y;ED?veBb2hGSbu6tMN7fRx{=oSp~2m z>8q71yq�kR=kFG5F;%t~)M#0q1wbDfogwPh+M&G~?y(FARDOkh!j5L$Ek@mE|J8 z-)g=p0Eq)IZmx2-4v@z1oOut3VexqRT`iJ9`7U~DZJU3=ebNP)Sy_FR4N*~}z)M3J zdY1%QIx2z~s2@AW#!zPghSGViu-0-5Er*~dTCd#cfn5b^La@6U-FcvL_N}bw>7OM0 zyjj=TG)n?dMi03-%ETKFJrxy<^!x2W%%(C?PajZuEnmzC1e&u_#04{*E>w%>zt66% z#r&|dy9^d5q(n7!MDA5BHQ&OaLH$I}DN8?Dv-ZtM#qe%miN0y=}hkNoFRCqLJ=Rkx+&ER|14V*`9Px`M!_jK~G}82`wU zwVTjVfMTEw&8j&Hq17}3jm2%{m(nzKxvQ1lUP;bpfbN30a#n$X7Xe}Mn~Nq+P8R_0 zGSLB!KB@*##DTS@iLJrP-d?lg7UZvJxRqr2k>= zfD*O zl-TxJfv^yI^*~b&kOIEU1z4A*4w71EkJ31w@%3-hLCR4gK@a7x&OkNtCnBuM9sIeI zBv&nXyx57j_sT9&NrycMJqdk%{`NF#wT}*Xb%81keke8*YIJP76IEdIK9~9P`*(3; zBM)kb2lBj`Ub#o1xY*f$-3BKEtpJdg|?WzEP9$Wr@Ic4Q!_%<)*gF3KRs{ZP~fFX0HyT z{DE{J53cOX#?SJZl!slv&82L-MIJxm2^jz~^0_bn`nA8i3zx*jgdoI$%`qKjKl7P+ zZ+rVKV>QUZ1D^(5Ee9v3F8E@3W4w)o-}U#wfdDoDHdRqUL5YDBeIiCzE2t6zh?UI= zP^-32jV`VhsG@a#^JR^UGRK-34gPi(V zX~PHY9LjI!iQF8B4m2X#6Cp9A=4;i^&>*`-++~hbU41=ZXaOvvrm2}x@$`7-{9ibq zYp{C&juY6=*gQO9#HxVyX&Ai%m71v#Z8QGT1EC1V6*gS4+j|>$gfF^jUm2y4d6x2k zVG4XyK>J}S`(?jk3KUMW%`x=w!0SN0^wH84e25hNjN4gZq&@NG2tLokE8#_tk{;nB z(RcsGVNZ+mpXgq1n2=UF--hiqy(f9-`j`io2yzcg%O>(XU0nmybNvo1Qx~JLK>qr( zBLvia0V>AM1VuY|0)kU~-`;HhWIsxl7={W7f`3DGIrBZH@!>ht@Kaay6AvJ$=ON4Qt zzts{I?F0)~jt|%uyIzBB1)-7CD;*&smid=Q^g`rm6nhgz;_F{$d9?dT#ky00=p8sm6W}GW!(1G3nTG>+(QtG=d9;Iv&|z0aksnt z#OZLmfHS_v0>~7&f5?>oUj%ml;JbGIp9%OTN>toj zTtEq=56q~@$N<9XwHXBFR2~W>0=Juq3Lt}c|6*U%AS5u@lNfM;ng%GbMv{?{k&g}z z;v>La1z;Zo8A^aYbie@pa4y2V$`FXS?d|Ue05FgTV4|k+$}1>D0+|H{VCDeyoxB6I zAcBH|AWJJigL-#{fVBsNeczT)0Ko7Xhu+NDxi%&yhTj56@_@w!aCl&?fpP{5G}t1bVWps4@gS~%&@oxNO^PKAHe(t`;!>gdyvq7 zPzk7S0vSI6v=m()go)&iEd%2MoEmT&8X6h^iBPg8BbOir=nwTQ5L0z_V%L%_1D|ND z82RN2Fn0kQYpA^2ViXVDbujI~`UGY-ut5bpFY^0{LB9Vs2$P^9HwXYyAaAO(Mkkj@ z`K?LEW4ov(C=WKL638aXq}S{MGSPsvO$7TJ8|Z-K=>Q$utz!eZmtun$c7S)-($eC_ zL=pHKVnP?#0Hwx=q7NbDhRdx20f{9ge2$xe z|MAO$jEoQ4jNtk>RE9vL!u8D!NQ|w)2)2$N1qHnj7bLb)J6i>)q5yAy2v*W`?r^kR zk*l)AOM?QeRP`aS)PW>$fgp)NQ4veiAUKIVPH`d-tsA3;q8aaieggTH07nfHMFSE% zl4M*P$oypTKKq~-l&Ao98wC9TT+-ak45Ux}J9C02Hn3?yE*CcKoVjkjLLnB)Jei`B z`!+`mu+N5uhN7Zhv?8OU+Z{IiW!6CK4_Fp*TT389bs#tl8v#(*pNA;~@*c!Hqk>kD zzZDG3C$R{4@@5GGIXVzD`&k@FxpE_VH&P4WMa zB?QQKV^4!22q9Qpa6s*jf5Pw>|0xg(o@$dp0>i*(HUE@f1y4=C045eFCc*3jK|%mK z0vdY2F9`i8?dVu5J_CaSvbtHzeg#10B^I6v@Xqd5=P)40czgo@0dOdy4$peG4-WujOxqnF837vrDW4M+@bN(T&e75DMMbaf0Ez>~ zZq4TIG5aeC35k z9grT!Le~QrJ2jPc1@0c`u=AY2{jra&;CbG@KU z=TRxxbZp>B3xR10npy-F7Esi;4G6M55kcpH*p}IB1r<;cxQhcwcz1MYsh!*yKH-^g_>8Q8mXm^0H?Zywq#qr}u;7gE! zywcwjX=w~70x!&yF2EYW+6`o>zjG%`LD)V3NkL8ApX1|7+u8Wa695Vx8j`aCbqW5o z=}84GDCf^Y*eoF+3lJ2{1js)Q&UM@Dzb1wp5Y+%YdowByj1X8nfboWuuk%UGMAe=}wNrUfW~Ch||eCqw4=wq`C%f!g%qVl(Jo0B!+<6mY9l3d8UP zKU}O%Ajd9bz=yY~=egHCQuziBzq`HKN!?g-_ zqEZ;yI*WgvomBzR^y`^_&5z-UN|l#Qxs8oCAXYO{-;((YBpW;kg>Lcqn&REJ*%JK$m?ASQhl zS(~251jULsHUK$D&JK*J;h`bGmIu8B`TX!RSUxly0i>(YTLR@@uEz1RY;zEq)yTIo#P4Jn;D;OA1GQ_yztC;qC4<8?*u;pdl^IZ8OV%yIjfN56x z;R4Xmo`oI%wDUOuOiMpFppyF3@y{grix06oz-djtKp+(Gbl@e#xrB@ZEX0<9e1;VG z|FXAKHT`{+dM~YyXl7^X?BZl*WD9v_Z)}Cg$w$UY26-YV$fD-yU`ECwWpC$#$fD|M z?DEe`$eXN)EMi8^W{^+FSQIRc&76!}EbZ-7&73UFnPgpzY%EO>StRXD>`g80EXY`7 zP0j3FEL}XAWDr>-%$!ZYsf_GgAis7d`@qEtPN<@X$f9PiZf6O8Vn)Wr0eMSU_&=`c zpRfFHt_gAk$nl&k9bD|4$hg=bKl|@o+W%~fxU2-^Adoh(BeH;3YWC8y67P&0{_~>$ zd0W-f*~QFO*3R6X4D^eNnS~|jHBT~HQP5{*bcifUPNtykpslq3(N^%LDnKG_%xpp1 z$yh;SSTxB#u#$b?;O1gx=iuZ7*UC!9&c&*y_g@+cX~F-}(En^A;y;6-Xk-h9<^QSM zrEH8WoXNO(5m`hbJ?%oq%g4sd#>T<%AARpa#>CFX&CJ2d%MGp(G)sew4Sa={kCO|u z)yP4{%+lhc3mG>TCo>N(7wDFM4XCJ{g^d{*6C2OJE<#Mq-h=D|c*)Jo!^Oi(#>BzO z!3?5vc*xjTd3nImSh>mgcv+eGxOl+WLONN>(#DLPjEfyINdKkDkk|iiGWdpznG?9< zY>ZsYB+MZ90wRlonVp5pM>1|U4sf~udcj7<#>UIZDJ)F(?|auH^H|%{M@{nL@3psc zAjd0BvY*}wMlad=VJMv54aAx{p>ZO}E+Evzlc!NZZ?j^)bqFeFKq3tF4;OLO6K#EO zgrSYX+ySfCIwyJ67%@*1&q$KJx%uT#iTYG?<&p*l>*oGw?u-}1Q)$KaDs%@8toIH~3Ha6?m)L~alSMs0LIdAU; zeKljEd!eZ(T`8~6qtXZ(-7@LuRVL(;JL=tT;Yn1!fsEuokh&N*T6QEyKE9wp$bHvR z)x`-dVyv`|{AWk5rS7=LZ%!*Hf$E!Nt7o8m0sf-mCNA1GIxBQtZQu{$r0mpn0)Lp7 zul67P4cUJ2b{;#}yr@mbjT>>ajo9D~#>dT`ylr)hUwi{UhWD+1cINqW-(MBGAY_0iv5xb~P zC6K(!p=~$2`i8cEO=+m4O18uXZ37_~BQaKRzAeBI`Adu;+v%H3(Q1Ah0>x*=UJ9#u z)mAT$jNciue}%=V2Q`e?MFj^xSvDcD!3k(gH!mw4OKrB~TTjYdh%3CUKrJgiM(ul8 zG9)RQJ?EO(T6-n<{Pd;rJ?-NWXR^7s<#E@oB&YUJQD4VQ{K(Hz4`XGk z0!=M4BmTlFhtUvh>9xawUqPJ{!t7q|)ZiKly9=*MvW<^6vVAZd!XzP#nm#KXRBkPcY6_-R}EG@z4co?(qKO$I(BTO0WC$x8M1#;ixbj)BIld zrs`x{WJyLxCig<=tcU4seTG;0@$R4&|FC{s0jX|$$FdGzIL5(*`B+n0qIEC$nqR!^ zT2ox$_+4w?08g8Fsig0@?@96Q{?cAwCq_BT)CSj8-8ITh%=k1XqJDcnzPn+>xg?d7 zFWXiuTUq!dBid@jIvRDb=)<*XwzI5H`8V0>l;1XlP0Bmj_+aWLU+_74 z;^xZ_L6N8ywx|x=z_GGaBZ5#2)ZnmGBV8%>8+4m&-wolK`5fYdC8QXPwYTSO(ZAPQ z3gb>ga<309m)+QQbx&Tk?f(&qS>-sSJDu;wE=@pkEVk?M{`&dxDe+))nzid*fIZES z{g04@M?>d020{}_O7mJmsw;qOOpUcYv?JS|- zPTY;Ba}KT0BPebp0OlCxoJeMlH2LRZS8}!HXaVCA%r%Z^TxXcJ)ElDUfW$q@SW!T2 z-=fo?dslyp&UMY|8Yh1A?OW3}HXsSb%9_8ZUF4afyiGI~N*be%gW>kChe?TBrb!N> zYf>Q6HzV!~zhpyRnK90_WhKI}I5kgQ|Ebduy)wc{C*`H@_5L7!eu(M9{Ep<#tlPMI z?)+%xa2@#HfKzucEX!fYFlShd|pVrbX^K?#|?oEi=1SOpRPi zc2%}@whb%BE&bQU-&d{^Z99%*kExf?moge|Hi;a^nj)Jnn!=k(n|6u{ru!^Ij3uyiJYp;#RZr{>v@r-Ml^O!gLc+QE_ z`}BU5&`a}E?bZ>4MNFpe-O)y^`&YeBKF8<9Su9>-S3awk+T;6KH{Pp<05>|}o4eE) zkIp*usyNo3&AXELBXNc2oqtl<663PA()L53UZB8R<)-HZ>g`R_$;L`|^wY7{O?6|8 z8BvB8V+BJaLy@)He0jybo@z^>3$@F;-vskqHS#BdE1sp70b@4;Yx_QVmq}wO{I6Y~ zE1doI625v1kRC5jdV20HkF}2VjLGwF32f!sMK4;lYj01g-o6%!zyDTKF2bIi?SJB> zua-l=b!J4DY{X}^@1_~z#kp?9*%d=m{!^~Ji_7KaLxA-;rfx{RmbB}os&34;4Y>0D z@oFf-bEG;$Ozu2vo=qB?PL1Wr4-O0s8{Ch$cKyUnm>oTOx7a6rZbv_b7Q(z8Nl*Hr zJr3r1H8+$pH#W!V zgRA;tgGM+KT$RI^DOn|h(;Hm9VFN=rC{_KDJ3Y#X&4!V%zmFrRWTeYDE$N*hH%>oI zjVxo9UKfTIg}m|L$e7B4DR)pojr=b)H~fsg!diSAnv7l|#;8&AeJ#m19}+lYS*XPw z+z)T6+8^2iPyJG}P~e(>Wf)4~!5Nal8L-UNdnBY_cbB#lTjZI>A?&z5w(ZJ8R4pBkoJw^wMyJ+;w8 zWJ-pq?Lbb*Hy}x}OF??+z*q4W3h{m59jz3CT=fePe?l{@P=;!Fkv?^;NGFd0zpNla zTIfcViWSMU`T(ax;h~BLx>}OL<;}D|csn@b<=jK1ZbM~nXlt`_%X2g1gWtDbS{27h zDL2>`A!^aT%U`~cRUA55D$s7y8H!~u(a?}lE!dypoTDEt^wRFuP`P$f7GlhC-%{93 zoGKVD4zEa(Qc=h#5pFnVjP1&YQVGPOLrD%^m)$So{aGl#MP0@jyvo}s(!?n>fUh(RgolM1V-bn_* zYU&EJ_}S^(DK;=LaF|4M_`0Q=%#GlKgrD55PT@j)bdFO!yh||F<&t3}B>3pUE(6(L zpu0wB@VwucO*7Z9P9dBk!o8Cy;iiNMJQpL*l(OC=m$udC zq_T>)*F)(znw~hntO+?;r_=X|QxiiQz6694NvIjd*XKmNOCNtVju^F)h*WtUhdZCXW)MYpG3 zJ^Ig#^q#XIf4^x2FSMe$s>cVNn(tO_@}3bz;@0}c>XhY7wgImiIh$y^Xk8LCLat{D zQ{P_i*1VPQM9C;o;`RnuzSd;Y$!F7H4Qs)koDP>VGp|VM8b&Hrk7_$*GFl=m)rcS^ zAJq^{`C{~s%ucVC=#zWux-FGxkz{sS_Y8|IBxsQ*<*2Cvn|P5bS6W9uOKgI`JN)s>aJij5z7l7+vJVf61v({M z{s@Nqr)sW_k2&7WCo)w585|3`xT)36CjREMJ1>nISZA4f2h6DOM3K2N;H`rL+M&%q z;EBS(>N|W$(2|s z6=t;zJkQ<@ZZ;)6hUrNdh%`LclDf>)T+yhkAJNH!%M7v;<{=?LHxt66*uB?D%A7yI zWkkeeoFTS4GlZ+bG`@eu6HB@1JGzY2d?~hKC7;UG(G*13cmOAwwFmoCb%9TaT}n-) z(!#nSBs`T~XU17RV|vi~M{tU51XpEEug;Mhyyc>3MTB;Df4G?NFw3BfT>dCy-sliF zPCehRzRjQ$Uvw9?1+7iHl+;A+toL)=U+$M5e(UaI>4rJ;CGe=Nt|#xRQYsAeA347q z&7CL1%hj9gB=ayLClQwn!P=G#^uRbr7R^#UyA?0P(i3MZd|E2dxcGA?tNl*i6Mx(> zGCy>J6p8iFCOq2JjW9tW02=!HYUEEcYq-54=TBa-_M1K&W^iA>$79UbNi>yP{n9ecL)3&{;2?(KIr=9CX+J|vwAPzZHo1U-iXnu+^NpIYxeNZF#if636lM(=8+A(@`SooTB5R6 z#WRA=NwIgH=Rur1K`%otTKqkn%# zwuvSC#eyV7^oc6-MI^t!$j#aQ3p`r#{)C&Dm9NqGe%b4_JVWtHqr2%b+n~7s^ptO7aKc; z{ecxpiu#Zz0O;@WY2VHf9mlf(2q)Qq5%2VydpeFmnou zzWOK$skF7VL^PjNKUirkQREH-2MK|V#R{EW&eD#vmq5k|qi{2IhiBI9w2SzP_|0#zd&c~Sf!-|X zeeP;ywWf@US#iT=S@Dg3?ZudYm%%y0S>nkUV22v9DR)7HdE%?}r7x}cgH zVZXu3oP3>sU^5&`N|95Nnfmo1v?a-SMN$F77Cd*ODA;FrWD9>6w)Na6LqMe~g$STMFyAEBvAdTO)OU5!uF{4_lU9_m1 zbs4R48k%*cN~Y+QQTfKFuOyMCd8O0h%JwyfSIQ&YF+rwH^BlO~(F~?5z9w5UKfEGS;0d%r?W5@C z;1`0iCq#1bqWxsN7_D%A_-w^FMHlq`JJd(itt!8r20inWpm4P_0x)us9AF)N#a6{9B&JBt4MKIg zqO_!1z4)zt)@}#N?X^~ZmsMD*yixBd16*=p$z@xTRYeiq`_Zy88I3(gg9=2bj>X@9 zya_eE7!qbZJ@G5iMN0A2O}1>$v7WZR1U7V?|%$!Zzoy~rhK}| z-V0V}UWhgB$v?e$TpNxxWY$1pc-Q5oJoUyVC0?RBmL4nJ$1}a>qpMiywty64HhNi) zMC%h3L!hnjVD^qzuJu)remFJ-+Nbz!ubdxuo^Ur2f7b>j<<_mfbqp@aC>VUzN!QIR z$MH&Ub$wS_RH4GOugX|ldZF$CTidm?uuZ;kUq~>NUcf-$`z&VwOFH`PQIBtsCs1k; z<6!(lptEO+_S%9nsS7R^A4zo*1!@Y?InDbUv4W<-mZ>uR6HBX$`yUQbzwNRE+P?~y z^}I<-9J|RDBNfqBuBQr1FDwjBb9(?JV7yQ>A@;VUlcewWCj*`(i5C5U0oclcbE|li zUGJJI?O}WBH6EAg133GF`O~tBJQbM=%ThfO1)z5RBs8jV6=BOt&a83y>*cG)@twV2 z8~Y<{^C<7;E0vn$A~AKp!`)XDnO=rt$>S_rp<|I!SHu)QKc91cpYz1^!o1jdyi+b! zL4Hj1WsqQ2mix07RC9RvF+q8pRJqyGk-z|PL~U+DwA*lN2TGBgSA zcH`leO&GVtu^Ll70^C7K#|tRDIpKT{QET1XQ|O*%8M?Ow=Brj(p2r4WPUzbL-W-O3 zgK=iMPknGkJ-_0Lt*XX)#FLg7`Qg*njSMK6h2H6NqI`aoIU(>2QMGsqwIH{*i6b6$ zxNk<4efQ9{#q z9N|)Q>h%-F&E9sf@lSiCGrVanyYZifEN4sNg;zOJ{@&1|8?AEZ8IbZ~6(sKm9lQiGz(3ioc=1Et#Z@rAMB>CSm*arNo6?TQvT?8$A7MNtgBaynla~?&|WH zr~gw0)3=W2%d5uAjueB!MvbjU5d+1O?|kze^)8RjDbHAK?)D``&#R>(9e?i*S@ur< z-rhg#PqUmnKKLn}lG1Z!MI1i2^{!pd88dm>(>35+lMdcoJj?#M@fJ@RFH(B#e*MIh zDe~9tVk=6;Gh!vl`KY?BegeeGkQRMY?J#(DdVXY?N-E!Xs<=^a>}beEVrx|2)0-hY zB7_&82xRLegip{UUGaWpXD?T%$W zoBEpsElXM5V)Ob%k+|m9u#HVkqpMO5a@aF|scw8CEVi<-fl0iG0|mqi|Ejj%3Qo-& zOyUuA#bbdw%BgA=4Y7uTg}M9*(d@E&2GcI$jGzsn z@y{Us2dX9}rov1G@F-`FzTBkDKeXOZN6Q}2X^S2{V(73XmQqPOQp!ec`zvs1u|ErZ z(OxeBrIC7_iy}PtK!G-<453jyG_7;JFNmE3Z#nraa%5utS`Zy?IV(mQj)&O?v9Z2a zL!s$Aj@@fayYcRB@I@{JbLy2eFKOLfT<73U6qSv8{@UiPZ;_M6IP{u^)O8;n&Wch4M2Tj>+h1%;NKf)c7kLZy`CzkKqcJ zB0dd$(%NDt?F&4^HzW+3;ZDT@ew)*#@x>c=}j)JD-2bZ|Dey<}PW~PK6W-q-D&ok1%b0Jalwikq=}&W3q8zZf7;D zK`(Zrt4Z+6oIvxdN>F82qL5Am;u(m6HS!};=I zRwPSz(6{U? zN;qa@zZhAiBuS_9T75KIWn*3MW!exdDW$Nps_q4~q4ltw^FZ^fUx=6DIR2P58Ky`2 zi+LmVpFGYE!P?dKnscpP0C#b<^z~^#Wq~{WOk=yr{nPCUZ~4QOyL zrXLd}m&(P=1&j?c5o2@SYw)1wG0yv{xhcH+p>5%`jOhGDf~}`bm7Z<@N%xlu9UJFR zuu~uJ@Tdws@osI8FkKR|+qV+6ss{z?mqKOhUNm7FjMs7{RCwvWcecknu?EKEGSok3 zbnVs!M*k!VXrWBs2lu_U`!X>VY#iEhR#%#q742K6iNpDWGY^YKf++sYa4LD+UJ^2T zh!lxBy97~slccU78bxrSla-YIF$ATBZ}v$@c^!$HOpbI-?%I>IOHC-_}U-r~G%C z>V?mFs)IxiGbikusO7hLKif4XXcM%gDQP}`li>5XGWT=uaZ@h8t)fLnUkM{||0FKu zzMW4%-%QzvA|}m}h|np^GEs>)fn??{*M-C>tx%TK_y+_p)3>?MV#d6?Dw>tQx z*e5`!raJC+g4~B#R)DvAVxHvkQl|`=1Of3aj-Z&D4o( z!Ir)0_YNYg8#x#h&zs4FYE!lv3)H9OvJhp#`pmP@%WLAZDd`lB%bJz&cOfEw2R7^Q zxujKwWm_`d6P?*(RB2bTWt}E!0BPqr0`d?xfb?sRvF2?WJiU~D8a%($C$VSj5skfQ zJu1P?tW;tQPjewQ`S{R?!?0f^arK)-f~u5aqOR*Rp~}j{yqrU@ZQ8HK++Ln|zbBSC z4Z5V6{W4?0_*{aTZxKf5h~GUD^G>+Ip5)c~C`*k!k(XL|^FTYfr}>(PO1Db#FP>uXelo1$mhcp*6C0 z-dBe&5q8MRAyT3SeXL4XbONtOm@=UR`uN}+zf78BUJ7Zi@u#H=*`iBp_wc!1a@q?s zz%nip_VL+aPtO@;n)&_aj9El)K}6VUWf7~UVx|~7rg1}N9s5C6vClb9a_N$85#z}} zTH7yZYq@BWrFeP7_N@hDkF?n5egRd%9f>l8N?*Q~m0bsY?aCAnKb=-_0iIHvvJweH zs!-}k5=|;t3TH4d?p(*%+yZZZ&Xcx#;G;A$ba0%VtqNPDi*-V{k*T2kKX2G6dZAl5 zQYIR0Pi!;NM@2fWYL2>NQcklxsQiq)q|slkB>f%r$(My%GT~?xm$D6VvRYcXkVJr9UE8HAu>jQ@> z82rXy+CRHxBC%X z&d6#KQqE@XAW()#p}q-@yFW)3=2U9W5$57rbHCg>(qCwgKEJU4jYq=u zpB~A-gonyT7C`@{V&-h`>SSW(3{l=GJK3A4nn7fPEXop6WGrfC9zcO8YYV<9_V542 z|NXx#kex|-xJawI05KWlx6-U+kW)akXaDHYAn!>53Esa|gHk|M#tr!#e9BJtAI~^| z)a+kBg8b~AnW?4GKf*VNc#n&Zn~ax}1Dr?H&dwfkQQ(OGy7YhE_%EVK1xq_?AWXD} z$OIuOK=2p*OvTK^h3o@2HyH;X85<|i#&JWA1-Y(&AH@Wsssx82V^LR;MT9(%(SCGs zad75mVe$IN>~3jo=>WMTW_u?K7RW0WYDrFNF;U1rNiJ$$DQZy;YDr#dURG*eHfl*e zYB5P_Ue13$5~t?lrev1nWESIP7L{O@S5|0hg0!jJc=ky zvaDC<&%7ae^|Zg{&bSOsWD(H$>bgxtcT|y1m5|(Zo}jj`c0@|PbU=-kBWd<|yFo%zK?f%N=4%xkLSZnF(N;vS^j!I+$u9W4OQI5p!=;#CB#p2$IlQnkWMx} zo)7MyHhy6?SpDSFlwg0lakaC@v-XX4*WHr&oAKozq5flggHPTM8JR0Pr$sCs1k6SF z%s9*L5N+WA%LDr_ z6YDKIY_ktsw!(4z6Xi?RcPNzaKldvaCL?_3deKl~rrVrc`ST$KdQ5HeL>jl_A`kV4 zpcUzSTL>BH7-8;h3@O(@k*d-szn>*MH#Xmt=#B*qLc}~uR+3PrQik+x@YoCZ&sf!M zk=E1|;+9M{8m`p}*3I`x1V(}cw7;sewMNV;p(L=x1VuzM?ghEi?-Ehme-O?zvD_Y&kd5=@cdI1n$~~BuMo=n| z(|^GXTOcPq_E=1nxJqMg3BB3z)L$hd@O26q+Zs(nah5c4e8n2Y_6Pfmu)2?180t>( zi{Qq;INw-9Tx@db7F+|Wn3V6u#6Aq*c;yh0Uv83kBy*eU>z2|=4+z?SKp1#*8~K7I zFOj86@197x&1dR!ZA&_>+ekQsenHeFlt)B9p40T%sYejE$8vPC_wFHd8KAOo8csx_wH4scS~Fm%g0Fx5G)+3&#P$;b$^! zUuGqCih;{u&(@1?qCGQ(-XnKCg<<)UL?onPb&_6HjuLaN3@zm=-DM#YvsbT)J%cIE za(vo9-|4&^U@}?Q5i-=WY&~J}Ek@eK$8q}=pn6WJ*|U76d{O^`#w@ZwKs-K%_8t5P zJAG7;9yA;m7sWZIg4iy2Z{Q=6M!NDOP6AO~4wIH;Pab$^V14!U#`py_f^D3M_zF{x zPqXpFe5~hc+$80t*oGgLsXkA(5ysu)O3nrLg=fxsHOBY}B1wJNt9y>wH!5$ly8ncG z(jy=(F~mhn_+2xo6WTyMFbHgG`yRz!gt-(!S6BZzMnmPb_2ftF^TC;LRcIZoQ83$5 z-j{*q?^S*_h5E|;!^qAQYUNBTHOcC&#bF7pFu?@f?m-m{b70>EWlA0>L zwqTFfC=f}A%f}Xo)KZXgDfGunh>I?PrKC-W6V{aaLt>h5au78nkHUH$-H0C$nXhi< z8yi0`jP%&iM-eeO5{4R-AhA;q@WW06}IOtqOTj62Zynyvu)<{^4FMyrDZSMWam)RmPs;9XZ86C zBTN#?qc_--ez+Sb7KZjNdkdxfaPOZem>|<8R>c^K`{AyqZuDxfRN2Tk`HGtAQ~Z^g z>8JP!Y||`zRx!z4*9r?+1Mv?EL-HiHY+*ewm;B?~Wg6D=S@M`XmUQUkk0qDpmZ|u20>Q7`l<*iCgR{14&7Yp?_xyno@btdK7%cMzSNp6yrK%-Y`@9)7<@uE+ zG$|hRzV~W3@NqG+2K@s`@zP1cCa)U9WWO1I%t*c3*M%)u2pr?>amtpo=Ewc|jPo5I zPKiEZE|N4Po_fGJ9!W|W!E=?B)*9c_Jgh2T>CPz3VSq#0IQgn1hOZT&I^X_SB>C!B zI_dnpQ{c$>HhkJ%9zCC_KFj~;?MkDXNVf3k%&5TyaR))87=&RcUXGB0Hf@~rP3JlAu@aD}MnmOSGEZtGQ($oFIOxSpnwBfQiQh9t3mzzO}NIuZLjt#e1hcO198Xmo8-1E}BL%Juy zctN*sku9MrX4taeL_IxzaJnb)$@TB|r-zlWOiu{{!rym~I+u<*wUidH7gw(>wIT(E zd{b~)$t{9;`CFl5lg`c;Q=61IbdH%>$_UH_r^xc2M=K34Mqzh-&6b`U&yn-kMo@-N zE)q)#E3ZMWFI{MPKg(OrZ!N>hut$X;;L%JT9ed2N`C+dEy?H)McA22Pak+BKCurGnyJ{Ez#+%<(h}~>}XGpuazBtm~Eqw<@Iq&KRdka zE_BH*V$i>03#m*!TK$AyW$}*i%CacBy3^vqU3r-}_KB^&RraG0<*(b_f?c#)s>e_|lBTyIbX$b0K==$2~7yb$Zr|yPl48SbV=_f9`5Q z`37HEUAn5kQwS=6gt23NS1-5$RT8}9bx-=!?XI0XM{M9%=5A`ZOb_3Z+f?NQ)xO*m zSj7e_QQ&W$aZS#TT)4719hx636hRJ!zhE9ePlhjJp1+{Br#GX%m{F)6=HL;NcPCA+ zF(0>^b=n_9g8;AS2{dEJUTba&;%hwvR=d*#HE_5p(9FB#=p!9TeupY!vn_)w`W zM!O%Q{f<*P62tU9!I)nill{_EIAv}Y|}>RDQRfVo9t}A(aEG5wKXu(LNlw0HJq}A`g>!WI}-_FpDm=E12cTBX!)up{kuzPyCxHdBKrhao2y3plR^W-rJvEj69qOH5Ok&y(PG zF4A-oVh&NWJIz)+E2i zn{1y|eT~Hz3l1m*j7&;Ja+~X2r1M)aKb4Y+jhT0%-_#xDX&Q|ue8=rHHwV-Awp$5G zTqg-@H0_diS2?6Dp$K0)HCB}wxFi*?(!pGbNO222G#2g=OKyIZSEkuDQN$zOQ& z@iZ$z;%u&UBJ_-6rFHt<;e^=ellC@h1Ifw~R-Yxi(cyZ2Z3KO7`6mY`v!Tk)&^V^6 z_HZFp$ldd4u%^g5zm6_z1Cxs6WJ}VHy>sMC6lwfo7TcvK9=kIQV#A^5vaf|hjt|_XGV5w|)ckvHv2QUxrVrr>ozd;NH zQGLsU33Uz*;ejnTLhhPN*-1>&t zbg$+{FXcJ%+i2mSh9o=vf-&$j4uOC0o+%`aa*fh$)6$r|uPbw)5AL=ZSj@Mrdh()F zFnqcEy}>w8B{ewINBf9@MNmUX?XLF)SJ;P~pcU7-E3;sJ?2~reHGOSrl7z`Cep1yA z*{b2B3Scx=g|{Jd+EO~oCS)Jb7fJdJujf0NnUICF!7e<7c zrUzZ3C-B%49UnKYg~ldhJIXtQpB}%K_`x95c+l*NWBA7_Mg4WrZ>*eKlGK|%jwrOi z-%m3k!eI~c^*VycQ7VoHy?`z*9*&$DEuC4a z6j&8ir2)+_7)B_FNVyqS1tnpqD4_+I7xE1Af{_?ZWf8;x)XUBpA&>?_Y9tI$H99lW zJ4Fo5Kbaem3?OV^5(=__07k-?BIX7Iqz*vTM3pcAmjkj;5<^>59Md9cfyCbtKUzSZ zM$$n zLSza}l}v>&RW=HCslv*T8u*nk8PHOHj)7S;6#5@&C{gZL&`>lQ_Sf$mZX~q2z9KIV z9hh8o+L(-hRkPMlQ)tt2R{r!xA$`FQcQyT<=!W>3ADK>hy1seQHt6kzp4LMX zWgIWNw2dV#8VAKyTR(4IDqI!UzG|RI>IlK|Wc*F>rRQ3<7o;_4bzCa7xj)vJrO|pg zI6dM~W)W;#IOCC&V zITuD9vtM;=o!l0UH99oI$gm9WW3tET7R>vPqaAGI1j@3_od)6*i}ctnQgW8*gqp`c zwv9)5Z+Z|j!rdXLf9&&UP@6a3ja(z5cBgA+kSxF?+MS!i)XB;`GN4iw4QG zic;AX7bV-y);gUq_pdvDuPs%ot%UW~-2YVlH#-%}LNi=kLvLF5LQ14E$3uDmF20fgyxDmuS3#v{L~!y&L*kywYdkwM{np}JMUKzqUl>@%)M?yGD!d$0e|nF(J^y(#u_Oa;X( zPHz14ZJYD)e)%TnK$e?rHB%wCe*XCF5XI55USj{e=~&*ru4ThMbEkUnU9gjwh#?jO zagqNxz>aDfOd~oG|HLSOj}{$7&p$Cpw22*$VPFj7Fc_O#Rt*Mwsc~`$pq23$iq2^R z1ce0j?d-A?curX=6-B`!HcO65gQ<93s5B}H=wF;10s-0^hhcO2iy|lm#2}a@hoTS# zUlv8-xn)r`5uJ}Ki_-A=VF;MGadH@fKzN-oz)j=(i=h;-hRkjQLt(t_!3Sm{Z_kp0 zAQXXc{s0)NhSLRtFf!if0D~c%T_A*v;`;$16o@uQ4yGbF`#}giM;9>1f`(`73`$~P zVxQFyn2I4}Tt5JY!MHYH8ksB#bRatZHO2u(L2-5g7!~hxfT`jA3kE$I!d(jhqvCBv zC6i$U*AIZH!8pHBsmL7rQE3zi#+klGEK+AYJ6oK*eVHgF&`G`gacTKpm0K=$%@sY2OJ&4KRBMS9l>T(3c-N3** pDK9TyBIuXsJ=jdV3()VGcV--4dmrDKc@21rhLFWbBpoB>KLF{ a > img') + ''' + title_list中的元素格式如下 e.g: + 这个杀手不太冷 Date: Fri, 4 Nov 2016 13:21:49 +0800 Subject: [PATCH 04/68] modity style --- ...52\345\274\202\346\255\245\347\210\254\350\231\253.md" | 3 --- ...05\351\245\260\345\231\250\345\260\217\351\205\214.md" | 1 - ...224\265\345\275\261Top250 \347\210\254\350\231\253.md" | 8 +------- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git "a/\344\270\200\344\270\252\345\274\202\346\255\245\347\210\254\350\231\253.md" "b/\344\270\200\344\270\252\345\274\202\346\255\245\347\210\254\350\231\253.md" index 5508e4b..c4484b9 100644 --- "a/\344\270\200\344\270\252\345\274\202\346\255\245\347\210\254\350\231\253.md" +++ "b/\344\270\200\344\270\252\345\274\202\346\255\245\347\210\254\350\231\253.md" @@ -1,8 +1,5 @@ # 一个异步爬虫 -标签(空格分隔): python - ---- 看了好多天的异步,今天终于算是大致理解了。模仿着写了一个异步小爬虫。以前很不理解哪里要使用异步,搞的头大。对于爬虫来说,耗时的地方是对服务器的请求,于是把对网页的请求使用异步即可! ```python diff --git "a/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" "b/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" index ea769bd..b450261 100644 --- "a/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" +++ "b/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" @@ -1,6 +1,5 @@ # 装饰器小酌 -标签(空格分隔): python --- Python中的装饰器真是个好东西。熟悉我的人都知道,挺能喷的一个人。但是,技术不是喷出来的,前言写的再花,也不会让我的装饰器比别人的更有威力。哈哈哈 diff --git "a/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" "b/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" index 04c5491..9d55d28 100644 --- "a/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" +++ "b/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" @@ -1,10 +1,4 @@ ---- -title: 豆瓣电影Top250 爬虫 -date: 2016-10-18 20:19:35 -tags: Python ---- - -### 爬取豆瓣电影top250。 +### 爬取豆瓣电影top250。 #### 1. 单线程版 ```python From b74336a4dbb0199f08add1b5767707ad4a933b47 Mon Sep 17 00:00:00 2001 From: mouse Date: Fri, 4 Nov 2016 13:29:47 +0800 Subject: [PATCH 05/68] modity it --- ...275\261Top250 \347\210\254\350\231\253.md" | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) diff --git "a/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" "b/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" index 9d55d28..aafb1d8 100644 --- "a/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" +++ "b/\350\261\206\347\223\243\347\224\265\345\275\261Top250 \347\210\254\350\231\253.md" @@ -1,5 +1,94 @@ ### 爬取豆瓣电影top250。 +--- +2016-11-04 更新 +使用 mongoDB 存储 +--- +**本次更新** +抓取电影的如下简单信息 + +- 电影名 +- 封面 +- 评分 +- 评价人数 +- quote +- 链接 + +--- +```python +# coding=utf-8 + +import logging +import re +import aiohttp +import asyncio +from bs4 import BeautifulSoup +from pymongo import MongoClient + + +class DouBanCrawl(): + + def __init__(self, url): + self.url = url + + async def fetch(self, url, headers): + res = await aiohttp.request('GET', url) + body = res.read() + return (await body) + + def infos_get(self, html, name=None): + soup = BeautifulSoup(html, 'lxml') + scores = soup.select('.rating_num') + scores = [score.text for score in scores] + quotes = soup.select('p.quote > span') + quotes = [quote.text for quote in quotes] + pattern = r"https://movie.douban.com/subject/\w+/" + hrefs = re.findall(pattern, str(html))[::2] + title_list = soup.select('div.pic > a') + try: + titles = [re.findall(r'alt="(.*?)"', str(title))[0] + for title in title_list] + img_links = [re.findall(r'src="(.*?)"', str(src))[0] + for src in title_list] + except IndexError: + pass + return img_links, titles, scores, quotes, hrefs + + async def save_info(self, page): + url = self.url.format(page) + # print(url) + with await sem: + html = await self.fetch(url, headers) + img_links, titles, scores, quotes, hrefs = self.infos_get(html) + for infos in zip(img_links, titles, scores, quotes, hrefs): + info = {'img': infos[0], + 'name': infos[1], + 'score': infos[2], + 'quote': infos[3], + 'href': infos[4] + } + count = coll.find({"name": infos[1]}).count() + if count == 0: + coll.insert(info) + + +if __name__ == '__main__': + url = 'https://movie.douban.com/top250?start={}&filter=' + headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 \ + (KHTML, like Gecko) Chrome/53.0.2785.143 Safari/537.36'} + client = MongoClient('localhost', 27017) + db = client.movies + coll = db.coll + douban = DouBanCrawl(url) + pages = range(0, 250, 25) + sem = asyncio.Semaphore(4) # 限制协程并发量 + loop = asyncio.get_event_loop() + f = asyncio.wait([douban.save_info(page) for page in pages]) + loop.run_until_complete(f) # %time 为Ipython 自带功能模块 + print('Done') +``` + +**以下为以前内容** #### 1. 单线程版 ```python # -*- coding: utf-8 -*- From 5c9eb7606cf34b9f5e2783e9dd64a7956d758c4a Mon Sep 17 00:00:00 2001 From: mouse Date: Thu, 10 Nov 2016 12:16:55 +0800 Subject: [PATCH 06/68] add decorate --- decorate/decorater_of_class.py | 14 ++++++++++++++ decorate/decorater_with_para.py | 28 ++++++++++++++++++++++++++++ decorate/decorater_without_para.py | 17 +++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 decorate/decorater_of_class.py create mode 100644 decorate/decorater_with_para.py create mode 100644 decorate/decorater_without_para.py diff --git a/decorate/decorater_of_class.py b/decorate/decorater_of_class.py new file mode 100644 index 0000000..e9652b4 --- /dev/null +++ b/decorate/decorater_of_class.py @@ -0,0 +1,14 @@ +# coding=utf-8 + +class Log(): + def __init__(self, file="info.log"): + self.file = file + def __call__(self, func): + log = func.__name__ + " was called" + print(log) + with open(self.file, 'a') as f: + f.write(log+'\n') + +@Log() +def hello(): + print('Hello World!') diff --git a/decorate/decorater_with_para.py b/decorate/decorater_with_para.py new file mode 100644 index 0000000..cac8fa0 --- /dev/null +++ b/decorate/decorater_with_para.py @@ -0,0 +1,28 @@ +# coding=utf-8 + +from functools import wraps + +def logs(file="info.log"): + def decorate(func): + @wraps(func) + def wrapper(*args, **kw): + log = func.__name__ + " was called" + print(log) + with open(file, 'a') as f: + f.write(log + '\n') + return wrapper + return decorate + + +@logs() +def hello(): + print('Hello World!') + +hello() + + +@logs(file='info2.log') +def hello2(): + print('Hello World!') + +hello2() diff --git a/decorate/decorater_without_para.py b/decorate/decorater_without_para.py new file mode 100644 index 0000000..2e9a9fe --- /dev/null +++ b/decorate/decorater_without_para.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +from functools import wraps + +def log(func): + @wraps(func) + def wrapper(*args, **kw): + print("I'm a log ^*^") + result = func(*args, **kw) + return result + return wrapper + +@log +def hello(): + print('Hello everybody') + +hello() From ce828a3db7d28edbeab1c0598276ff997b0bf9df Mon Sep 17 00:00:00 2001 From: mouse Date: Thu, 10 Nov 2016 13:37:57 +0800 Subject: [PATCH 07/68] rm something --- README.md | 2 +- ...60\345\231\250\345\260\217\351\205\214.md" | 86 ------------------- 2 files changed, 1 insertion(+), 87 deletions(-) delete mode 100644 "\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" diff --git a/README.md b/README.md index 3db4262..4dcec8a 100644 --- a/README.md +++ b/README.md @@ -5,5 +5,5 @@ python练习中的一些代码,以防重装系统再次丢失 2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) 3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -5. [装饰器小酌](https://github.com/lambdaplus/python/blob/master/%E8%A3%85%E9%A5%B0%E5%99%A8%E5%B0%8F%E9%85%8C.md) 6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) diff --git "a/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" "b/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" deleted file mode 100644 index b450261..0000000 --- "a/\350\243\205\351\245\260\345\231\250\345\260\217\351\205\214.md" +++ /dev/null @@ -1,86 +0,0 @@ -# 装饰器小酌 - - ---- -Python中的装饰器真是个好东西。熟悉我的人都知道,挺能喷的一个人。但是,技术不是喷出来的,前言写的再花,也不会让我的装饰器比别人的更有威力。哈哈哈 - -## 开撸 - -### 1. 不带参数的 -```python -# coding=utf-8 - -from functools import wraps - - -def log(func): - @wraps(func) - def wrapper(*args, **kw): - print("I'm a log ^*^") - result = func(*args, **kw) - return result - return wrapper - - -@log -def hello(): - print('Hello everybody') - -hello() - -# 输出 -I'm a log ^*^ -Hello everybody -``` -### 2.带参数的怎么写呢??? -请看 -```python -# coding=utf-8 - -from functools import wraps - - -def logs(text): - def decorate(func): - @wraps(func) - def wrapper(*args, **kw): - print('{0}, {1}'.format(text, func.__name__)) - rs = func(*args, **kw) - return rs - return wrapper - return decorate - - -@logs('木一晟') -def hello(name): - print('Hello, {}'.format(name)) - -hello('木一晟') - -# 输出 -木一晟, hello -Hello, 木一晟 -``` - -### 3. flask_login.login_required -flask_login.login_required 是也是一个装饰器,login_required 装饰器的主要作用就是让只有已登陆和认证过的用户才能继续调用被其装饰的视图(view)函数。下面是截取的 **片段** -```python - -def login_required(func): - @wraps(func) - def decorated_view(*args, **kwargs): - if request.method in EXEMPT_METHODS: - return func(*args, **kwargs) - elif current_app.login_manager._login_disabled: - return func(*args, **kwargs) - elif not current_user.is_authenticated: - return current_app.login_manager.unauthorized() - return func(*args, **kwargs) - return decorated_view - -``` -就到这里吧,反正很少有人会来看。就一个人浪吧。 - -## 参考 -哦,对了,附上一个[牛逼的链接](http://stackoverflow.com/questions/739654/how-to-make-a-chain-of-function-decorators-in-python/1594484#1594484),墙裂推荐不熟悉装饰器的小伙伴们看看。 - From 81a596b785c557647990e4b6b77dc4968d907ae9 Mon Sep 17 00:00:00 2001 From: mouse Date: Thu, 10 Nov 2016 13:39:59 +0800 Subject: [PATCH 08/68] modify README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4dcec8a..b12dea6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # Python -python练习中的一些代码,以防重装系统再次丢失 1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) 2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) From 77fca4443056dad852dd2f80d73b101504a5ce1b Mon Sep 17 00:00:00 2001 From: mouse Date: Fri, 2 Dec 2016 11:03:51 +0800 Subject: [PATCH 09/68] add category_test.py --- category_test.py | 72 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 category_test.py diff --git a/category_test.py b/category_test.py new file mode 100644 index 0000000..af8a95e --- /dev/null +++ b/category_test.py @@ -0,0 +1,72 @@ +# coding=utf-8 + +import sys +reload(sys) +sys.setdefaultencoding('utf-8') + +import re +import csv +import requests +import jieba +import jieba.analyse +from bs4 import BeautifulSoup as bs +from tgrocery import Grocery +from train_txt_5 import train_src + + +def artical_content(url): + rsp = requests.get(url) + rsp.encoding = 'utf-8' + html = bs(rsp.text, 'lxml') + # artical = html.select('#sina_keyword_ad_area2') + artical = html.select('.h1_tit') + if len(artical) > 0: + content = artical[0].text + else: + content = html.select('.SG_txta')[0].text + # content = '' + return content.strip() + + +def category(urls): + for url in urls: + artical = artical_content(url) + cate2 = new_grocery.predict(artical) + yield cate2.predicted_y + + +def unzip(seq, L=None): + if L is None: + L = [] + for s in seq: + if not isinstance(s, (list, )): + L.append(s) + else: + L.extend(unzip(s)) + return L + + +if __name__ == "__main__": + + grocery = Grocery('sample') + grocery.train(train_src) + grocery.save() + new_grocery = Grocery('sample') + new_grocery.load() + + L1 = [] + with open('/home/mouse/Downloads/female.csv', 'r') as f1: + f1_csv = csv.reader(f1) + for row in f1_csv: + L1.append(row[0]) + # print(len(L1)) + + cate = category(L1) + i = 1 + with open('/home/mouse/infoss.csv', 'w') as f: + f_csv = csv.writer(f) + for row in zip(L1, cate): + f_csv.writerow(unzip(row)) + print 'Writing now, please waiting...{}'.format(str(i)) + i += 1 + print 'Done' From 947599835cb7a314238032938720066fa2cb5b85 Mon Sep 17 00:00:00 2001 From: mouse Date: Sat, 3 Dec 2016 22:32:54 +0800 Subject: [PATCH 10/68] add category_all.py --- category_all.py | 70 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 category_all.py diff --git a/category_all.py b/category_all.py new file mode 100644 index 0000000..81e743c --- /dev/null +++ b/category_all.py @@ -0,0 +1,70 @@ + +# coding: utf-8 + +# In[30]: + +import re +import concurrent.futures +import requests +from bs4 import BeautifulSoup as bs +from pymongo import MongoClient + + +def fetch(url): + res = requests.get(url) + res.encoding = 'gbk' + content = bs(res.text, 'lxml') + return content + +def base_info(html): + pattern = re.compile(r'http://blog.sina.com.cn/s/blog_.*\.html') + links = re.findall(pattern, str(html)) + date_ = re.findall(r'\((\d{2,}.*)\)', str(html)) + tle_auth = html.select('li') + authes = (auth.text.split(' ')[0] for auth in tle_auth) + titles = (title.text.split(' ')[-1] for title in tle_auth) + for infos in zip(links, titles, authes, date_): + yield infos + +def save(url): + html = fetch(url) + data = base_info(html) + for num, d in enumerate(data, 1): + datum = { + 'links': d[0], + 'title': d[1], + 'auther': d[2], + 'date': d[3] + } + count = coll.find({'links': d[0]}).count() + if count == 0: + coll.insert_one(datum) + print('crawl the page of {}'.format(num)) + + +def main(): + client = MongoClient('localhost', 27017) + db = client.infos + coll = db.coll + pages = range(start, end+1) + urls = [url.format(page) for page in pages] + with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor: + executor.map(save, urls) + +if __name__ == '__main__': + url = 'http://roll.blog.sina.com.cn/list/other/index_{}.shtml' + start = int(input('请输入开始页数, 默认为1 >> ')) + if not start: + start = 1 + + end = int(input('输入结束页数, 默认为100 >> ')) + if not end: + end = 100 + + main() + + +# In[ ]: + + + From 038e31851efad9e048d8a57b5ec9b55f4e7e7831 Mon Sep 17 00:00:00 2001 From: mouse Date: Sun, 4 Dec 2016 09:44:57 +0800 Subject: [PATCH 11/68] modify cat.py --- category_all.py | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/category_all.py b/category_all.py index 81e743c..ce03fd4 100644 --- a/category_all.py +++ b/category_all.py @@ -1,8 +1,4 @@ - # coding: utf-8 - -# In[30]: - import re import concurrent.futures import requests @@ -16,6 +12,7 @@ def fetch(url): content = bs(res.text, 'lxml') return content + def base_info(html): pattern = re.compile(r'http://blog.sina.com.cn/s/blog_.*\.html') links = re.findall(pattern, str(html)) @@ -25,10 +22,14 @@ def base_info(html): titles = (title.text.split(' ')[-1] for title in tle_auth) for infos in zip(links, titles, authes, date_): yield infos - + + def save(url): html = fetch(url) data = base_info(html) + client = MongoClient('localhost', 27017) + db = client.infos + coll = db.coll for num, d in enumerate(data, 1): datum = { 'links': d[0], @@ -36,35 +37,26 @@ def save(url): 'auther': d[2], 'date': d[3] } + count = coll.find({'links': d[0]}).count() if count == 0: coll.insert_one(datum) - print('crawl the page of {}'.format(num)) - - -def main(): - client = MongoClient('localhost', 27017) - db = client.infos - coll = db.coll - pages = range(start, end+1) - urls = [url.format(page) for page in pages] - with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor: - executor.map(save, urls) - + print('{} is grabbed'.format(url)) + + if __name__ == '__main__': url = 'http://roll.blog.sina.com.cn/list/other/index_{}.shtml' + start = int(input('请输入开始页数, 默认为1 >> ')) if not start: start = 1 - + end = int(input('输入结束页数, 默认为100 >> ')) if not end: end = 100 - - main() - - -# In[ ]: - + pages = range(start, end + 1) + urls = [url.format(page) for page in pages] + with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor: + executor.map(save, urls) From 2b5e13ff51342c32b577b7f2e8cc3c1918ffa9db Mon Sep 17 00:00:00 2001 From: mouse Date: Mon, 5 Dec 2016 17:46:28 +0800 Subject: [PATCH 12/68] modify sth --- Algorithm/sort/bubble-sort.py | 3 ++- Algorithm/sort/insert_sort.py | 5 ++++- Algorithm/sort/merge/merge-sort.py | 32 +++++++++++++++++++++++++++-- Algorithm/sort/merge/merge-sort1.py | 5 ++++- Algorithm/sort/merge/merge-sort2.py | 25 ++++++++++++++++++++++ Algorithm/sort/quick-sort.py | 2 ++ 6 files changed, 67 insertions(+), 5 deletions(-) create mode 100644 Algorithm/sort/merge/merge-sort2.py diff --git a/Algorithm/sort/bubble-sort.py b/Algorithm/sort/bubble-sort.py index db27018..d91f215 100644 --- a/Algorithm/sort/bubble-sort.py +++ b/Algorithm/sort/bubble-sort.py @@ -7,7 +7,7 @@ def bubble_sort(L): 冒泡排序主要使用两次循环实现排序。 外循环中的一个数字依次与内层循环中的每个数字进行比较,如果索引值小的数字大于索引值大的数字,交换位置。否则,位置不变。直至外循环结束。 ''' - if len(L) < 2: # 列表内元素低于2,直接返回! + if len(L) < 2: # 列表内元素低于2,直接返回! return L for i in range(len(L)): for j in range(1, len(L)): @@ -15,6 +15,7 @@ def bubble_sort(L): L[j - 1], L[j] = L[j], L[j - 1] return L + if __name__ == '__main__': L = [randrange(1000) for _ in range(10)] print(bubble_sort(L)) diff --git a/Algorithm/sort/insert_sort.py b/Algorithm/sort/insert_sort.py index 29681f6..27b69f0 100644 --- a/Algorithm/sort/insert_sort.py +++ b/Algorithm/sort/insert_sort.py @@ -1,9 +1,12 @@ # coding=utf-8 + from random import randrange + def insert_sort(L): if len(L) < 2: return L + for i in range(1, len(L)): tmp = L[i] j = i - 1 @@ -14,6 +17,6 @@ def insert_sort(L): return L -#if __name__ == '__main__': +# if __name__ == '__main__': # L = [randrange(1000) for _ in range(10)] # print(insert_sort(L)) diff --git a/Algorithm/sort/merge/merge-sort.py b/Algorithm/sort/merge/merge-sort.py index b6045ad..c386ebf 100644 --- a/Algorithm/sort/merge/merge-sort.py +++ b/Algorithm/sort/merge/merge-sort.py @@ -1,6 +1,7 @@ # -*-coding: utf-8 -*- from random import randrange + def merge_sort(L): if len(L) < 2: return L @@ -16,14 +17,41 @@ def merge(left, right): while right: merged.append(right.pop(0)) - + return merged - mid = int(len(L)/2) + mid = int(len(L) / 2) left = merge_sort(L[:mid]) right = merge_sort(L[mid:]) return merge(left, right) + if __name__ == "__main__": L = [randrange(1000) for _ in range(10)] print(merge_sort(L)) + +# Another +from random import randrange + + +def merge_sort(seq): + mid = len(seq) // 2 + lft, rgt = seq[:mid], seq[mid:] + if len(lft) > 1: + lft = merge_sort(lft) + if len(rgt) > 1: + rgt = merge_sort(rgt) + + res = [] + while lft and rgt: + if lft[-1] >= rgt[-1]: # 取lft和rgt序列中最大的值 + res.append(lft.pop()) + else: + res.append(rgt.pop()) + res.reverse() # 反序一下 + return (lft or rgt) + res + + +if __name__ == '__main__': + seq = [randrange(100) for _ in range(10)] + print(merge_sort(seq)) diff --git a/Algorithm/sort/merge/merge-sort1.py b/Algorithm/sort/merge/merge-sort1.py index c223c61..dbddabf 100644 --- a/Algorithm/sort/merge/merge-sort1.py +++ b/Algorithm/sort/merge/merge-sort1.py @@ -21,15 +21,18 @@ >>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len)) ['dog', 'cat', 'fish', 'horse', 'kangaroo'] ''' + + def merge_sort(L): if len(L) < 2: return L - mid = int(len(L)/2) + mid = int(len(L) / 2) left = merge_sort(L[:mid]) right = merge_sort(L[mid:]) return list(merge(left, right)) + if __name__ == "__main__": L = [randrange(100) for _ in range(10)] print(merge_sort(L)) diff --git a/Algorithm/sort/merge/merge-sort2.py b/Algorithm/sort/merge/merge-sort2.py new file mode 100644 index 0000000..a449de6 --- /dev/null +++ b/Algorithm/sort/merge/merge-sort2.py @@ -0,0 +1,25 @@ +# coding=utf-8 +from random import randrange + + +def merge_sort(seq): + mid = len(seq) // 2 + lft, rgt = seq[:mid], seq[mid:] + if len(lft) > 1: + lft = merge_sort(lft) + if len(rgt) > 1: + rgt = merge_sort(rgt) + + res = [] + while lft and rgt: + if lft[-1] >= rgt[-1]: # 取lft和rgt序列中最大的值 + res.append(lft.pop()) + else: + res.append(rgt.pop()) + res.reverse() # 反序一下 + return (lft or rgt) + res + + +if __name__ == '__main__': + seq = [randrange(100) for _ in range(10)] + print(merge_sort(seq)) diff --git a/Algorithm/sort/quick-sort.py b/Algorithm/sort/quick-sort.py index 67fd1f2..cbdaa6d 100644 --- a/Algorithm/sort/quick-sort.py +++ b/Algorithm/sort/quick-sort.py @@ -1,6 +1,7 @@ # coding=utf-8 import random + def quick_sort(seq): if len(seq) < 2: return seq @@ -10,6 +11,7 @@ def quick_sort(seq): big = [x for x in seq if x > mid] return quick_sort(small) + [mid] + quick_sort(big) + if __name__ == '__main__': L = [random.randrange(1000) for _ in range(10)] print(quick_sort(L)) From 786567de3fb6748d4e9e09bab7c9cd747c8ef967 Mon Sep 17 00:00:00 2001 From: mouse Date: Mon, 5 Dec 2016 17:53:36 +0800 Subject: [PATCH 13/68] format sth --- Algorithm/sort/merge/merge-sort.py | 26 -------------------------- decorate/decorater_of_class.py | 8 +++++--- decorate/decorater_with_para.py | 1 + decorate/decorater_without_para.py | 2 ++ 4 files changed, 8 insertions(+), 29 deletions(-) diff --git a/Algorithm/sort/merge/merge-sort.py b/Algorithm/sort/merge/merge-sort.py index c386ebf..81371e3 100644 --- a/Algorithm/sort/merge/merge-sort.py +++ b/Algorithm/sort/merge/merge-sort.py @@ -29,29 +29,3 @@ def merge(left, right): if __name__ == "__main__": L = [randrange(1000) for _ in range(10)] print(merge_sort(L)) - -# Another -from random import randrange - - -def merge_sort(seq): - mid = len(seq) // 2 - lft, rgt = seq[:mid], seq[mid:] - if len(lft) > 1: - lft = merge_sort(lft) - if len(rgt) > 1: - rgt = merge_sort(rgt) - - res = [] - while lft and rgt: - if lft[-1] >= rgt[-1]: # 取lft和rgt序列中最大的值 - res.append(lft.pop()) - else: - res.append(rgt.pop()) - res.reverse() # 反序一下 - return (lft or rgt) + res - - -if __name__ == '__main__': - seq = [randrange(100) for _ in range(10)] - print(merge_sort(seq)) diff --git a/decorate/decorater_of_class.py b/decorate/decorater_of_class.py index e9652b4..3ab6999 100644 --- a/decorate/decorater_of_class.py +++ b/decorate/decorater_of_class.py @@ -1,13 +1,15 @@ # coding=utf-8 - class Log(): + def __init__(self, file="info.log"): self.file = file + def __call__(self, func): - log = func.__name__ + " was called" + log = func.__name__ + " was called" print(log) with open(self.file, 'a') as f: - f.write(log+'\n') + f.write(log + '\n') + @Log() def hello(): diff --git a/decorate/decorater_with_para.py b/decorate/decorater_with_para.py index cac8fa0..59878d1 100644 --- a/decorate/decorater_with_para.py +++ b/decorate/decorater_with_para.py @@ -2,6 +2,7 @@ from functools import wraps + def logs(file="info.log"): def decorate(func): @wraps(func) diff --git a/decorate/decorater_without_para.py b/decorate/decorater_without_para.py index 2e9a9fe..f8c286a 100644 --- a/decorate/decorater_without_para.py +++ b/decorate/decorater_without_para.py @@ -2,6 +2,7 @@ from functools import wraps + def log(func): @wraps(func) def wrapper(*args, **kw): @@ -10,6 +11,7 @@ def wrapper(*args, **kw): return result return wrapper + @log def hello(): print('Hello everybody') From 112beef16931cd7fc8fa1b0596b0e4ae55d73a44 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 11:26:45 +0800 Subject: [PATCH 14/68] fix sm --- Algorithm/sort/merge/merge-sort.py | 13 ++++--------- Algorithm/sort/merge/merge-sort1.py | 10 +++++----- Algorithm/sort/merge/merge-sort2.py | 1 + 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/Algorithm/sort/merge/merge-sort.py b/Algorithm/sort/merge/merge-sort.py index 81371e3..d2947fb 100644 --- a/Algorithm/sort/merge/merge-sort.py +++ b/Algorithm/sort/merge/merge-sort.py @@ -10,17 +10,12 @@ def merge(left, right): merged = [] while left and right: - merged.append(left.pop(0) if left[0] <= right[0] else right.pop(0)) + merged.append(left.pop(0) if left[0] <= right[0] + else right.pop(0)) - while left: - merged.append(left.pop(0)) + return merged + (left or right) - while right: - merged.append(right.pop(0)) - - return merged - - mid = int(len(L) / 2) + mid = len(L) // 2 left = merge_sort(L[:mid]) right = merge_sort(L[mid:]) return merge(left, right) diff --git a/Algorithm/sort/merge/merge-sort1.py b/Algorithm/sort/merge/merge-sort1.py index dbddabf..bd82a5b 100644 --- a/Algorithm/sort/merge/merge-sort1.py +++ b/Algorithm/sort/merge/merge-sort1.py @@ -7,17 +7,17 @@ merge(*iterables, key=None, reverse=False) Merge multiple sorted inputs into a single sorted output. - + Similar to sorted(itertools.chain(*iterables)) but returns a generator, does not pull the data into memory all at once, and assumes that each of the input streams is already sorted (smallest to largest). - + >>> list(merge([1,3,5,7], [0,2,4,8], [5,10,15,20], [], [25])) [0, 1, 2, 3, 4, 5, 5, 7, 8, 10, 15, 20, 25] - + If *key* is not None, applies a key function to each element to determine its sort order. - + >>> list(merge(['dog', 'horse'], ['cat', 'fish', 'kangaroo'], key=len)) ['dog', 'cat', 'fish', 'horse', 'kangaroo'] ''' @@ -27,7 +27,7 @@ def merge_sort(L): if len(L) < 2: return L - mid = int(len(L) / 2) + mid = len(L) // 2 left = merge_sort(L[:mid]) right = merge_sort(L[mid:]) return list(merge(left, right)) diff --git a/Algorithm/sort/merge/merge-sort2.py b/Algorithm/sort/merge/merge-sort2.py index a449de6..0fbc286 100644 --- a/Algorithm/sort/merge/merge-sort2.py +++ b/Algorithm/sort/merge/merge-sort2.py @@ -1,4 +1,5 @@ # coding=utf-8 +# 性能更好 from random import randrange From bdc7c9ab4414de613c9204442716bbaaf9795f4c Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 11:48:26 +0800 Subject: [PATCH 15/68] remove some code --- Algorithm/merge-two-list.md | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/Algorithm/merge-two-list.md b/Algorithm/merge-two-list.md index 7453e67..acb55eb 100644 --- a/Algorithm/merge-two-list.md +++ b/Algorithm/merge-two-list.md @@ -8,22 +8,19 @@ from random import randrange def merge_two_list(lst1, lst2): + rst = [] while lst1 and lst2: - lst3.append(lst1.pop(0) if lst1[0] <= lst2[0] else lst2.pop(0)) - - while lst1: - lst3.append(lst1.pop(0)) - - while lst2: - lst3.append(lst2.pop(0)) - - return lst3 + if lst1[-1] > lst2[-1]: + rst.append(lst1.pop()) + else: + rst.append(lst2.pop()) + rst.reverse() + return (lst1 or lst2) + rst if __name__ == "__main__": - lst3 = [] lst1 = sorted([randrange(100) for _ in range(10)]) - print(lst1) + print('lst1 is : ', lst1) lst2 = sorted([randrange(100) for _ in range(6)]) - print(lst2) - print(merge_two_list(lst1, lst2)) + print('lst2 is : ', lst2) + print('The merged list is\n', merge_two_list(lst1, lst2)) ``` From 71de2be38600f0e178af020a171b59259d6a2f77 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:04:29 +0800 Subject: [PATCH 16/68] remove arry.md --- Algorithm/arry.md | 30 ------------------------------ 1 file changed, 30 deletions(-) delete mode 100644 Algorithm/arry.md diff --git a/Algorithm/arry.md b/Algorithm/arry.md deleted file mode 100644 index bd91a35..0000000 --- a/Algorithm/arry.md +++ /dev/null @@ -1,30 +0,0 @@ -# 题目 -调整数组顺序使奇数位于偶数前面 -## 描述 -输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 - -马上熄灯啦,直接贴渣渣代码!! -```python -# -*- coding: utf-8 -*- -import random - - -def foo(L): - L1 = [] - L2 = [] - for i in L: - if i % 2 != 0: - L1.append(i) - else: - L2.append(i) - - return L1 + L2 - -if __name__ == '__main__': - L = [random.randrange(100) for _ in range(10)] - print(L) - print(foo(L)) - -``` -代码很渣,有空继续优化!! -就酱。。。洗裤子去啦。。。。。。。。 From 0c7b2355b996a3c6f999cad2ff422969b0865263 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:08:02 +0800 Subject: [PATCH 17/68] fix sm --- Algorithm/binary_search.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/Algorithm/binary_search.md b/Algorithm/binary_search.md index 4a9ab49..9418fb7 100644 --- a/Algorithm/binary_search.md +++ b/Algorithm/binary_search.md @@ -1,5 +1,4 @@ -# 二分法查找 - +# 二分法查找 二分法查找,顾名思义,二分、二分就是分成两半呗。(有的翻译是`折半法搜索`比如SICP里翻译的就是`折半法搜索`)。它的复杂度为O(logn),在列表(已排序)中对给定值`value`进行查找并输出其索引(index)值。 @@ -9,15 +8,14 @@ def binary_search(lst, value): left, right = 0, len(lst) - 1 - + while left <= right: - middle = int((left + right) / 2) # 取`lst`中值索引 - + middle = (left + right) // 2 # 取`lst`中值索引 + if value > lst[middle]: left = middle + 1 # value大于`lst`中值,让左边界等于 middle + 1 elif value < lst[middle]: right = middle - 1 # 类似上 - else: return "The value's index is {}".format(middle) return "There is no {}".format(value) @@ -26,16 +24,16 @@ if __name__ == '__main__': lst = [1, 3, 5, 7, 9] value = int(input("Please input the value(1-10): ")) print(binary_search(lst, value)) - ``` 再来个递归(recursion)版的吧, 不作过多解释啦! + ```python # -*- coding: utf-8 -*- def binary_search_rec(lst, value, left, right): - middle = int((left + right) / 2) + middle = (left + right) // 2 if left > right: return "I'm sorry, there is no {}".format(value) @@ -44,7 +42,7 @@ def binary_search_rec(lst, value, left, right): return binary_search_rec(lst, value, left, middle - 1) elif value > lst[middle]: - return binary_search_rec(lst, value, middle + 1, right) + return binary_search_rec(lst, value, middle + 1, right) else: return "Congratulations, the value's({}) index is {}".format(value, middle) From 9e57d23e471523a7f65a2b2754ede9998bc05862 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:20:28 +0800 Subject: [PATCH 18/68] add binary_search and modify README --- README.md | 1 + binary_search.md | 109 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 binary_search.md diff --git a/README.md b/README.md index b12dea6..9d46b7a 100644 --- a/README.md +++ b/README.md @@ -6,3 +6,4 @@ 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) 6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +8. [二叉树]() diff --git a/binary_search.md b/binary_search.md new file mode 100644 index 0000000..6dd8364 --- /dev/null +++ b/binary_search.md @@ -0,0 +1,109 @@ + +--- +title: 二分法查找 +date: 2016-09-23 15:32:24 +tags: Algorithm +--- + +二分法查找,顾名思义,二分、二分就是分成两半呗。(有的翻译是`折半法搜索`比如SICP里翻译的就是`折半法搜索`)。它的复杂度为O(logn),在列表(已排序)中对给定值`value`进行查找并输出其索引(index)值。 + +```python +# -*- coding: utf-8 -*- + + +def binary_search(lst, value): + left, right = 0, len(lst) - 1 + + while left <= right: + middle = int((left + right) / 2) # 取`lst`中值索引 + + if value > lst[middle]: + left = middle + 1 # value大于`lst`中值,让左边界等于 middle + 1 + elif value < lst[middle]: + right = middle - 1 # 类似上 + + else: + return "The value's index is {}".format(middle) + return "There is no {}".format(value) + +if __name__ == '__main__': + lst = [1, 3, 5, 7, 9] + value = int(input("Please input the value(1-10): ")) + print(binary_search(lst, value)) + +``` + +再来个递归(recursion)版的吧, 不作过多解释啦! +```python +# -*- coding: utf-8 -*- + + +def binary_search_rec(lst, value, left, right): + middle = int((left + right) / 2) + + if left > right: + return "I'm sorry, there is no {}".format(value) + + if value < lst[middle]: + return binary_search_rec(lst, value, left, middle - 1) + + elif value > lst[middle]: + return binary_search_rec(lst, value, middle + 1, right) + + else: + return "Congratulations, the value's({}) index is {}".format(value, middle) + + +if __name__ == '__main__': + lst = [1, 3, 5, 7, 9] + left, right = 0, len(lst) + value = int(input("Please input the value: ")) + print(binary_search_rec(lst, value, left, right)) +``` +没事。温习以下二分搜索! + +被拼写错误折磨了一晚上。好好的lft被我写成ltf。debug生无可恋! +```python +from random import randrange +def binary_search(seq, sit, lft, rgt): + mid = (lft + rgt) // 2 + + if lft > rgt: + return 'The seq no {}'.format(sit) + + if sit > seq[mid]: + return binary_search(seq, sit, mid+1, rgt) + + elif sit < seq[mid]: + return binary_search(seq, sit, lft, mid-1) + + else: + return 'The {} in the seq and the station is {}'.format(sit, mid) + +if __name__ == '__main__': + seq = [1, 4, 6, 8, 9, 12, 44, 56] + lft, rgt = 0, len(seq) + print(binary_search(seq, 4, lft, rgt)) +``` +昨天面试,面试官出了一道算法题: + +> 有一个数组,其内元素先递增后递减,请找出其中的最大值. + +对于我来说,当时第一个想起来的是,排序但是转念间就知道肯定不是最好的啦.于是就在哪儿想啊想,还是想不起来.气氛挺尴尬的,外面也挺冷的(电话面试,外面安静).我想不起来,面试小哥也不急着催我,最后也算是在小哥的提示下,想起了怎么做啦!(太感谢小哥啦, 小哥好人! 喂, 你们几个不许笑啊喂!) + +当然是**二分**啦,下面是算法实现! + +```python +# coding=utf-8 +def search_max_num(seq, left, right): + mid = (right + left) // 2 + if left > right: + return seq[mid] + if seq[mid] > seq[mid - 1]: + return search_max_num(seq, mid + 1, right) + else: + return search_max_num(seq, left, mid - 1) +if __name__ == "__main__": + seq = [32, 55, 54, 54, 54, 54, 32, 15, 6, 4, 2, 1] + print(search_max_num(seq, 0, len(seq))) +``` From 87d91000d818c89c992ef770850185472e9f2c52 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:22:02 +0800 Subject: [PATCH 19/68] modify readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9d46b7a..23fb126 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) 6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -8. [二叉树]() +8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_search.md) From f85c0eddc0c0984216aa3f00aea71a4156ce3e95 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:25:18 +0800 Subject: [PATCH 20/68] add binary_tree --- binary_tree.md | 168 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 binary_tree.md diff --git a/binary_tree.md b/binary_tree.md new file mode 100644 index 0000000..1baddbc --- /dev/null +++ b/binary_tree.md @@ -0,0 +1,168 @@ +--- +title: 二叉树 +date: 2016-09-23 15:32:24 +tags: Algorithm +--- +畏惧了好久的二叉树,终于在近两天开搞了。二分法查找已在前几天完成,磨刀霍霍向猪羊,吼吼吼! +何为二叉树?按照我目前的理解就是类似于发叉的树,树干上发两个叉或者一个(不发叉的树真不到有何用处),发叉的地方称为**节点**。然后发的两个叉又可以继续像树干一样发叉,新发的叉有可以继续发叉,子又生子,孙又生孙,无穷尽也!但是**树的左边的叉的值小于节点值,右边的大于节点值**。 + +本文参考: +[老齐的Github](https://github.com/qiwsir/algorithm/blob/master/binary_tree.md) + +首先,建立一棵树。 +```python +class Node: + def __init__(self, data): + self.left = None + self.right = None + self.data = data +``` +这样,光秃秃的小树苗就种好了。接着就是茁长生长啦。浇水去喽! +```python +class Node: + ''' + ... + ''' + def insert(self, data): + if data < self.data: # 树叉小于节点 + if self.left is None: # 并且左面的树叉为空 + self.left = Node(data) # 当仁不让的插入 + else: # 非空的话 + self.left.insert(data) # 以左树叉为节点继续插入 + + elif data > self.data: + if self.right is None: + self.right = Node(data) + else: + self.right.insert(data) + else: + self.data = data +``` +浇完水后,小树苗噌噌的往上窜啊。 +```python +class Node: + ''' + 省略上述代码 + ''' + def search(self, data, parent=None): + ''' + data为目标查询值,同时返回parent(父节点)便于定位。 + ''' + if data < self.data: + if self.left is None: + return None, None + else: + return self.left.search(data, self) + + elif data > self.data: + if self.right is None: + return None, None + + return self.right.search(data, self) + else: + # return self.data, parent.data + return self, parent +``` +树苗生长的那么好,想看看每个叉上都是啥呀,来来来,抬头往上看((其实是往下看啦)。 +```python + def print_tree(self): + if self.left: + self.left.print_tree() + print(self.data) + if self.right: + self.right.print_tree() + +``` +转眼间小树苗涨的太旺盛了,疯涨啊!!怎么办呢,剪几个枝吧。别怪我哦,小树苗! +删除节点时,有三种可能的情况: + +1. 目标节点下没有任何节点(0个) +2. 目标节点下有一个节点 +3. 目标节点下有两个节点 + +判断节点数目程序如下: +```python +class Node: + ``` + 省略代码 + ``` + def chrildren(self): + count = 0 + if self.left: + count += 1 + + if self.right: + count += 1 + + return count +``` +接下来就是删除操作啦。哦吼吼。 +```python +class Node: + ``` + 省略 + ``` + + def delete(self, data): + node, parent = self.search(data) + chrildren = node.chrildren() # 子节点数目 + if chrildren == 0: # 情况 1 + if parent.left is node: # 判断目标节点是其父节点的 左or右 节点 + parent.left = None + else: + parent.right = None + del node + + elif chrildren == 1: # 情况 2 + if node.left: + tmp = node.left + else: + tmp = node.right + if parent: + if parent.left is node: + parent.left = tmp + else: + parent.right = tmp + del node + else: # 情况 3 没看太懂,过两天再看吧 + ''' + 第三种情况比较复杂 + 1. 左节点0个子节点 + 2. 左节点1个子节点 + 3. 左节点2个子节点 + ''' + parent = node + successor = node.left + while successor.left: + parent = successor + successor = successor.left + node.data = successor.data + if parent.left = successor: + parent.left = successor.right + else: + parent.left = successor.right + + +# 接下来可以测试以下种的树怎么样啦。 +root = Node(11) +root.insert(14) +root.insert(9) +root.insert(9) +root.insert(7) +root.insert(10) +root.insert(4) +root.insert(5) +root.insert(6) +root.insert(8) +value, parent = root.search(10) +print(value.data, parent.data) +root.print_tree() +print('*' * 20) +root.delete(4) +root.print_tree() + +``` + +把自己理解的部分写了写。当做练习,就先当个α版吧。 + +`2016-05-28` From e5dd4fb4722ccce8aa155f7b8311dea09e04812c Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 12:27:28 +0800 Subject: [PATCH 21/68] modify README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 23fb126..8027797 100644 --- a/README.md +++ b/README.md @@ -6,4 +6,4 @@ 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) 6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_search.md) +8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) From b9f6d19dd3c5e402c73172848d9b0c4d2a42c1f9 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 14:41:19 +0800 Subject: [PATCH 22/68] modify binary_tree.md && add binary_tree.py --- binary_tree.md | 43 +++++++++++------ binary_tree.py | 128 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 156 insertions(+), 15 deletions(-) create mode 100644 binary_tree.py diff --git a/binary_tree.md b/binary_tree.md index 1baddbc..7d73002 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -23,14 +23,14 @@ class Node: ''' ... ''' - def insert(self, data): + def insert(self, data): if data < self.data: # 树叉小于节点 if self.left is None: # 并且左面的树叉为空 self.left = Node(data) # 当仁不让的插入 else: # 非空的话 self.left.insert(data) # 以左树叉为节点继续插入 - elif data > self.data: + elif data > self.data: if self.right is None: self.right = Node(data) else: @@ -48,16 +48,16 @@ class Node: ''' data为目标查询值,同时返回parent(父节点)便于定位。 ''' - if data < self.data: + if data < self.data: if self.left is None: return None, None else: return self.left.search(data, self) - + elif data > self.data: if self.right is None: return None, None - + return self.right.search(data, self) else: # return self.data, parent.data @@ -73,6 +73,14 @@ class Node: self.right.print_tree() ``` +树的遍历又分为以下三种: + +1. 前序(root -> left -> right) +2. 中序(left -> root -> right) +3. 后序(left -> right -> root) + +调整`print_tree`函数里 `print(self.data)` 的顺序即可实现三种遍历方式。 + 转眼间小树苗涨的太旺盛了,疯涨啊!!怎么办呢,剪几个枝吧。别怪我哦,小树苗! 删除节点时,有三种可能的情况: @@ -104,16 +112,16 @@ class Node: ``` def delete(self, data): - node, parent = self.search(data) + node, parent = self.search(data) chrildren = node.chrildren() # 子节点数目 - if chrildren == 0: # 情况 1 + if chrildren == 0: # 情况 1, 没有子节点,直接删除即可 if parent.left is node: # 判断目标节点是其父节点的 左or右 节点 parent.left = None else: parent.right = None del node - elif chrildren == 1: # 情况 2 + elif chrildren == 1: # 情况 2, 有一个子节点,用子节点替换其即可 if node.left: tmp = node.left else: @@ -124,23 +132,23 @@ class Node: else: parent.right = tmp del node - else: # 情况 3 没看太懂,过两天再看吧 + else: ''' - 第三种情况比较复杂 + 第三种情况比较复杂: 1. 左节点0个子节点 2. 左节点1个子节点 3. 左节点2个子节点 ''' parent = node - successor = node.left - while successor.left: + successor = node.right + while successor.left: # 递归思想,直至找到'最左'的子节点, 保持树的平衡,用右子节点的值替换 parent = successor successor = successor.left node.data = successor.data - if parent.left = successor: + if parent.left == successor: parent.left = successor.right else: - parent.left = successor.right + parent.right = successor.right # 接下来可以测试以下种的树怎么样啦。 @@ -164,5 +172,10 @@ root.print_tree() ``` 把自己理解的部分写了写。当做练习,就先当个α版吧。 - `2016-05-28` +--- +更新 +--- +基本搞明白了 +完整代码[在这里]() +`2017-03-22` diff --git a/binary_tree.py b/binary_tree.py new file mode 100644 index 0000000..876a35b --- /dev/null +++ b/binary_tree.py @@ -0,0 +1,128 @@ +class Node: + + def __init__(self, data): + self.left = None + self.right = None + self.data = data + + def insert(self, data): + if data < self.data: # 树叉小于节点 + if self.left is None: # 并且左面的树叉为空 + self.left = Node(data) # 当仁不让的插入 + else: # 非空的话 + self.left.insert(data) # 以左树叉为节点继续插入 + + elif data > self.data: + if self.right is None: + self.right = Node(data) + else: + self.right.insert(data) + else: + self.data = data + + def search(self, data, parent=None): + ''' + data为目标查询值,同时返回parent(父节点)便于定位。 + ''' + if data < self.data: + if self.left is None: + return None, None + else: + return self.left.search(data, self) + + elif data > self.data: + if self.right is None: + return None, None + + return self.right.search(data, self) + else: + # return self.data, parent.data + return self, parent + + def print_tree_in(self): # 中序 + if self.left: + self.left.print_tree_in() + print(self.data) + if self.right: + self.right.print_tree_in() + + def print_tree_pre(self): # 前序 + print(self.data) + if self.left: + self.left.print_tree_pre() + if self.right: + self.right.print_tree_pre() + + def print_tree_post(self): # 后序 + if self.left: + self.left.print_tree_post() + if self.right: + self.right.print_tree_post() + print(self.data) + + def chrildren(self): + count = 0 + if self.left: + count += 1 + + if self.right: + count += 1 + + return count + + def delete(self, data): + node, parent = self.search(data) + chrildren = node.chrildren() # 子节点数目 + if chrildren == 0: # 情况 1, 没有子节点,直接删除即可 + if parent.left is node: # 判断目标节点是其父节点的 左or右 节点 + parent.left = None + else: + parent.right = None + del node + + elif chrildren == 1: # 情况 2, 有一个子节点,用子节点替换其即可 + if node.left: + tmp = node.left + else: + tmp = node.right + if parent: + if parent.left is node: + parent.left = tmp + else: + parent.right = tmp + del node + else: + ''' + 第三种情况比较复杂: + 1. 左节点0个子节点 + 2. 左节点1个子节点 + 3. 左节点2个子节点 + ''' + parent = node + successor = node.right + while successor.left: # 递归思想,直至找到最左的子节点, 保持树的平衡,用右子节点的值替换 + parent = successor + successor = successor.left + node.data = successor.data + if parent.left == successor: + parent.left = successor.right + else: + parent.right = successor.right + +# 接下来可以测试以下种的树怎么样啦。 +root = Node(11) +root.insert(14) +root.insert(9) +root.insert(9) +root.insert(7) +root.insert(10) +root.insert(4) +root.insert(5) +root.insert(6) +root.insert(8) +value, parent = root.search(10) +print(value.data, parent.data) +root.print_tree_in() +print('*' * 20) +root.delete(4) +root.print_tree_in() From 19c2f589bd216aa6c14eaec7e9cec11be9b5662c Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 14:42:40 +0800 Subject: [PATCH 23/68] modify binary_tree.md --- binary_tree.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/binary_tree.md b/binary_tree.md index 7d73002..140f608 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -177,5 +177,5 @@ root.print_tree() 更新 --- 基本搞明白了 -完整代码[在这里]() +完整代码[在这里](https://github.com/lambdaplus/python/blob/master/binary_tree.py) `2017-03-22` From 6487bffd6c3828e29ac60087df79967eb01a445a Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 14:47:02 +0800 Subject: [PATCH 24/68] modify binary_tree.md --- binary_tree.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/binary_tree.md b/binary_tree.md index 140f608..f56fbb2 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -1,8 +1,3 @@ ---- -title: 二叉树 -date: 2016-09-23 15:32:24 -tags: Algorithm ---- 畏惧了好久的二叉树,终于在近两天开搞了。二分法查找已在前几天完成,磨刀霍霍向猪羊,吼吼吼! 何为二叉树?按照我目前的理解就是类似于发叉的树,树干上发两个叉或者一个(不发叉的树真不到有何用处),发叉的地方称为**节点**。然后发的两个叉又可以继续像树干一样发叉,新发的叉有可以继续发叉,子又生子,孙又生孙,无穷尽也!但是**树的左边的叉的值小于节点值,右边的大于节点值**。 @@ -173,9 +168,10 @@ root.print_tree() 把自己理解的部分写了写。当做练习,就先当个α版吧。 `2016-05-28` + --- -更新 +更新 `2017-03-22` --- + 基本搞明白了 完整代码[在这里](https://github.com/lambdaplus/python/blob/master/binary_tree.py) -`2017-03-22` From f9e45961c352e560c28540c59beef05e937e0e3a Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 22 Mar 2017 18:02:45 +0800 Subject: [PATCH 25/68] update binary_tree --- binary_tree.md | 210 ++++++++++++++++++++++++++++++------------------- 1 file changed, 129 insertions(+), 81 deletions(-) diff --git a/binary_tree.md b/binary_tree.md index f56fbb2..567806b 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -1,10 +1,13 @@ -畏惧了好久的二叉树,终于在近两天开搞了。二分法查找已在前几天完成,磨刀霍霍向猪羊,吼吼吼! -何为二叉树?按照我目前的理解就是类似于发叉的树,树干上发两个叉或者一个(不发叉的树真不到有何用处),发叉的地方称为**节点**。然后发的两个叉又可以继续像树干一样发叉,新发的叉有可以继续发叉,子又生子,孙又生孙,无穷尽也!但是**树的左边的叉的值小于节点值,右边的大于节点值**。 +--- +更新 `2017-03-22` +--- -本文参考: -[老齐的Github](https://github.com/qiwsir/algorithm/blob/master/binary_tree.md) +畏惧了好久的二叉树,终于在近两天开搞了。二分法查找已在前几天完成,磨刀霍霍向猪羊,吼吼吼! 何为二叉树?按照我目前的理解就是类似于发叉的树,树干上发两个叉或者一个(不发叉的树真不到有何用处),发叉的地方称为**节点**。然后发的两个叉又可以继续像树干一样发叉,新发的叉有可以继续发叉,子又生子,孙又生孙,无穷尽也!但是**树的左边的叉的值小于节点值,右边的大于节点值**。 + +本文参考: [老齐的Github](https://github.com/qiwsir/algorithm/blob/master/binary_tree.md) 首先,建立一棵树。 + ```python class Node: def __init__(self, data): @@ -12,7 +15,9 @@ class Node: self.right = None self.data = data ``` + 这样,光秃秃的小树苗就种好了。接着就是茁长生长啦。浇水去喽! + ```python class Node: ''' @@ -33,7 +38,9 @@ class Node: else: self.data = data ``` + 浇完水后,小树苗噌噌的往上窜啊。 + ```python class Node: ''' @@ -55,19 +62,21 @@ class Node: return self.right.search(data, self) else: - # return self.data, parent.data + # return self.data, parent.data return self, parent ``` + 树苗生长的那么好,想看看每个叉上都是啥呀,来来来,抬头往上看((其实是往下看啦)。 + ```python - def print_tree(self): +def print_tree(self): if self.left: self.left.print_tree() print(self.data) if self.right: self.right.print_tree() - ``` + 树的遍历又分为以下三种: 1. 前序(root -> left -> right) @@ -76,102 +85,141 @@ class Node: 调整`print_tree`函数里 `print(self.data)` 的顺序即可实现三种遍历方式。 -转眼间小树苗涨的太旺盛了,疯涨啊!!怎么办呢,剪几个枝吧。别怪我哦,小树苗! -删除节点时,有三种可能的情况: +转眼间小树苗涨的太旺盛了,疯涨啊!!怎么办呢,剪几个枝吧。别怪我哦,小树苗! 删除节点时,有三种可能的情况: 1. 目标节点下没有任何节点(0个) 2. 目标节点下有一个节点 3. 目标节点下有两个节点 判断节点数目程序如下: + ```python class Node: - ``` - 省略代码 - ``` - def chrildren(self): - count = 0 - if self.left: - count += 1 - - if self.right: - count += 1 - - return count +''' +省略代码 +''' +def chrildren(self): + count = 0 + if self.left: + count += 1 + + if self.right: + count += 1 + + return count ``` + 接下来就是删除操作啦。哦吼吼。 + ```python class Node: - ``` - 省略 - ``` - - def delete(self, data): - node, parent = self.search(data) - chrildren = node.chrildren() # 子节点数目 - if chrildren == 0: # 情况 1, 没有子节点,直接删除即可 - if parent.left is node: # 判断目标节点是其父节点的 左or右 节点 - parent.left = None - else: - parent.right = None - del node +''' +省略 +''' + +def delete(self, data): + node, parent = self.search(data) + chrildren = node.chrildren() # 子节点数目 + if chrildren == 0: # 情况 1, 没有子节点,直接删除即可 + if parent.left is node: # 判断目标节点是其父节点的 左or右 节点 + parent.left = None + else: + parent.right = None + del node - elif chrildren == 1: # 情况 2, 有一个子节点,用子节点替换其即可 - if node.left: - tmp = node.left - else: - tmp = node.right - if parent: - if parent.left is node: - parent.left = tmp - else: - parent.right = tmp - del node + elif chrildren == 1: # 情况 2, 有一个子节点,用子节点替换其即可 + if node.left: + tmp = node.left else: - ''' - 第三种情况比较复杂: - 1. 左节点0个子节点 - 2. 左节点1个子节点 - 3. 左节点2个子节点 - ''' - parent = node - successor = node.right - while successor.left: # 递归思想,直至找到'最左'的子节点, 保持树的平衡,用右子节点的值替换 - parent = successor - successor = successor.left - node.data = successor.data - if parent.left == successor: - parent.left = successor.right + tmp = node.right + if parent: + if parent.left is node: + parent.left = tmp else: - parent.right = successor.right - + parent.right = tmp + del node + else: + ''' + 第三种情况比较复杂: + 1\. 左节点0个子节点 + 2\. 左节点1个子节点 + 3\. 左节点2个子节点 + ''' + parent = node + successor = node.right + while successor.left: # 递归思想,直至找到'最左'的子节点, 保持树的平衡,用右子节点的值替换 + parent = successor + successor = successor.left + node.data = successor.data + if parent.left == successor: + parent.left = successor.right + else: + parent.right = successor.right # 接下来可以测试以下种的树怎么样啦。 -root = Node(11) -root.insert(14) -root.insert(9) -root.insert(9) -root.insert(7) -root.insert(10) -root.insert(4) -root.insert(5) -root.insert(6) -root.insert(8) -value, parent = root.search(10) -print(value.data, parent.data) -root.print_tree() -print('*' * 20) -root.delete(4) -root.print_tree() -``` +root = Node(11) root.insert(14) root.insert(9) root.insert(9) root.insert(7) root.insert(10) root.insert(4) root.insert(5) root.insert(6) root.insert(8) value, parent = root.search(10) print(value.data, parent.data) root.print_tree() print('_'_ 20) root.delete(4) root.print_tree() +``` 把自己理解的部分写了写。当做练习,就先当个α版吧。 `2016-05-28` ---- -更新 `2017-03-22` ---- 基本搞明白了 完整代码[在这里](https://github.com/lambdaplus/python/blob/master/binary_tree.py) + +### 广度遍历和深度遍历二叉树! + +```python +def lookup(root): + stack = [root] + while stack: + current = stack.pop() + print(current.data) + if current.left: + stack.append(current.left) + if current.right: + stack.append(current.right) + + +def deep(root): + if not root: + return + deep(root.left) + deep(root.right) + print(root.data) +``` + +### 比较两棵树是否相同 + +```python +def is_same(t1, t2): + if t1 == None and t2 == None: + return True + elif t1 and t2: + return t1.data == t2.data and is_same(t1.left, t2.left)\ + and is_same(t1.right, t2.right) + else: + return False +``` + +### 已知前序中序求后序 + +前面说到: +前序: root -> left -> right +中序: left -> root -> right +后序: left -> right -> root + +前序: 第一个值 A 即为根节点 +中序: A 的左边全为左子树,右边全是右子树 + +```python +def pre_in_post(pre_order, in_order): + if not pre_order: + return + post = Node(pre_order[0]) + index = in_order.index(pre_order[0]) + post.left = pre_in_post(pre_order[1:index+1], in_order[:index]) + post.right = pre_in_post(pre_order[index+1:], in_order[index+1:]) + return post +``` From 4c122c6f927b3b133df1bae9e91ccd03ecdaddf6 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 23 Mar 2017 15:26:02 +0800 Subject: [PATCH 26/68] add celery_learning.md --- celery_learn.md | 349 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 349 insertions(+) create mode 100644 celery_learn.md diff --git a/celery_learn.md b/celery_learn.md new file mode 100644 index 0000000..ff5bcb2 --- /dev/null +++ b/celery_learn.md @@ -0,0 +1,349 @@ +# Celery 的简单使用 + +标签(空格分隔): python celery + +-------------------------------------------------------------------------------- + +** Celery 是一个简单、灵活并且可靠的处理大量消息的分发系统。并且是自带电池的,本身提供了维护和操作这个系统的工具。** + +Celery 专注于实时处理的任务队列,并且支持任务调度。 优点: + +1. 简单 +2. 高可用 +3. 快速 +4. 灵活 + +## Celery 架构 + +- Celery Beat: 任务调度器 +- Celery Worker: 消费者 +- Broker: 消息中间件,常用的是 RabbitMQ 和 Redis +- Producer:任务生产者 +- Result Backend:用于结果保存。 + +## Celery 序列化 + +## 一个简单的简单例子 + +项目目录为 + +```bash +celeries/proj/ +├── celeryconfig.py +├── celery.py +├── __init__.py +└── tasks.py +``` + +-------------------------------------------------------------------------------- + +主程序 celery.py + +```python +from __future__ import absolute_import +from celery import Celery + +app = Celery('proj', include=['proj.tasks'], +app.config_from_object('proj.celeryconfig') + + +if __name__ == "main": + app.start() +``` + +任务函数 tasks.py + +```python +# coding=utf-8 +from __future__ import absolute_import + +from .celery import app + + +@app.task +def add(x, y): + return x + y + + +@app.task +def mul(x, y): + return x * y +``` + +接下来是 配置文件 celeryconfig.py + +```python +# coding=utf-8 +BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 +CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # Redis 作为结果存储 +CELERY_TASK_SERIALIZER = 'msgpack' +# 任务序列化和反序列化格式为 msgpack, 别忘了安装 msgpack-python +CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json +CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 +``` + +因为没有任务调度,所以直接启动消费者就行了。在启动之前,要先去安装 RabbitMQ 和 Redis, 并启动。 + +现在启动我们的消费者函数, 命令行直接启动: + +``` +> cd celeries +> celery -A celeries worker -l info +``` + +看到下面的提示信息,表示成功启动 + +```python +-------------- celery@mouse-pc v4.0.2 (latentcall) +---- **** ----- +--- * *** * -- Linux-4.9.15-1-MANJARO-x86_64-with-glibc2.2.5 2017-03-22 21:53:05 +-- * - **** --- +- ** ---------- [config] +- ** ---------- .> app: celeries:0x7f9737da7a58 +- ** ---------- .> transport: amqp://guest:**@localhost:5672// +- ** ---------- .> results: redis://localhost/ +- *** --- * --- .> concurrency: 2 (prefork) +-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) +--- ***** ----- + -------------- [queues] + .> celery exchange=celery(direct) key=celery + + +[tasks] + . celeries.tasks.add + . celeries.tasks.mul + . celeries.tasks.xsum + +[2017-03-22 21:53:06,011: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672// +[2017-03-22 21:53:06,034: INFO/MainProcess] mingle: searching for neighbors +[2017-03-22 21:53:07,088: INFO/MainProcess] mingle: all alone +[2017-03-22 21:53:07,115: INFO/MainProcess] celery@mouse-pc ready. +``` + +打开 IPython 测试一下我们的几个函数。 + +```python +~ ▶︎︎ ipython +Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 12:22:00) +Type "copyright", "credits" or "license" for more information. + + +In [1]: from celeries.tasks import add, mul, xsum + +In [2]: add.delay(1, 9) +Out[2]: +In [3]: r = mul.delay(2, 4) + +In [4]: r.status +Out[4]: 'SUCCESS' + +In [5]: r.result +Out[5]: 8 + +In [6]: r.successful +Out[6]: > + +In [7]: r.backend +Out[7]: # 结果存储在 redis 里 +``` + +delay() 是 apply_async() 的快捷方式。你也直接调用 apply_async() : + +```python +In [24]: r = mul.apply_async((2, 4)) + +In [25]: r.result +Out[25]: 8 +``` + +delay() & apply_async 返回的都是 AsyncResult 实例,可用于查看任务的执行状态,但首先你要配置好 result backend. 此时,在worker终端上可以看到,任务信息和结果 + +```bash +[2017-03-22 22:05:13,689: INFO/MainProcess] Received task: celeries.tasks.add[38022eec-2d3d-4ee0-8c7e-367ef92b5f1f] +[2017-03-22 22:05:14,765: INFO/PoolWorker-2] Task celeries.tasks.add[38022eec-2d3d-4ee0-8c7e-367ef92b5f1f] succeeded in 0.007736653999018017s: 10 +[2017-03-22 22:08:36,378: INFO/MainProcess] Received task: celeries.tasks.mul[17af4e48-736d-44c9-a8be-a50a35bbc435] +[2017-03-22 22:08:37,010: INFO/PoolWorker-2] Task celeries.tasks.mul[17af4e48-736d-44c9-a8be-a50a35bbc435] succeeded in 0.011531784999533556s: 8 +``` + +仔细看,每个任务都有一个 task_id。我们可以通过 task_id 获得任务的结果。 + +取 add 任务的 id: + +```bash +task_id = '38022eec-2d3d-4ee0-8c7e-367ef92b5f1f' +In [8]: task_id = '38022eec-2d3d-4ee0-8c7e-367ef92b5f1f' + +In [9]: add.AsyncResult(task_id).get() +Out[9]: 10 +``` + +**关联任务** + +``` +In [2]: m = mul.apply_async((2, 2), link=mul.s(3)) +``` + +在 Worker 终端里会看到两个值,关联之前和之后的。 + +``` +[2017-03-23 13:27:13,045: INFO/MainProcess] Received task: proj.tasks.mul[40492357-44bb-41e4-979f-6eb197107a5b] +[2017-03-23 13:27:13,731: INFO/PoolWorker-2] Task proj.tasks.mul[40492357-44bb-41e4-979f-6eb197107a5b] succeeded in 0.0023383530005958164s: 4 +[2017-03-23 13:27:13,732: INFO/MainProcess] Received task: proj.tasks.mul[b01be1b8-f957-48b2-9d72-8187af6ac161] +[2017-03-23 13:27:13,734: INFO/PoolWorker-2] Task proj.tasks.mul[b01be1b8-f957-48b2-9d72-8187af6ac161] succeeded in 0.0006868359996587969s: 12 +``` + +## 指定队列 + +在 celeries 目录下新建一个目录 projb, 代码使用 proj 中的。 + +```bash +celeries/projb +├── celeryconfig.py +├── celery.py +├── __init__.py +└── tasks.py +``` + +在 celeryconfig.py 添加些配置: + +``` +# coding=utf-8 +from kombu import Queue + +BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 +CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # Redis 作为结果存储 +CELERY_TASK_SERIALIZER = 'msgpack' +# 任务序列化和反序列化格式为 msgpack, 别忘了安装 msgpack-python +CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json +CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 + +CELERY_QUEUES = { + Queue('foo', routing_key='task.#'), # 路由键以 task. 开头的消息进入此队列 + Queue('feed_task', routing_key='*.feed'), # 路由键以 .feed 结尾的消息进入此队列 +} +CELERY_DEFAULT_QUEUE = 'foo' # 默认队列 + +CELERY_DEFAULT_EXCHANGE = 'tasks' # 默认交换机 + +CELERY_DEFAULT_EXCHANGE_TYPE = 'topic' # 默认交换机类型 topic + +CELERY_DEFAULT_ROUTING_KEY = 'task.foooooooo' # 默认交换机路由键, task. 后的值不影响 + +CELERY_ROUTES = { + 'projb.tasks.mul': { + 'queue': 'feed_task', # 消息全都进入 feed_task 队列 + 'routing_key': 'mul.feed', + }, +} +``` + +然后,我们以指定队列的方式启动: + +``` +> celery -A projb worker -Q foo,feed_task -l info +``` + +tasks.py 中的 mul 函数只会通过队列 feed_task 被执行。add 函数通过默认队列 foo 执行。 + +```python +In [84]: from projb.tasks import mul, add + +In [85]: r = add.delay(3, 3) + +In [86]: r.result +Out[86]: 6 + +In [87]: res = mul.delay(3, 3) + +In [88]: res.result +Out[88]: 9 +``` + +不过,我们可以使用 apply_async() 函数来指定队列。 + +```python +In [90]: r = add.apply_async((3, 3), queue='feed_task', routing_key='mul.feed') + +In [91]: r.result +Out[91]: 6 + +In [92]: res = mul.apply_async((3, 3), queue='foo', routing_key='task.foooooo') + +In [93]: res.result +Out[93]: 9 +``` + +## 任务调度 + +依法炮制,基于 projb 的代码,创建目录 projc,在 proc/celeryconfig.py 中添加如下配置。 + +``` +CELERYBEAT_SCHEDULE = { + 'mul-every-30-seconds': { + 'task': 'projc.tasks.mul', + 'schedule': 30.0, + 'args': (2, 2), + } +} +``` + +执行 + +``` +> celery -B -A projc worker -l info +``` + +就可以在终端看到每 30s 执行一次任务。 + +``` +[2017-03-23 12:23:13,920: INFO/Beat] Scheduler: Sending due task mul-every-30-seconds (projc.tasks.mul) +[2017-03-23 12:23:13,923: INFO/MainProcess] Received task: projc.tasks.mul[9c414257-d627-4c36-a9d8-9daed7e295c0] +[2017-03-23 12:23:15,177: INFO/PoolWorker-3] Task projc.tasks.mul[9c414257-d627-4c36-a9d8-9daed7e295c0] succeeded in 0.0010301589991286164s: 4 +``` + +## 任务绑定、日志记录和错误重试 + +任务绑定、记录日志和重试是 Celery 3 个常用的高级功能。接下来,修改 proj 的 tasks.py 文件。添加一个 div 函数。 + +``` +@app.task(bind=True) +def div(self, x, y): + logger.info( + ''' + Executing task : {0.id} + task.args : {0.args!r} + task.kwargs : {0.kwargs!r} + '''.format(self.request) + ) + try: + res = x / y + except ZeroDivisionError as e: + raise self.retry(exc=e, countdown=3, max_retries=3) + else: + return res +``` + +在 Ipython 调用: + +``` +In [3]: d = div.delay(2, 1) +``` + +在 worker 中可以看到 + +``` +[2017-03-23 14:57:17,361: INFO/PoolWorker-2] proj.tasks.div[68ef1584-16ac-4236-9858-b00842891bbc]: + Executing task : 68ef1584-16ac-4236-9858-b00842891bbc + task.args : [2, 1] + task.kwargs : {} + +[2017-03-23 14:57:17,369: INFO/PoolWorker-2] Task proj.tasks.div[68ef1584-16ac-4236-9858-b00842891bbc] succeeded in 0.007741746998362942s: 2.0 +``` + +换成可以引起异常的参数: + +``` +In [4]: d = div.delay(2, 0) +``` + +可以看到,在 worker 中每 3s 重试一次,总共重复三次(执行了 4 次),然后抛出异常! From 9be10d8297d1c5bf95e8cee4f4c0bf6b8f92e2d4 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 23 Mar 2017 15:29:39 +0800 Subject: [PATCH 27/68] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8027797..ace0216 100644 --- a/README.md +++ b/README.md @@ -7,3 +7,4 @@ 6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) 8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) +9. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) From 66a25660706b9a31e93ab67bf8ecd0df3d26f06e Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 23 Mar 2017 15:40:02 +0800 Subject: [PATCH 28/68] add celeries --- .gitignore | 4 ++++ celeries/proj/__init__.py | 0 celeries/proj/celery.py | 10 +++++++++ celeries/proj/celeryconfig.py | 7 +++++++ celeries/proj/tasks.py | 35 ++++++++++++++++++++++++++++++++ celeries/projb/__init__.py | 0 celeries/projb/celery.py | 10 +++++++++ celeries/projb/celeryconfig.py | 28 +++++++++++++++++++++++++ celeries/projb/tasks.py | 14 +++++++++++++ celeries/projc/__init__.py | 0 celeries/projc/celery.py | 10 +++++++++ celeries/projc/celeryconfig.py | 37 ++++++++++++++++++++++++++++++++++ celeries/projc/tasks.py | 14 +++++++++++++ 13 files changed, 169 insertions(+) create mode 100644 celeries/proj/__init__.py create mode 100644 celeries/proj/celery.py create mode 100644 celeries/proj/celeryconfig.py create mode 100644 celeries/proj/tasks.py create mode 100644 celeries/projb/__init__.py create mode 100644 celeries/projb/celery.py create mode 100644 celeries/projb/celeryconfig.py create mode 100644 celeries/projb/tasks.py create mode 100644 celeries/projc/__init__.py create mode 100644 celeries/projc/celery.py create mode 100644 celeries/projc/celeryconfig.py create mode 100644 celeries/projc/tasks.py diff --git a/.gitignore b/.gitignore index 37fc9d4..00f0cc6 100644 --- a/.gitignore +++ b/.gitignore @@ -88,3 +88,7 @@ ENV/ # Rope project settings .ropeproject +# celery-beat +*.bak +*.dat +*.dir diff --git a/celeries/proj/__init__.py b/celeries/proj/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/celeries/proj/celery.py b/celeries/proj/celery.py new file mode 100644 index 0000000..acd9617 --- /dev/null +++ b/celeries/proj/celery.py @@ -0,0 +1,10 @@ +# coding=utf-8 +from __future__ import absolute_import +from celery import Celery + +app = Celery('proj', include=['proj.tasks']) +app.config_from_object('proj.celeryconfig') + + +if __name__ == '__main__': + app.start() diff --git a/celeries/proj/celeryconfig.py b/celeries/proj/celeryconfig.py new file mode 100644 index 0000000..864e2f0 --- /dev/null +++ b/celeries/proj/celeryconfig.py @@ -0,0 +1,7 @@ +# coding=utf-8 +BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 +CELERY_RESULT_BACKEND = 'redis://localhost' # Redis 作为结果存储 +CELERY_TASK_SERIALIZER = 'msgpack' +# 任务序列化和反序列化格式为 msgpack, 别忘了安装 msgpack-python +CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json +CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 diff --git a/celeries/proj/tasks.py b/celeries/proj/tasks.py new file mode 100644 index 0000000..16d3ccb --- /dev/null +++ b/celeries/proj/tasks.py @@ -0,0 +1,35 @@ +# coding=utf-8 +from __future__ import absolute_import + +from .celery import app + +from celery.utils.log import get_task_logger + +logger = get_task_logger(__name__) + + +@app.task +def add(x, y): + return x + y + + +@app.task +def mul(x, y): + return x * y + + +@app.task(bind=True) +def div(self, x, y): + logger.info( + ''' + Executing task : {0.id} + task.args : {0.args!r} + task.kwargs : {0.kwargs!r} + '''.format(self.request) + ) + try: + res = x / y + except ZeroDivisionError as e: + raise self.retry(exc=e, countdown=3, max_retries=3) + else: + return res diff --git a/celeries/projb/__init__.py b/celeries/projb/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/celeries/projb/celery.py b/celeries/projb/celery.py new file mode 100644 index 0000000..fb02e54 --- /dev/null +++ b/celeries/projb/celery.py @@ -0,0 +1,10 @@ +# coding=utf-8 +from __future__ import absolute_import +from celery import Celery + +app = Celery('projb', include=['projb.tasks']) +app.config_from_object('projb.celeryconfig') + + +if __name__ == '__main__': + app.start() diff --git a/celeries/projb/celeryconfig.py b/celeries/projb/celeryconfig.py new file mode 100644 index 0000000..d661cc5 --- /dev/null +++ b/celeries/projb/celeryconfig.py @@ -0,0 +1,28 @@ +# coding=utf-8 +from kombu import Queue + +BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 +CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # Redis 作为结果存储 +CELERY_TASK_SERIALIZER = 'msgpack' +# 任务序列化和反序列化格式为 msgpack, 别忘了安装 msgpack-python +CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json +CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 + +CELERY_QUEUES = { + Queue('foo', routing_key='task.#'), + Queue('feed_task', routing_key='*.feed'), +} +CELERY_DEFAULT_QUEUE = 'foo' + +CELERY_DEFAULT_EXCHANGE = 'tasks' + +CELERY_DEFAULT_EXCHANGE_TYPE = 'topic' + +CELERY_DEFAULT_ROUTING_KEY = 'task.foooooo' + +CELERY_ROUTES = { + 'projb.tasks.mul': { + 'queue': 'feed_task', + 'routing_key': 'mul.feed', + }, +} diff --git a/celeries/projb/tasks.py b/celeries/projb/tasks.py new file mode 100644 index 0000000..9b7d2a7 --- /dev/null +++ b/celeries/projb/tasks.py @@ -0,0 +1,14 @@ +# coding=utf-8 +from __future__ import absolute_import + +from .celery import app + + +@app.task +def add(x, y): + return x + y + + +@app.task +def mul(x, y): + return x * y diff --git a/celeries/projc/__init__.py b/celeries/projc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/celeries/projc/celery.py b/celeries/projc/celery.py new file mode 100644 index 0000000..125ef95 --- /dev/null +++ b/celeries/projc/celery.py @@ -0,0 +1,10 @@ +# coding=utf-8 +from __future__ import absolute_import +from celery import Celery + +app = Celery('projc', include=['projc.tasks']) +app.config_from_object('projc.celeryconfig') + + +if __name__ == '__main__': + app.start() diff --git a/celeries/projc/celeryconfig.py b/celeries/projc/celeryconfig.py new file mode 100644 index 0000000..1cf48ff --- /dev/null +++ b/celeries/projc/celeryconfig.py @@ -0,0 +1,37 @@ +# coding=utf-8 +from kombu import Queue + +BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 +CELERY_RESULT_BACKEND = 'redis://localhost:6379/0' # Redis 作为结果存储 +CELERY_TASK_SERIALIZER = 'msgpack' +# 任务序列化和反序列化格式为 msgpack, 别忘了安装 msgpack-python +CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json +CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 + +CELERY_QUEUES = { + Queue('foo', routing_key='task.#'), + Queue('feed_task', routing_key='*.feed'), +} +CELERY_DEFAULT_QUEUE = 'foo' + +CELERY_DEFAULT_EXCHANGE = 'tasks' + +CELERY_DEFAULT_EXCHANGE_TYPE = 'topic' + +CELERY_DEFAULT_ROUTING_KEY = 'task.foooooo' + +CELERY_ROUTES = { + 'projb.tasks.mul': { + 'queue': 'feed_task', + 'routing_key': 'mul.feed', + }, + +} + +CELERYBEAT_SCHEDULE = { + 'mul-every-30-seconds': { + 'task': 'projc.tasks.mul', + 'schedule': 30.0, + 'args': (2, 2), + } +} diff --git a/celeries/projc/tasks.py b/celeries/projc/tasks.py new file mode 100644 index 0000000..9b7d2a7 --- /dev/null +++ b/celeries/projc/tasks.py @@ -0,0 +1,14 @@ +# coding=utf-8 +from __future__ import absolute_import + +from .celery import app + + +@app.task +def add(x, y): + return x + y + + +@app.task +def mul(x, y): + return x * y From 0088a660355ab9bc998e7a0d5703c5ed6f8022b7 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 23 Mar 2017 15:44:25 +0800 Subject: [PATCH 29/68] update it --- celery_learn.md | 128 +++++++++++++++++------------------------------- 1 file changed, 44 insertions(+), 84 deletions(-) diff --git a/celery_learn.md b/celery_learn.md index ff5bcb2..f8c8b84 100644 --- a/celery_learn.md +++ b/celery_learn.md @@ -1,13 +1,15 @@ -# Celery 的简单使用 +# Celery 的简单使用 -标签(空格分隔): python celery +标签: python celery --------------------------------------------------------------------------------- +--- +***代码[在这里](https://github.com/lambdaplus/python/tree/master/celeries)*** -** Celery 是一个简单、灵活并且可靠的处理大量消息的分发系统。并且是自带电池的,本身提供了维护和操作这个系统的工具。** -Celery 专注于实时处理的任务队列,并且支持任务调度。 优点: +Celery 是一个简单、灵活并且可靠的处理大量消息的分发系统。并且是自带电池的,本身提供了维护和操作这个系统的工具。 +Celery 专注于实时处理的任务队列,并且支持任务调度。 +优点: 1. 简单 2. 高可用 3. 快速 @@ -15,18 +17,18 @@ Celery 专注于实时处理的任务队列,并且支持任务调度。 优点 ## Celery 架构 -- Celery Beat: 任务调度器 -- Celery Worker: 消费者 -- Broker: 消息中间件,常用的是 RabbitMQ 和 Redis -- Producer:任务生产者 -- Result Backend:用于结果保存。 ++ Celery Beat: 任务调度器 ++ Celery Worker: 消费者 ++ Broker: 消息中间件,常用的是 RabbitMQ 和 Redis ++ Producer:任务生产者 ++ Result Backend:用于结果保存。 ## Celery 序列化 -## 一个简单的简单例子 -项目目录为 +## 一个简单的简单例子 +项目目录为 ```bash celeries/proj/ ├── celeryconfig.py @@ -34,11 +36,8 @@ celeries/proj/ ├── __init__.py └── tasks.py ``` - --------------------------------------------------------------------------------- - +--- 主程序 celery.py - ```python from __future__ import absolute_import from celery import Celery @@ -51,8 +50,8 @@ if __name__ == "main": app.start() ``` -任务函数 tasks.py +任务函数 tasks.py ```python # coding=utf-8 from __future__ import absolute_import @@ -69,9 +68,7 @@ def add(x, y): def mul(x, y): return x * y ``` - 接下来是 配置文件 celeryconfig.py - ```python # coding=utf-8 BROKER_URL = 'amqp://localhost' # RabbitMQ 作为消息代理 @@ -81,33 +78,29 @@ CELERY_TASK_SERIALIZER = 'msgpack' CELERY_RESULT_SERIALIZER = 'json' # 结果存储序列化格式为 json CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 ``` - 因为没有任务调度,所以直接启动消费者就行了。在启动之前,要先去安装 RabbitMQ 和 Redis, 并启动。 现在启动我们的消费者函数, 命令行直接启动: -``` -> cd celeries -> celery -A celeries worker -l info -``` + > cd celeries + > celery -A celeries worker -l info 看到下面的提示信息,表示成功启动 - ```python --------------- celery@mouse-pc v4.0.2 (latentcall) ----- **** ----- + -------------- celery@mouse-pc v4.0.2 (latentcall) +---- **** ----- --- * *** * -- Linux-4.9.15-1-MANJARO-x86_64-with-glibc2.2.5 2017-03-22 21:53:05 --- * - **** --- +-- * - **** --- - ** ---------- [config] - ** ---------- .> app: celeries:0x7f9737da7a58 - ** ---------- .> transport: amqp://guest:**@localhost:5672// - ** ---------- .> results: redis://localhost/ - *** --- * --- .> concurrency: 2 (prefork) -- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker) ---- ***** ----- +--- ***** ----- -------------- [queues] .> celery exchange=celery(direct) key=celery - + [tasks] . celeries.tasks.add @@ -119,12 +112,10 @@ CELERY_ACCEPT_CONTENT = ['msgpack', 'json'] # 任务接受格式类型 [2017-03-22 21:53:07,088: INFO/MainProcess] mingle: all alone [2017-03-22 21:53:07,115: INFO/MainProcess] celery@mouse-pc ready. ``` - 打开 IPython 测试一下我们的几个函数。 - ```python ~ ▶︎︎ ipython -Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 12:22:00) +Python 3.6.0 |Anaconda 4.3.1 (64-bit)| (default, Dec 23 2016, 12:22:00) Type "copyright", "credits" or "license" for more information. @@ -145,30 +136,26 @@ Out[6]: # 结果存储在 redis 里 -``` +``` delay() 是 apply_async() 的快捷方式。你也直接调用 apply_async() : - ```python In [24]: r = mul.apply_async((2, 4)) In [25]: r.result Out[25]: 8 ``` - -delay() & apply_async 返回的都是 AsyncResult 实例,可用于查看任务的执行状态,但首先你要配置好 result backend. 此时,在worker终端上可以看到,任务信息和结果 - +delay() & apply_async 返回的都是 AsyncResult 实例,可用于查看任务的执行状态,但首先你要配置好 result backend. +此时,在worker终端上可以看到,任务信息和结果 ```bash -[2017-03-22 22:05:13,689: INFO/MainProcess] Received task: celeries.tasks.add[38022eec-2d3d-4ee0-8c7e-367ef92b5f1f] +[2017-03-22 22:05:13,689: INFO/MainProcess] Received task: celeries.tasks.add[38022eec-2d3d-4ee0-8c7e-367ef92b5f1f] [2017-03-22 22:05:14,765: INFO/PoolWorker-2] Task celeries.tasks.add[38022eec-2d3d-4ee0-8c7e-367ef92b5f1f] succeeded in 0.007736653999018017s: 10 -[2017-03-22 22:08:36,378: INFO/MainProcess] Received task: celeries.tasks.mul[17af4e48-736d-44c9-a8be-a50a35bbc435] +[2017-03-22 22:08:36,378: INFO/MainProcess] Received task: celeries.tasks.mul[17af4e48-736d-44c9-a8be-a50a35bbc435] [2017-03-22 22:08:37,010: INFO/PoolWorker-2] Task celeries.tasks.mul[17af4e48-736d-44c9-a8be-a50a35bbc435] succeeded in 0.011531784999533556s: 8 ``` - 仔细看,每个任务都有一个 task_id。我们可以通过 task_id 获得任务的结果。 取 add 任务的 id: - ```bash task_id = '38022eec-2d3d-4ee0-8c7e-367ef92b5f1f' In [8]: task_id = '38022eec-2d3d-4ee0-8c7e-367ef92b5f1f' @@ -176,26 +163,21 @@ In [8]: task_id = '38022eec-2d3d-4ee0-8c7e-367ef92b5f1f' In [9]: add.AsyncResult(task_id).get() Out[9]: 10 ``` +关联任务 -**关联任务** - -``` -In [2]: m = mul.apply_async((2, 2), link=mul.s(3)) -``` - + In [2]: m = mul.apply_async((2, 2), link=mul.s(3)) + 在 Worker 终端里会看到两个值,关联之前和之后的。 - ``` -[2017-03-23 13:27:13,045: INFO/MainProcess] Received task: proj.tasks.mul[40492357-44bb-41e4-979f-6eb197107a5b] +[2017-03-23 13:27:13,045: INFO/MainProcess] Received task: proj.tasks.mul[40492357-44bb-41e4-979f-6eb197107a5b] [2017-03-23 13:27:13,731: INFO/PoolWorker-2] Task proj.tasks.mul[40492357-44bb-41e4-979f-6eb197107a5b] succeeded in 0.0023383530005958164s: 4 -[2017-03-23 13:27:13,732: INFO/MainProcess] Received task: proj.tasks.mul[b01be1b8-f957-48b2-9d72-8187af6ac161] +[2017-03-23 13:27:13,732: INFO/MainProcess] Received task: proj.tasks.mul[b01be1b8-f957-48b2-9d72-8187af6ac161] [2017-03-23 13:27:13,734: INFO/PoolWorker-2] Task proj.tasks.mul[b01be1b8-f957-48b2-9d72-8187af6ac161] succeeded in 0.0006868359996587969s: 12 ``` -## 指定队列 +## 指定队列 在 celeries 目录下新建一个目录 projb, 代码使用 proj 中的。 - ```bash celeries/projb ├── celeryconfig.py @@ -203,9 +185,7 @@ celeries/projb ├── __init__.py └── tasks.py ``` - 在 celeryconfig.py 添加些配置: - ``` # coding=utf-8 from kombu import Queue @@ -236,16 +216,12 @@ CELERY_ROUTES = { }, } ``` - 然后,我们以指定队列的方式启动: -``` -> celery -A projb worker -Q foo,feed_task -l info -``` + > celery -A projb worker -Q foo,feed_task -l info tasks.py 中的 mul 函数只会通过队列 feed_task 被执行。add 函数通过默认队列 foo 执行。 - -```python + ```python In [84]: from projb.tasks import mul, add In [85]: r = add.delay(3, 3) @@ -258,9 +234,7 @@ In [87]: res = mul.delay(3, 3) In [88]: res.result Out[88]: 9 ``` - 不过,我们可以使用 apply_async() 函数来指定队列。 - ```python In [90]: r = add.apply_async((3, 3), queue='feed_task', routing_key='mul.feed') @@ -274,9 +248,7 @@ Out[93]: 9 ``` ## 任务调度 - 依法炮制,基于 projb 的代码,创建目录 projc,在 proc/celeryconfig.py 中添加如下配置。 - ``` CELERYBEAT_SCHEDULE = { 'mul-every-30-seconds': { @@ -286,25 +258,20 @@ CELERYBEAT_SCHEDULE = { } } ``` - 执行 -``` -> celery -B -A projc worker -l info -``` + > celery -B -A projc worker -l info 就可以在终端看到每 30s 执行一次任务。 - ``` [2017-03-23 12:23:13,920: INFO/Beat] Scheduler: Sending due task mul-every-30-seconds (projc.tasks.mul) -[2017-03-23 12:23:13,923: INFO/MainProcess] Received task: projc.tasks.mul[9c414257-d627-4c36-a9d8-9daed7e295c0] +[2017-03-23 12:23:13,923: INFO/MainProcess] Received task: projc.tasks.mul[9c414257-d627-4c36-a9d8-9daed7e295c0] [2017-03-23 12:23:15,177: INFO/PoolWorker-3] Task projc.tasks.mul[9c414257-d627-4c36-a9d8-9daed7e295c0] succeeded in 0.0010301589991286164s: 4 ``` ## 任务绑定、日志记录和错误重试 任务绑定、记录日志和重试是 Celery 3 个常用的高级功能。接下来,修改 proj 的 tasks.py 文件。添加一个 div 函数。 - ``` @app.task(bind=True) def div(self, x, y): @@ -322,28 +289,21 @@ def div(self, x, y): else: return res ``` - 在 Ipython 调用: -``` -In [3]: d = div.delay(2, 1) -``` + In [3]: d = div.delay(2, 1) 在 worker 中可以看到 - ``` -[2017-03-23 14:57:17,361: INFO/PoolWorker-2] proj.tasks.div[68ef1584-16ac-4236-9858-b00842891bbc]: +[2017-03-23 14:57:17,361: INFO/PoolWorker-2] proj.tasks.div[68ef1584-16ac-4236-9858-b00842891bbc]: Executing task : 68ef1584-16ac-4236-9858-b00842891bbc task.args : [2, 1] task.kwargs : {} - + [2017-03-23 14:57:17,369: INFO/PoolWorker-2] Task proj.tasks.div[68ef1584-16ac-4236-9858-b00842891bbc] succeeded in 0.007741746998362942s: 2.0 ``` - 换成可以引起异常的参数: -``` -In [4]: d = div.delay(2, 0) -``` + In [4]: d = div.delay(2, 0) -可以看到,在 worker 中每 3s 重试一次,总共重复三次(执行了 4 次),然后抛出异常! +可以看到,在 worker 中每 3s 重试一次,总共重复三次(执行了 4 次),然后抛出异常! \ No newline at end of file From 954ce9fd6b87460fa34c4acee2290a3e5940edb9 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:02:41 +0800 Subject: [PATCH 30/68] update readme & add rabbitmq practice --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ace0216..b5544d3 100644 --- a/README.md +++ b/README.md @@ -8,3 +8,4 @@ 7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) 8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) 9. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) +10. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 09d9567142e35f5d76faacc3de69e157c0e70158 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:04:57 +0800 Subject: [PATCH 31/68] add rabbitmq practice --- rabbitmq/emit_logs.py | 17 +++++++++++ rabbitmq/emit_logs_direct.py | 19 ++++++++++++ rabbitmq/emit_logs_topic.py | 20 ++++++++++++ rabbitmq/kombu_emit_logs_topic.py | 17 +++++++++++ rabbitmq/kombu_receive_logs_topic.py | 41 +++++++++++++++++++++++++ rabbitmq/kombu_receive_logs_topic_2.py | 32 ++++++++++++++++++++ rabbitmq/new_task.py | 17 +++++++++++ rabbitmq/receive.py | 22 ++++++++++++++ rabbitmq/receive_logs.py | 30 ++++++++++++++++++ rabbitmq/receive_logs_direct.py | 36 ++++++++++++++++++++++ rabbitmq/receive_logs_topic.py | 37 +++++++++++++++++++++++ rabbitmq/rpc_client.py | 42 ++++++++++++++++++++++++++ rabbitmq/rpc_client_example.py | 42 ++++++++++++++++++++++++++ rabbitmq/rpc_server.py | 37 +++++++++++++++++++++++ rabbitmq/rpc_server_example.py | 38 +++++++++++++++++++++++ rabbitmq/send.py | 20 ++++++++++++ rabbitmq/worker.py | 24 +++++++++++++++ 17 files changed, 491 insertions(+) create mode 100644 rabbitmq/emit_logs.py create mode 100644 rabbitmq/emit_logs_direct.py create mode 100644 rabbitmq/emit_logs_topic.py create mode 100644 rabbitmq/kombu_emit_logs_topic.py create mode 100644 rabbitmq/kombu_receive_logs_topic.py create mode 100644 rabbitmq/kombu_receive_logs_topic_2.py create mode 100644 rabbitmq/new_task.py create mode 100644 rabbitmq/receive.py create mode 100644 rabbitmq/receive_logs.py create mode 100644 rabbitmq/receive_logs_direct.py create mode 100644 rabbitmq/receive_logs_topic.py create mode 100644 rabbitmq/rpc_client.py create mode 100644 rabbitmq/rpc_client_example.py create mode 100644 rabbitmq/rpc_server.py create mode 100644 rabbitmq/rpc_server_example.py create mode 100644 rabbitmq/send.py create mode 100644 rabbitmq/worker.py diff --git a/rabbitmq/emit_logs.py b/rabbitmq/emit_logs.py new file mode 100644 index 0000000..d0181bd --- /dev/null +++ b/rabbitmq/emit_logs.py @@ -0,0 +1,17 @@ +# coding: utf-8 +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='logs', type='fanout') +messages = ''.join(sys.argv[1:]) or 'info: Hello World!' + +channel.basic_publish(exchange='logs', + routing_key='', + body=messages) + +print("[x] Send {}".format(messages)) +connection.close() diff --git a/rabbitmq/emit_logs_direct.py b/rabbitmq/emit_logs_direct.py new file mode 100644 index 0000000..ad65ed5 --- /dev/null +++ b/rabbitmq/emit_logs_direct.py @@ -0,0 +1,19 @@ +# coding=utf-8 +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='direct_logs', + type='direct') + +severity = sys.argv[1] if len(sys.argv) > 2 else 'info' +messages = ''.join(sys.argv[2:]) or "Hello World!" + +channel.basic_publish(exchange="direct_logs", + routing_key=severity, + body=messages) +print('[x] Send {}:{}'.format(severity, messages)) +connection.close() diff --git a/rabbitmq/emit_logs_topic.py b/rabbitmq/emit_logs_topic.py new file mode 100644 index 0000000..9cf1101 --- /dev/null +++ b/rabbitmq/emit_logs_topic.py @@ -0,0 +1,20 @@ +# coding=utf-8 +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='topic_logs', + type='topic') + +routing_key = sys.argv[1] if len(sys.argv) > 2 else 'anonymous.info' +messages = ''.join(sys.argv[2:]) or "Hello World!" + +channel.basic_publish(exchange='topic_logs', + routing_key=routing_key, + body=messages) + +print("[x] Send {}:{}".format(routing_key, messages)) +connection.close() diff --git a/rabbitmq/kombu_emit_logs_topic.py b/rabbitmq/kombu_emit_logs_topic.py new file mode 100644 index 0000000..ef21777 --- /dev/null +++ b/rabbitmq/kombu_emit_logs_topic.py @@ -0,0 +1,17 @@ +# coding=utf-8 +import sys + +from kombu import Connection, Producer, Queue, Exchange + +logs_exchange = Exchange('logs', 'topic', durable=True) + +URL = 'amqp://localhost' + +kombu_learn = sys.argv[1] if len(sys.argv) > 2 else 'anonymous.info' +messages = ''.join(sys.argv[2:]) or "Hello World!" + +with Connection(URL) as conn: + producer = Producer(conn) + producer.publish(messages, exchange=logs_exchange, + routing_key=kombu_learn, + serializer='json') diff --git a/rabbitmq/kombu_receive_logs_topic.py b/rabbitmq/kombu_receive_logs_topic.py new file mode 100644 index 0000000..a276bea --- /dev/null +++ b/rabbitmq/kombu_receive_logs_topic.py @@ -0,0 +1,41 @@ +# coding=utf-8 +import sys + +from kombu import Exchange, Queue, Connection, Consumer +from kombu.async import Hub + + +logs_exchange = Exchange(name='logs', type="topic", durable=True) + +URL = 'amqp://localhost' +hub = Hub() + +binding_keys = sys.argv[1:] +if not binding_keys: + sys.stderr.write("Usage: {} [binding_keys]...\n".format(sys.argv[0])) + sys.exit() + +tasks_queues = [Queue(binding_key, + logs_exchange, + exclusive=True, + routing_key=binding_key) + for binding_key in binding_keys] + +print("[*] Waitting for logs. To exit press Ctrl+C") + + +def on_messages(body, messages): + print(""" + Body: {0} + Properties: {1} + DeliveryInfo: {2} + """.format(body, messages.properties, messages.delivery_info) + ) + +with Connection(URL) as conn: + conn.register_with_event_loop(hub) + with Consumer(conn, tasks_queues, callbacks=[on_messages]): + try: + hub.run_forever() + except KeyboardInterrupt: + exit() diff --git a/rabbitmq/kombu_receive_logs_topic_2.py b/rabbitmq/kombu_receive_logs_topic_2.py new file mode 100644 index 0000000..e033266 --- /dev/null +++ b/rabbitmq/kombu_receive_logs_topic_2.py @@ -0,0 +1,32 @@ +# coding=utf-8 +import sys + +from kombu import Exchange, Queue, Connection +from kombu.mixins import ConsumerMixin + + +class Worker(ConsumerMixin): + logs_exchange = Exchange(name='logs', type="topic", durable=True) + + def __init__(self, connection): + self.connection = connection + + binding_keys = sys.argv[1:] + if not binding_keys: + sys.stderr.write('Usage: {} [binding_keys] ...\n'.format(sys.argv[0])) + + def get_consumers(self, Consumer, channel): + return [Consumer([Queue(binding_key, + self.logs_exchange, + exclusive=True, + routing_key=binding_key) + for binding_key in self.binding_keys], + callbacks=[self.on_messages])] + + def on_messages(self, body, messages): + print('Body: {}'.format(body)) + + +URL = 'amqp://localhost' +with Connection(URL) as connection: + Worker(connection).run() diff --git a/rabbitmq/new_task.py b/rabbitmq/new_task.py new file mode 100644 index 0000000..d738cc9 --- /dev/null +++ b/rabbitmq/new_task.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() +channel.queue_declare(queue='task_queue', durable=True) +# durable 持久化,即便rabbitMQ挂了也不会丢失信息 +messages = ''.join(sys.argv[1:]) or "Hello World!" +channel.basic_publish(exchange='', + routing_key='task_queue', + body=messages, + properties=pika.BasicProperties( + delivery_mode=2)) +print('[x] Send {}'.format(messages)) +connection.close() diff --git a/rabbitmq/receive.py b/rabbitmq/receive.py new file mode 100644 index 0000000..d512421 --- /dev/null +++ b/rabbitmq/receive.py @@ -0,0 +1,22 @@ +# coding=utf-8 +import pika + +connection = pika.BlockingConnection(pika.ConnectionParameters( + host="localhost")) +channel = connection.channel() +channel.queue_declare(queue='hello') + + +def callback(ch, method, properties, body): + print("[x] Receive {}".format(body)) + +channel.basic_consume(callback, + queue='hello', + no_ack=True) # 显示声明无消息确认回执 + +print('[*] Waitting for messages. To exit press Ctrl+C') + +try: + channel.start_consuming() +except KeyboardInterrupt: + channel.stop_consuming() diff --git a/rabbitmq/receive_logs.py b/rabbitmq/receive_logs.py new file mode 100644 index 0000000..de1bf52 --- /dev/null +++ b/rabbitmq/receive_logs.py @@ -0,0 +1,30 @@ +# coding: utf-8 +import pika + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='logs', + type='fanout') + +result = channel.queue_declare(exclusive=True) +# disconnect consumer the queue is down + +queue_name = result.method.queue + +channel.queue_bind(exchange='logs', + queue=queue_name) + +print("[*] Waitting for logs. To exit press Ctrl+C") + + +def callback(ch, method, properties, body): + print("[x] {}".format(body)) + +channel.basic_consume(callback, queue=queue_name, no_ack=True) + +try: + channel.start_consuming() +except KeyboardInterrupt: + channel.stop_consuming() diff --git a/rabbitmq/receive_logs_direct.py b/rabbitmq/receive_logs_direct.py new file mode 100644 index 0000000..3b89a15 --- /dev/null +++ b/rabbitmq/receive_logs_direct.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='direct_logs', + type='direct') + +result = channel.queue_declare(exclusive=True) +queue_name = result.method.queue + +severities = sys.argv[1:] +if not severities: + sys.stderr.write( + "Usage: {} [info] [warning] [error]\n".format(sys.argv[0])) + sys.exit(1) + +for severity in severities: + channel.queue_bind(exchange='direct_logs', + queue=queue_name, + routing_key=severity) + +print("[*] Waitting for logs. To exit press Ctrl+C") + + +def callback(ch, method, properties, body): + print("[x] {}:{}".format(method.routing_key, body)) + +channel.basic_consume(callback, queue=queue_name, no_ack=True) +try: + channel.start_consuming() +except KeyboardInterrupt: + channel.stop_consuming() diff --git a/rabbitmq/receive_logs_topic.py b/rabbitmq/receive_logs_topic.py new file mode 100644 index 0000000..f246cd0 --- /dev/null +++ b/rabbitmq/receive_logs_topic.py @@ -0,0 +1,37 @@ +# coding=utf-8 +import pika +import sys + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.exchange_declare(exchange='topic_logs', + type='topic') + +result = channel.queue_declare(exclusive=True) +queue_name = result.method.queue + +binding_keys = sys.argv[1:] +if not binding_keys: + sys.stderr.write("Usage: {} [binding_keys]...\n".format(sys.argv[0])) + sys.exit() + +for binding_key in binding_keys: + channel.queue_bind(queue=queue_name, + exchange='topic_logs', + routing_key=binding_key) + +print("[*] Waitting for logs. To exit press Ctrl+C") + + +def callback(ch, method, properties, body): + print("[x] {}:{}".format(method.routing_key, body)) + +channel.basic_consume(callback, + queue=queue_name, + no_ack=True) +try: + channel.start_consuming() +except KeyboardInterrupt: + channel.stop_consuming() diff --git a/rabbitmq/rpc_client.py b/rabbitmq/rpc_client.py new file mode 100644 index 0000000..ca45e27 --- /dev/null +++ b/rabbitmq/rpc_client.py @@ -0,0 +1,42 @@ +# coding=utf-8 +import pika +import uuid + + +class FibonacciRpcClient(object): + + def __init__(self): + self.connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) + self.channel = self.connection.channel() + + result = self.channel.queue_declare(exclusive=True) + self.callback_queue = result.method.queue + self.channel.basic_consume( + self.on_response, no_ack=True, queue=self.callback_queue) + + def on_response(self, ch, method, props, body): + if self.corr_id == props.correlation_id: + self.response = body + + def call(self, n): + self.response = None + self.corr_id = str(uuid.uuid4()) + self.channel.basic_publish(exchange='', + routing_key='rpc_queue', + properties=pika.BasicProperties + ( + reply_to=self.callback_queue, + correlation_id=self.corr_id + ), + body=str(n) + ) + + while self.response is None: + self.connection.process_data_events() + return int(self.response) + +fibonacci_rpc = FibonacciRpcClient() +print("[x] Requesting fib(40)") +response = fibonacci_rpc.call(40) +print("[.] Got {}".format(response)) diff --git a/rabbitmq/rpc_client_example.py b/rabbitmq/rpc_client_example.py new file mode 100644 index 0000000..a39fad1 --- /dev/null +++ b/rabbitmq/rpc_client_example.py @@ -0,0 +1,42 @@ +#!/usr/bin/env python +import pika +import uuid + + +class FibonacciRpcClient(object): + + def __init__(self): + self.connection = pika.BlockingConnection(pika.ConnectionParameters( + host='localhost')) + + self.channel = self.connection.channel() + + result = self.channel.queue_declare(exclusive=True) + self.callback_queue = result.method.queue + + self.channel.basic_consume(self.on_response, no_ack=True, + queue=self.callback_queue) + + def on_response(self, ch, method, props, body): + if self.corr_id == props.correlation_id: + self.response = body + + def call(self, n): + self.response = None + self.corr_id = str(uuid.uuid4()) + self.channel.basic_publish(exchange='', + routing_key='rpc_queue', + properties=pika.BasicProperties( + reply_to=self.callback_queue, + correlation_id=self.corr_id, + ), + body=str(n)) + while self.response is None: + self.connection.process_data_events() + return int(self.response) + +fibonacci_rpc = FibonacciRpcClient() + +print(" [x] Requesting fib(30)") +response = fibonacci_rpc.call(30) +print(" [.] Got %r" % response) diff --git a/rabbitmq/rpc_server.py b/rabbitmq/rpc_server.py new file mode 100644 index 0000000..a193d90 --- /dev/null +++ b/rabbitmq/rpc_server.py @@ -0,0 +1,37 @@ +# coding=utf-8 +import pika + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() + +channel.queue_declare(queue='rpc_queue') + + +def fib(n): + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fib(n - 1) + fib(n - 2) + + +def on_request(ch, method, props, body): + n = int(body) + print("[.] fib({})".format(n)) + response = fib(n) + + ch.basic_publish(exchange='', + routing_key=props.reply_to, + properties=pika.BasicProperties( + correlation_id=props.correlation_id), + body=str(response)) + + ch.basic_ack(delivery_tag=method.delivery_tag) + +channel.basic_qos(prefetch_count=1) +channel.basic_consume(on_request, queue='rpc_queue') + +print("[x] Awaiting RPC requests") +channel.start_consuming() diff --git a/rabbitmq/rpc_server_example.py b/rabbitmq/rpc_server_example.py new file mode 100644 index 0000000..ffc6432 --- /dev/null +++ b/rabbitmq/rpc_server_example.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python +import pika + +connection = pika.BlockingConnection(pika.ConnectionParameters( + host='localhost')) + +channel = connection.channel() + +channel.queue_declare(queue='rpc_queue') + + +def fib(n): + if n == 0: + return 0 + elif n == 1: + return 1 + else: + return fib(n - 1) + fib(n - 2) + + +def on_request(ch, method, props, body): + n = int(body) + + print(" [.] fib(%s)" % n) + response = fib(n) + + ch.basic_publish(exchange='', + routing_key=props.reply_to, + properties=pika.BasicProperties( + correlation_id=props.correlation_id), + body=str(response)) + ch.basic_ack(delivery_tag=method.delivery_tag) + +channel.basic_qos(prefetch_count=1) +channel.basic_consume(on_request, queue='rpc_queue') + +print(" [x] Awaiting RPC requests") +channel.start_consuming() diff --git a/rabbitmq/send.py b/rabbitmq/send.py new file mode 100644 index 0000000..f9af0cd --- /dev/null +++ b/rabbitmq/send.py @@ -0,0 +1,20 @@ +# coding=utf-8 +import sys +import pika + +connection = pika.BlockingConnection(pika.ConnectionParameters( + host='localhost')) +channel = connection.channel() +channel.queue_declare(queue='hello') # 声明 名为 hello 的 queue + +if len(sys.argv) != 1: + body = sys.argv[1] +else: + body = "Hello World!" + +channel.basic_publish(exchange='', # 默认交换机 + routing_key='hello', # queue 需要指定路由键 + body=body) + +print("[x] Sent {}.".format(body)) +connection.close() diff --git a/rabbitmq/worker.py b/rabbitmq/worker.py new file mode 100644 index 0000000..288e7b6 --- /dev/null +++ b/rabbitmq/worker.py @@ -0,0 +1,24 @@ +# coding=utf-8 +import pika +import time + +connection = pika.BlockingConnection( + pika.ConnectionParameters(host='localhost')) +channel = connection.channel() +channel.queue_declare(queue='task_queue', durable=True) +print("[*] Waitting for messages. To exit press Ctrl+C") + + +def callback(ch, method, properties, body): + print("[x] Received {}".format(body)) + time.sleep(body.count(b'.')) # 模拟耗时操作 + print("[x] Done") + ch.basic_ack(delivery_tag=method.delivery_tag) + +channel.basic_qos(prefetch_count=1) # 负载均衡 +channel.basic_consume(callback, queue='task_queue') + +try: + channel.start_consuming() +except KeyboardInterrupt: + channel.stop_consuming() From 414e594c45e32c50a98ca37b45c024bb1c9f0fc6 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:06:24 +0800 Subject: [PATCH 32/68] update readme --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index b5544d3..8921a64 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Python -1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) -2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) -3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) -4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -6. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) -7. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -8. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) -9. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) -10. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) +[几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) +[翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) +[二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) +[一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) +[豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +[装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +[二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) +[Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) +[RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From d7fa4588cf1a3f95b3bae5a232561a8855099b19 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:07:37 +0800 Subject: [PATCH 33/68] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8921a64..0fab161 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Python -[几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) +1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) From 652a0d01b9a00eeb0898edbc3075a6cd2b77e3b7 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:08:43 +0800 Subject: [PATCH 34/68] update readme --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 0fab161..24f0400 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Python 1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) -[翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) -[二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) -[一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -[豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) -[装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -[二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) -[Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) -[RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) +2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) +3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) +4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) +5. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +7. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) +8. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) +9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 7b2d60b057b3da7e4da85ff59b3d89e2c631cf1f Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:09:54 +0800 Subject: [PATCH 35/68] update readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24f0400..bb26364 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ 2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) 3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -5. [豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +5. [豆瓣电影Top250爬虫](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) 7. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) 8. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) From 793ad534e115f997db6eda6b70ba3fe5c0eff652 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 14:38:26 +0800 Subject: [PATCH 36/68] update readme --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bb26364..5d12045 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,6 @@ 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) 5. [豆瓣电影Top250爬虫](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) 6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -7. [二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) -8. [Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) +7. [二叉树](https://www.zybuluo.com/Scrazy/note/390264) +8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) 9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 2afebf6618b1227eedc001957030a5a92372e252 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:07:37 +0800 Subject: [PATCH 37/68] update readme --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8921a64..5d12045 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Python -[几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) -[翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) -[二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) -[一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -[豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) -[装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -[二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) -[Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) -[RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) +1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) +2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) +3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) +4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) +5. [豆瓣电影Top250爬虫](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +7. [二叉树](https://www.zybuluo.com/Scrazy/note/390264) +8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) +9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 1e212bd4e50edd36777a3928caf3bcc29ad405fa Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 26 Mar 2017 12:07:37 +0800 Subject: [PATCH 38/68] update readme --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8921a64..5d12045 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@ # Python -[几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) -[翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) -[二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) -[一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) -[豆瓣电影Top250](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) -[装饰器](https://github.com/lambdaplus/python/tree/master/decorate) -[二叉树](https://github.com/lambdaplus/python/blob/master/binary_tree.md) -[Celery](https://github.com/lambdaplus/python/blob/master/celery_learn.md) -[RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) +1. [几种排序算法](https://github.com/lambdaplus/python/tree/master/Algorithm/sort) +2. [翻转列表](https://github.com/lambdaplus/python/blob/master/resver.md) +3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) +4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) +5. [豆瓣电影Top250爬虫](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) +6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +7. [二叉树](https://www.zybuluo.com/Scrazy/note/390264) +8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) +9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 70a9cae8ca42e23ba4f60b5796aaca62d9c72f79 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 27 Mar 2017 16:44:55 +0800 Subject: [PATCH 39/68] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5d12045..5879df0 100644 --- a/README.md +++ b/README.md @@ -9,3 +9,4 @@ 7. [二叉树](https://www.zybuluo.com/Scrazy/note/390264) 8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) 9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) +10. [Python与数据库](https://www.zybuluo.com/Scrazy/note/702005) From 48c74ba48f9d2b2c7867f8204b2907971f9ec822 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sat, 1 Apr 2017 14:43:06 +0800 Subject: [PATCH 40/68] modify quick-sort.py && add select sort --- Algorithm/sort/quick-sort.py | 2 +- Algorithm/sort/select-sort.py | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 Algorithm/sort/select-sort.py diff --git a/Algorithm/sort/quick-sort.py b/Algorithm/sort/quick-sort.py index cbdaa6d..2efc0c3 100644 --- a/Algorithm/sort/quick-sort.py +++ b/Algorithm/sort/quick-sort.py @@ -7,7 +7,7 @@ def quick_sort(seq): return seq mid = random.choice(seq) - small = [x for x in seq if x < mid] + small = [x for x in seq if x <= mid] big = [x for x in seq if x > mid] return quick_sort(small) + [mid] + quick_sort(big) diff --git a/Algorithm/sort/select-sort.py b/Algorithm/sort/select-sort.py new file mode 100644 index 0000000..fe2e67c --- /dev/null +++ b/Algorithm/sort/select-sort.py @@ -0,0 +1,21 @@ +# coding=utf-8 +from random import randrange + + +def select_sort(seq): + if len(seq) < 2: + return seq + + for i in range(len(seq)-1, 0, -1): + max_j = i + for j in range(i): + if seq[j] > seq[max_j]: + max_j = j + seq[i], seq[max_j] = seq[max_j], seq[i] + + return seq + + +if __name__ == '__main__': + seq = [randrange(100) for _ in range(10)] + print(select_sort(seq)) From d8d5a391b8d2bf1b1a7bce8a706c31849bf5e1f8 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sat, 1 Apr 2017 14:52:25 +0800 Subject: [PATCH 41/68] modify readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5879df0..e1641f9 100644 --- a/README.md +++ b/README.md @@ -10,3 +10,4 @@ 8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) 9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) 10. [Python与数据库](https://www.zybuluo.com/Scrazy/note/702005) +11. [新浪博客抓取及简单聚类](https://www.zybuluo.com/mdeditor#709348) From 175dc0199be7067839dfcafa676dbb301ebed398 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Tue, 4 Apr 2017 14:03:07 +0800 Subject: [PATCH 42/68] modify readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e1641f9..2c870cd 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ 3. [二分法查找](https://github.com/lambdaplus/python/blob/master/Algorithm/binary_search.md) 4. [一个异步爬虫](https://github.com/lambdaplus/python/blob/master/%E4%B8%80%E4%B8%AA%E5%BC%82%E6%AD%A5%E7%88%AC%E8%99%AB.md) 5. [豆瓣电影Top250爬虫](https://github.com/lambdaplus/python/blob/master/%E8%B1%86%E7%93%A3%E7%94%B5%E5%BD%B1Top250%20%E7%88%AC%E8%99%AB.md) -6. [装饰器](https://github.com/lambdaplus/python/tree/master/decorate) +6. [装饰器](https://www.zybuluo.com/Scrazy/note/551565) 7. [二叉树](https://www.zybuluo.com/Scrazy/note/390264) 8. [Celery](https://www.zybuluo.com/Scrazy/note/697561) 9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) From 4657fce741e2d16773a4d4e3f916e80ce93c3013 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 5 Apr 2017 09:10:19 +0800 Subject: [PATCH 43/68] modify readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 2c870cd..90be3ec 100644 --- a/README.md +++ b/README.md @@ -11,3 +11,4 @@ 9. [RabbitMQ](https://www.zybuluo.com/Scrazy/note/699512) 10. [Python与数据库](https://www.zybuluo.com/Scrazy/note/702005) 11. [新浪博客抓取及简单聚类](https://www.zybuluo.com/mdeditor#709348) +12. [Python 算法教程 笔记](https://www.zybuluo.com/Scrazy/note/530998) From 79890d67c635bc160c259540787e556565d1ab6b Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 5 Apr 2017 14:15:26 +0800 Subject: [PATCH 44/68] add shell sort --- Algorithm/sort/shell-sort.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Algorithm/sort/shell-sort.py diff --git a/Algorithm/sort/shell-sort.py b/Algorithm/sort/shell-sort.py new file mode 100644 index 0000000..7f35d1d --- /dev/null +++ b/Algorithm/sort/shell-sort.py @@ -0,0 +1,18 @@ +#coding=utf-8 +def shell_sort(seq): + if len(seq) < 2: + return seq + + n = len(seq) + mid = n // 2 + while mid > 0: + for i in range(mid, n): + tmp = seq[i] + j = i + while j >= mid and seq[j-mid] > tmp: + seq[j] = seq[j-mid] + j -= mid + seq[j] = tmp + mid = mid // 2 + return seq + From 8e939c415ab08cc417e3d53d4c0d6c1f1441054f Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 9 Apr 2017 13:33:18 +0800 Subject: [PATCH 45/68] =?UTF-8?q?add=20=E6=96=B0=E6=B5=AA=E3=80=82?= =?UTF-8?q?=E3=80=82=E3=80=82=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- binary_tree.md | 16 ++ ...07\346\234\254\350\201\232\347\261\273.md" | 268 ++++++++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 "\346\226\260\346\265\252\345\215\232\345\256\242\346\226\207\346\234\254\350\201\232\347\261\273.md" diff --git a/binary_tree.md b/binary_tree.md index 567806b..d49c8ea 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -189,6 +189,22 @@ def deep(root): deep(root.right) print(root.data) ``` +### 求最大树深 + +```python +# -*- coding:utf-8 -*- +class TreeNode: + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +class Solution: + def TreeDepth(self, pRoot): + if not pRoot: + return 0 + return max(self.TreeDepth(pRoot.left), self.TreeDepth(pRoot.right)) + 1 +``` ### 比较两棵树是否相同 diff --git "a/\346\226\260\346\265\252\345\215\232\345\256\242\346\226\207\346\234\254\350\201\232\347\261\273.md" "b/\346\226\260\346\265\252\345\215\232\345\256\242\346\226\207\346\234\254\350\201\232\347\261\273.md" new file mode 100644 index 0000000..2d32cb3 --- /dev/null +++ "b/\346\226\260\346\265\252\345\215\232\345\256\242\346\226\207\346\234\254\350\201\232\347\261\273.md" @@ -0,0 +1,268 @@ +# 新浪博客文本聚类 + +标签(空格分隔): python + +--- +### 前言 +这是年前帮一位 QQ 好友完成论文报告所写的程序。有待完善。 + +----- +以下是本次报告所使用的程序, 全部使用 `Python` 编写。根据需要,编写了以下四个程序。 + +1. `article_base_info.py ` 用于抓取文章的基本信息:文章标题、链接、作者、发表日期 +2. `article_content_gevent.py` 用于抓取文章内容 +3. `text_category.py` 对文章进行分类 +4. `format_data.py` 格式化数据 + +下面是程序代码 +```python +# coding: utf-8 +''' +程序: article_base_info.py +1. 此程序通过给定的页数抓取新浪博客文章的基本信息:文章标题、链接、作者、发表日期 +2. 数据保存到MongoDB中 +''' +import re +import concurrent.futures +import requests +from bs4 import BeautifulSoup as bs +from pymongo import MongoClient + + +def fetch(url): + res = requests.get(url) + res.encoding = 'gbk' + content = bs(res.text, 'lxml') + return content + + +def base_info(html): + pattern = re.compile(r'http://blog.sina.com.cn/s/blog_.*\.html') + links = re.findall(pattern, str(html)) + date_ = re.findall(r'\((\d{2,}.*)\)', str(html)) + tle_auth = html.select('li') + authes = (auth.text.split(' ')[0] for auth in tle_auth) + titles = (title.text.split(' ')[-1] for title in tle_auth) + for infos in zip(links, titles, authes, date_): + yield infos + + +def save(url): + html = fetch(url) + data = base_info(html) + client = MongoClient('localhost', 27017) + db = client.infos + coll = db.coll + for num, d in enumerate(data, 1): + datum = { + 'links': d[0], + 'title': d[1], + 'auther': d[2], + 'date': d[3] + } + + count = coll.find({'links': d[0]}).count() + if count == 0: + coll.insert_one(datum) + print('{} is grabbed'.format(urls)) + + +if __name__ == '__main__': + url = 'http://roll.blog.sina.com.cn/list/other/index_{}.shtml' + + start = int(input('请输入开始页数, 默认为1 >> ')) + if not start: + start = 1 + + end = int(input('输入结束页数, 默认为100 >> ')) + if not end: + end = 100 + + pages = range(start, end + 1) + urls = [url.format(page) for page in pages] + + with concurrent.futures.ProcessPoolExecutor(max_workers=6) as executor: + executor.map(save, urls) + +``` +----------- +```python +# -*-coding: utf-8 -*- +''' +程序: article_content_gevent.py +1. 此程序是用来抓取新浪博客的文章内容的! +2.文章链接从 *筛选后所有博客数据.csv* 读取, 此 .csv 文件由 article_base_info.py 抓取生成。 +3. 由于作者删帖或者其他方面的原因,导致文章本身已不存在而其链接仍存在的现象。 +''' + +import os +import csv +import logging +import requests +import gevent +from bs4 import BeautifulSoup as bs + + +def fetch(url): + res = requests.get(url) + res.encoding = 'utf-8' + content = bs(res.text, 'lxml') + if not content: + logging.warning('The blog have been deleted!') + return content + + +def content_get(html): + try: + artical = html.select('#sina_keyword_ad_area2')[0].text.strip() + except IndexError as e: + print(e) + logging.warning('the page is None') + artical = ' ' + return artical + + +def links_get(filename, urls=None): + with open(filename, 'r') as csvfile: + logging.info('readed the file {}'.format(filename)) + reader = csv.reader(csvfile) + if urls is None: + urls = [] + urls = [row[0] for row in reader] + return urls + + +def download(url): + html = fetch(url) + artical = content_get(html) + with open('/home/mouse/Documents/artical/{}.txt' + .format(url[-12:-5]), 'w') as f: + f.write(artical) + logging.info('writring the {}'.format(url)) + + +if __name__ == '__main__': + logging.basicConfig(format='%(asctime)s %(message)s', + level=logging.WARNING) + filename = '/home/mouse/我的坚果云/董姐的论文所需/筛选后所有博客数据.csv' + urls = links_get(filename) + if not os.path.isdir('/home/mouse/Documents/artical/'): + os.makedirs('/home/mouse/Documents/artical/') + threads = [gevent.spawn(download, url) for url in urls] + gevent.joinall(threads) + +``` +--- +``` +# coding=utf-8 +''' +程序: text_category.py +1. 此程序用于对从新浪博客抓取的文章进行自动分类 +2. 分类所使用的库来自 https://github.com/2shou/TextGrocery +3. 工作流 读取已抓取的文章标题 -> 对文章分类 -> 写入分类后的文章标题 +''' +import os +import csv +from tgrocery import Grocery +from train_txt import train_src + + +def category(title_lst, cates=None): # 对文章分类 + if cates is None: + cates = [] + for title in title_lst: + cate = new_grocery.predict(title) + cates.append(cate.predicted_y) + return cates + + +def get_artical_title(filename, title_lst=None): # 读取文本 + if title_lst is None: + title_lst = [] + + with open(filename, 'r') as f1: + f1_csv = csv.reader(f1) + title_lst = [row[1] for row in f1_csv] + + return title_lst + + +def write_cated_info(filename, new_filename): # 写入已分类的文章 + titles = get_artical_title(filename) + categ = category(titles) + with open(filename, 'r') as read_file: + reader = csv.reader(read_file) + for i, row in enumerate(reader): + row.append(categ[i]) + with open(new_filename, 'a+') as write_file: + writer = csv.writer(write_file) + writer.writerow(row) + + print 'writing the {} item'.format(i) + print 'Done....................' + + +if __name__ == "__main__": + # filename和new_filename是文件路径,保存读取和写入的文件 + # 更改路径名即可对不同的数据分类,前提要符合一定格式 + filename = '/home/mouse/我的坚果云/董姐的论文所需/female7.csv' + new_filename = '/home/mouse/我的坚果云/董姐的论文所需/female7_2.csv' + if os.path.isfile(new_filename): + os.remove(new_filename) + grocery = Grocery('sample') + grocery.train(train_src) + grocery.save() + new_grocery = Grocery('sample') + new_grocery.load() + write_cated_info(filename, new_filename) +``` +--- +```python +# -*- coding: utf-8 -*- +''' +程序: format_data.py +此程序是一个辅助程序,用于对 *标题整理数据.xlsx* 的格式化,标题整理数据转换为 csv 格式 +''' + +import csv +from collections import namedtuple +cate = ['社会冲突和问题', '毛泽东思想与政策', '政党与政府设置', '民主与法治', '民族和国际关系', + '媒体与言论自由', '资本主义与市场经济', '全球化和对外开放', '民生与福利', + '家庭冲突与伦理', '传统文化', '性与个人自由', '环境污染', '生态保护', ] +Category = namedtuple( + 'Category', 'social mao govm demcy nation media capi glob live home tran sex env eco') + +filename = '/home/mouse/我的坚果云/董姐的论文所需/标题整理数据2.csv' + + +def train_text(filename, train_src=None): + if train_src is None: + train_src = [] + + def format_cate(): + for emp in map(Category._make, csv.reader(open(filename, 'r'))): + social = (cate[0], emp.social) + mao = (cate[1], emp.mao) + govm = (cate[2], emp.govm) + demcy = (cate[3], emp.demcy) + nation = (cate[4], emp.nation) + media = (cate[5], emp.media) + capi = (cate[6], emp.capi) + glob = (cate[7], emp.glob) + live = (cate[8], emp.live) + home = (cate[9], emp.home) + tran = (cate[10], emp.tran) + sex = (cate[11], emp.sex) + env = (cate[12], emp.env) + eco = (cate[13], emp.eco) + yield social, mao, govm, demcy, nation, media, capi, glob, \ + live, home, tran, sex, env, eco + + for cat in format_cate(): + train_src.extend(list(cat)) + + return train_src +``` +以上程序均有本人编写,并且全部我的电脑上运行通过,但未在其他电脑和平台上测试,由于各种依赖和兼容性问题以及本人水平有限,不保证他人也能正常运行此程序。 + + From a72cb05ab24c16a0de744c0f1085514fc4543188 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 9 Apr 2017 16:52:20 +0800 Subject: [PATCH 46/68] update binary search & tree --- binary_search.md | 27 ++++++++++++++++++++ binary_tree.md | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/binary_search.md b/binary_search.md index 6dd8364..7e7034b 100644 --- a/binary_search.md +++ b/binary_search.md @@ -107,3 +107,30 @@ if __name__ == "__main__": seq = [32, 55, 54, 54, 54, 54, 32, 15, 6, 4, 2, 1] print(search_max_num(seq, 0, len(seq))) ``` +### 二维数组的查找 +class Solution: + # array 二维列表 + + def find(self, target, array): + # write code here + for arr in array: + lft, rgt =0, len(arr) - 1 + while lft <= rgt: + mid = (lft + rgt) // 2 + if target > arr[mid]: + lft = mid + 1 + elif target < arr[mid]: + rgt = mid - 1 + else: + return arr[mid] + return 'No target' + + +target = 8 +array = [ + [1, 3, 5, 7, 9], + [2, 4, 6, 8, 10] +] +solution = Solution() +solution.find(target, array) +``` diff --git a/binary_tree.md b/binary_tree.md index d49c8ea..61986a6 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -239,3 +239,69 @@ def pre_in_post(pre_order, in_order): post.right = pre_in_post(pre_order[index+1:], in_order[index+1:]) return post ``` +### 已知前序中序构造出树 +```python +# -*- coding:utf-8 -*- +class TreeNode: + def __init__(self, x): + self.val = x + self.left = None + self.right = None + +class Solution: + # 返回构造的TreeNode根节点 + def reConstructBinaryTree(self, pre, tin): + # write code here + if not pre: + return + tree = TreeNode(pre[0]) + index = tin.index(pre[0]) + tree.left = self.reConstructBinaryTree(pre[1:index+1],tin[:index]) + tree.right = self.reConstructBinaryTree(pre[index+1:],tin[index+1:]) + return tree + + @classmethod + def print_tree(cls, tree): + if tree: + cls.print_tree(tree.left) + cls.print_tree(tree.right) + print(tree.val) + +pre = [1,2,3,4,5,6,7] +tin = [3,2,4,1,6,5,7] +s = Solution() +t = s.reConstructBinaryTree(pre, tin) +s.print_tree(t) +``` +树的子结构 + +```python +# -*- coding:utf-8 -*- +# class TreeNode: +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None +class Solution: + def is_subtree(self, t1, t2): + if not t2: + return True + if not t1: + return False + if not t1.val == t2.val: + return False + return self.is_subtree(t1.left, t2.left) and self.is_subtree(t1.right, t2.right) + + def HasSubtree(self, pRoot1, pRoot2): + # write code here + result = False + if pRoot1 and pRoot2: + if pRoot1.val == pRoot2.val: + result = self.is_subtree(pRoot1, pRoot2) + if not result: + result = self.is_subtree(pRoot1.left, pRoot2) + if not result: + result = self.is_subtree(pRoot1.right, pRoot2) + return result +``` + From b30dda0aa61792e81de775e8435ecb9d438ba02e Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 10 Apr 2017 13:04:02 +0800 Subject: [PATCH 47/68] update sm --- Algorithm/README.md | 1 + Algorithm/joseph-ring.py | 16 ++++++++++++++++ Algorithm/reverse_print_link_list.py | 18 ++++++++++++++++++ README.md | 1 + 4 files changed, 36 insertions(+) create mode 100644 Algorithm/README.md create mode 100644 Algorithm/joseph-ring.py create mode 100644 Algorithm/reverse_print_link_list.py diff --git a/Algorithm/README.md b/Algorithm/README.md new file mode 100644 index 0000000..145d110 --- /dev/null +++ b/Algorithm/README.md @@ -0,0 +1 @@ +1. [约瑟夫环]() diff --git a/Algorithm/joseph-ring.py b/Algorithm/joseph-ring.py new file mode 100644 index 0000000..46dd733 --- /dev/null +++ b/Algorithm/joseph-ring.py @@ -0,0 +1,16 @@ +# coding: utf-8 +# %load python/Algorithm/joseph-ring.py +def joseph_ring(n, m): + if n < 1: + return -1 + + result = -1 + start = 0 + + ring_num = list(range(n)) + while ring_num: + k = (start + m - 1) % n + result = ring_num.pop(k) + n -= 1 + start = k + return result diff --git a/Algorithm/reverse_print_link_list.py b/Algorithm/reverse_print_link_list.py new file mode 100644 index 0000000..0a270bc --- /dev/null +++ b/Algorithm/reverse_print_link_list.py @@ -0,0 +1,18 @@ +# -*- coding:utf-8 -*- +class ListNode: + def __init__(self, x): + self.val = x + self.next = None + +class Solution: + # 返回从尾部到头部的列表值序列,例如[1,2,3] + def printListFromTailToHead(self, listNode): + # write code here + res = [] + if listNode is None: + return res + while listNode: + res.append(listNode.val) + listNode = listNode.next + res.reverse() + return res diff --git a/README.md b/README.md index 90be3ec..6ea5d26 100644 --- a/README.md +++ b/README.md @@ -12,3 +12,4 @@ 10. [Python与数据库](https://www.zybuluo.com/Scrazy/note/702005) 11. [新浪博客抓取及简单聚类](https://www.zybuluo.com/mdeditor#709348) 12. [Python 算法教程 笔记](https://www.zybuluo.com/Scrazy/note/530998) +13. [TCP简述](https://www.zybuluo.com/Scrazy/note/717147) From f2ec9c98b6ee2cd6f09f580963477b0da3ba2fda Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 10 Apr 2017 13:34:01 +0800 Subject: [PATCH 48/68] update readme --- Algorithm/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Algorithm/README.md b/Algorithm/README.md index 145d110..508abc8 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -1 +1 @@ -1. [约瑟夫环]() +1. [约瑟夫环](https://github.com/lambdaplus/python/blob/master/Algorithm/joseph-ring.py) From 7e6693855d2ad6d8500c0b8f4fd5a876e9de5a5e Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Tue, 11 Apr 2017 15:04:33 +0800 Subject: [PATCH 49/68] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6ea5d26..045d46e 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,4 @@ 11. [新浪博客抓取及简单聚类](https://www.zybuluo.com/mdeditor#709348) 12. [Python 算法教程 笔记](https://www.zybuluo.com/Scrazy/note/530998) 13. [TCP简述](https://www.zybuluo.com/Scrazy/note/717147) +14. [单例模式](https://www.zybuluo.com/Scrazy/note/719017) From b181dab28883af4dadfc8a2eee230d26f73f906c Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Tue, 11 Apr 2017 18:01:29 +0800 Subject: [PATCH 50/68] update readme --- Algorithm/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Algorithm/README.md b/Algorithm/README.md index 508abc8..35bb54f 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -1 +1,2 @@ 1. [约瑟夫环](https://github.com/lambdaplus/python/blob/master/Algorithm/joseph-ring.py) +2. [寻找两个链表的第一个交点](https://www.zybuluo.com/Scrazy/note/719335) From 3989da4ff1126e312c9bb80e703a6038825a32f9 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 12 Apr 2017 18:11:07 +0800 Subject: [PATCH 51/68] update readme --- Algorithm/README.md | 3 +++ binary_tree.md | 29 ++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Algorithm/README.md b/Algorithm/README.md index 35bb54f..14beb3c 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -1,2 +1,5 @@ 1. [约瑟夫环](https://github.com/lambdaplus/python/blob/master/Algorithm/joseph-ring.py) 2. [寻找两个链表的第一个交点](https://www.zybuluo.com/Scrazy/note/719335) +3. [删除链表中的重复元素](https://www.zybuluo.com/Scrazy/note/720542) +4. [数组中的数组成最小值](https://www.zybuluo.com/Scrazy/note/720582) +5. [索引为index 的丑数](https://www.zybuluo.com/Scrazy/note/720587) diff --git a/binary_tree.md b/binary_tree.md index 61986a6..6cb8433 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -273,9 +273,10 @@ s = Solution() t = s.reConstructBinaryTree(pre, tin) s.print_tree(t) ``` -树的子结构 +### 树的子结构 ```python +求pRoot2 的子树是否为 pRoot2 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): @@ -283,8 +284,8 @@ s.print_tree(t) # self.left = None # self.right = None class Solution: - def is_subtree(self, t1, t2): - if not t2: + def is_subtree(self, t1, t2): + if not t2: # t2 is None 其为子树 return True if not t1: return False @@ -304,4 +305,26 @@ class Solution: result = self.is_subtree(pRoot1.right, pRoot2) return result ``` +### 对称二叉树 +``` +# -*- coding:utf-8 -*- +# class TreeNode: +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None +class Solution: + + def isSymmetrical(self, pRoot): + def is_same(p1, p2): + if not (p1 or p2): + return True + elif p1 and p2 and p1.val == p2.val: + return is_same(p1.left, p2.right) and is_same(p1.right, p2.left) + return False + + if not pRoot: + return True + return is_same(pRoot.left, pRoot.right) +``` From 38002f7c0169fb7abd739b8a001b7f6f8de1bab2 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 10 Apr 2017 13:34:01 +0800 Subject: [PATCH 52/68] update readme --- Algorithm/README.md | 6 +++++- README.md | 1 + binary_tree.md | 29 ++++++++++++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/Algorithm/README.md b/Algorithm/README.md index 145d110..14beb3c 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -1 +1,5 @@ -1. [约瑟夫环]() +1. [约瑟夫环](https://github.com/lambdaplus/python/blob/master/Algorithm/joseph-ring.py) +2. [寻找两个链表的第一个交点](https://www.zybuluo.com/Scrazy/note/719335) +3. [删除链表中的重复元素](https://www.zybuluo.com/Scrazy/note/720542) +4. [数组中的数组成最小值](https://www.zybuluo.com/Scrazy/note/720582) +5. [索引为index 的丑数](https://www.zybuluo.com/Scrazy/note/720587) diff --git a/README.md b/README.md index 6ea5d26..045d46e 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,4 @@ 11. [新浪博客抓取及简单聚类](https://www.zybuluo.com/mdeditor#709348) 12. [Python 算法教程 笔记](https://www.zybuluo.com/Scrazy/note/530998) 13. [TCP简述](https://www.zybuluo.com/Scrazy/note/717147) +14. [单例模式](https://www.zybuluo.com/Scrazy/note/719017) diff --git a/binary_tree.md b/binary_tree.md index 61986a6..6cb8433 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -273,9 +273,10 @@ s = Solution() t = s.reConstructBinaryTree(pre, tin) s.print_tree(t) ``` -树的子结构 +### 树的子结构 ```python +求pRoot2 的子树是否为 pRoot2 # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): @@ -283,8 +284,8 @@ s.print_tree(t) # self.left = None # self.right = None class Solution: - def is_subtree(self, t1, t2): - if not t2: + def is_subtree(self, t1, t2): + if not t2: # t2 is None 其为子树 return True if not t1: return False @@ -304,4 +305,26 @@ class Solution: result = self.is_subtree(pRoot1.right, pRoot2) return result ``` +### 对称二叉树 +``` +# -*- coding:utf-8 -*- +# class TreeNode: +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None +class Solution: + + def isSymmetrical(self, pRoot): + def is_same(p1, p2): + if not (p1 or p2): + return True + elif p1 and p2 and p1.val == p2.val: + return is_same(p1.left, p2.right) and is_same(p1.right, p2.left) + return False + + if not pRoot: + return True + return is_same(pRoot.left, pRoot.right) +``` From 286c288d8919936c31c01d795f961b7fc943e9ab Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 13 Apr 2017 14:27:42 +0800 Subject: [PATCH 53/68] update readme --- Algorithm/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Algorithm/README.md b/Algorithm/README.md index 14beb3c..ecff713 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -3,3 +3,4 @@ 3. [删除链表中的重复元素](https://www.zybuluo.com/Scrazy/note/720542) 4. [数组中的数组成最小值](https://www.zybuluo.com/Scrazy/note/720582) 5. [索引为index 的丑数](https://www.zybuluo.com/Scrazy/note/720587) +6. [反转链表](https://www.zybuluo.com/Scrazy/note/721436) From 95d8b14bd6df372ef1646f567902e54bd511de13 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 13 Apr 2017 14:27:42 +0800 Subject: [PATCH 54/68] update readme --- Algorithm/README.md | 1 + binary_tree.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/Algorithm/README.md b/Algorithm/README.md index 14beb3c..ecff713 100644 --- a/Algorithm/README.md +++ b/Algorithm/README.md @@ -3,3 +3,4 @@ 3. [删除链表中的重复元素](https://www.zybuluo.com/Scrazy/note/720542) 4. [数组中的数组成最小值](https://www.zybuluo.com/Scrazy/note/720582) 5. [索引为index 的丑数](https://www.zybuluo.com/Scrazy/note/720587) +6. [反转链表](https://www.zybuluo.com/Scrazy/note/721436) diff --git a/binary_tree.md b/binary_tree.md index 6cb8433..9aa4289 100644 --- a/binary_tree.md +++ b/binary_tree.md @@ -328,3 +328,27 @@ class Solution: return True return is_same(pRoot.left, pRoot.right) ``` +### 二叉树镜像 + +``` +# -*- coding:utf-8 -*- +# class TreeNode: +# def __init__(self, x): +# self.val = x +# self.left = None +# self.right = None +class Solution: + # 返回镜像树的根节点 + def Mirror(self, root): + # write code here + if not root: + return None + elif not (root.left or root.right): + return root + + root.left, root.right = root.right, root.left + if root.left: + self.Mirror(root.left) + if root.right: + self.Mirror(root.right) +``` From 3abd6a65267763cce93519ad207ada4a1822e238 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Sun, 14 Feb 2021 19:41:01 +0800 Subject: [PATCH 55/68] Add files via upload --- ...46\345\207\200\346\265\201\345\205\245.py" | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 "\346\262\252\346\267\261\346\270\257\351\200\232\345\255\243\345\272\246\345\207\200\346\265\201\345\205\245.py" diff --git "a/\346\262\252\346\267\261\346\270\257\351\200\232\345\255\243\345\272\246\345\207\200\346\265\201\345\205\245.py" "b/\346\262\252\346\267\261\346\270\257\351\200\232\345\255\243\345\272\246\345\207\200\346\265\201\345\205\245.py" new file mode 100644 index 0000000..4977df4 --- /dev/null +++ "b/\346\262\252\346\267\261\346\270\257\351\200\232\345\255\243\345\272\246\345\207\200\346\265\201\345\205\245.py" @@ -0,0 +1,96 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[10]: + + +import re +import os +import json +import csv +import sys +import pandas as pd +import datetime +import time +import requests as request + +headers = {'HdDate', 'SCode', 'SName', 'NewPrice', 'ShareSZ_Chg_One', 'ShareSZ_Chg_Rate_One', 'LTZB_One', 'ZZB_One'} + +today = datetime.date.today() +fname = str(today)+".xlsx" +fname1 = "PPOS_POTE_"+fname +fname2 = "PPOS_POTE_SZ_"+fname + +file_path = 'C:\\eastmoney' +if not os.path.exists(file_path): + os.mkdir(file_path) +os.chdir(file_path) + +def get_html(page): + url = 'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&st=ShareSZ_Chg_One&sr=-1&p='+str(page)+'&ps=50&js=var%20Hyeikcqr={pages:(tp),data:(x)}&filter=(DateType=%27jd%27%20and%20HdDate=%272021-02-10%27)&rt=53772857' + res = request.get(url).text + pat = re.compile('data:(.*)}', re.S) + result = re.search(pat, res).group(1) + data = json.loads(result) + return data + +def get_one_page_stock(page): + rows = [] + data = get_html(page) + + for a in data: + row = {key: value for key, value in a.items() if key in headers} + rows.append(row) + return rows + +def get_all_stock(): + all_rows = [] + for page in range(1, 31): + print('\n正在下载第 %s 页表格' % page) + rows = get_one_page_stock(page) + all_rows.extend(rows) + print("下载已完成。。。。。") + return all_rows + +def get_pd(): + + all_rows = get_all_stock() + df = pd.DataFrame(all_rows) + df.columns = ['日期', '代码', '名称', '最新股价' , '市值', '市值增幅', '占流通股比', '占总股比'] + try: + df.to_excel(r'C:\eastmoney\%s' % fname) + except Exception as e: + print("请关闭文件后再试", e) + return df + +def good(f): + df1 = f.nlargest(20, '占总股比') + df2 = f.nlargest(20, "占流通股比") + df3 = f.nlargest(10, "市值") + df1_df2 = pd.merge(df1, df2, on=list(f.columns), how='inner') + df1_df2_df3 = pd.merge(df1_df2, df3, on=list(f.columns), how='inner') + try: + df1_df2.to_excel(r'C:\eastmoney\%s' % fname1) + except Exception as e: + print("请关闭文件后再试", e) + + try: + df1_df2_df3.to_excel(r'C:\eastmoney\%s' % fname2) + except Exception as e: + print("请关闭文件后再试", e) + +def main(): + start_time = time.time() + if os.path.exists(fname): + df = pd.read_excel(fname) + good(df) + else: + df = get_pd() + good(df) + + end_time = time.time() - start_time + print('文件保存在C盘eastmoney文件夹下') + print('程序耗时:{:.1f} s'.format(end_time)) + +main() + From 5e09127f3761d774c2f80e2cfc48f324a43b7a7b Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 15 Apr 2021 14:27:43 +0800 Subject: [PATCH 56/68] Add files via upload --- ...47\345\234\243\345\207\200\345\214\226.py" | 27 ++++ ...\200\345\214\226\345\222\214anti-AD.ipynb" | 125 ++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 "hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226.py" create mode 100644 "hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226\345\222\214anti-AD.ipynb" diff --git "a/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226.py" "b/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226.py" new file mode 100644 index 0000000..6a69229 --- /dev/null +++ "b/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226.py" @@ -0,0 +1,27 @@ +#!/usr/bin/env python +# coding: utf-8 + +# In[32]: + + +with open('/home/lambda/Downloads/host.html', 'r') as f: + new_f = open('/home/lambda/Downloads/ad.yaml', 'w') + new_f.write('hosts:\n') + new_f.write(' router.asus.com: 192.168.50.1\n') + new_f.write(' services.googleapis.cn: 74.125.193.94\n') + for lines in f: + if '#' not in lines and not lines == "\n": + tail = lines[9:].strip() + head = lines[:9].strip() + new_lines = " " + tail + ": " + head + new_f.write(new_lines+'\n') + else: + pass + new_f.close() + + +# In[ ]: + + + + diff --git "a/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226\345\222\214anti-AD.ipynb" "b/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226\345\222\214anti-AD.ipynb" new file mode 100644 index 0000000..c0b98b9 --- /dev/null +++ "b/hosts\350\275\254\346\215\242\345\244\247\345\234\243\345\207\200\345\214\226\345\222\214anti-AD.ipynb" @@ -0,0 +1,125 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 大圣净化的转换代码" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "with open('/home/lambda/Downloads/host.html', 'r') as f:\n", + " new_f = open('/home/lambda/Downloads/ad.yaml', 'w')\n", + " new_f.write('hosts:\\n')\n", + " new_f.write(' router.asus.com: 192.168.50.1\\n')\n", + " new_f.write(' services.googleapis.cn: 74.125.193.94\\')\n", + " for lines in f:\n", + " if '#' not in lines and not lines == \"\\n\":\n", + " tail = lines[9:].strip()\n", + " head = lines[:9].strip()\n", + " new_lines = \" \" + tail + \": \" + head\n", + " new_f.write(new_lines+'\\n')\n", + " else:\n", + " pass\n", + " new_f.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## anti-AD的转换代码" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "with open('/home/lambda/Downloads/adblock-for-dnsmasq.con.html', 'r') as f:\n", + " new_f = open('/home/lambda/Downloads/anti_ad.yaml', 'w')\n", + " new_f.write('hosts:\\n')\n", + " new_f.write(' router.asus.com: 192.168.50.1\\n')\n", + " new_f.write(' services.googleapis.cn: 74.125.193.94\\n')\n", + " for lines in f:\n", + " if '#' not in lines and not lines == \"\\n\":\n", + " # 获取网址\n", + " tail = lines[9:].strip()\n", + " # tail[:-1] 去掉字符串尾部的 /\n", + " new_lines = \" \" + tail[:-1] + \": \" + '127.0.0.1'\n", + " new_f.write(new_lines+'\\n')\n", + " else:\n", + " pass\n", + " new_f.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 合体" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mwhile\u001b[0m \u001b[0mf2\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mf3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mf2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mf1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf2\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mf3\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mf1\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf3\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreadline\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/anaconda3/lib/python3.8/codecs.py\u001b[0m in \u001b[0;36mdecode\u001b[0;34m(self, input, final)\u001b[0m\n\u001b[1;32m 320\u001b[0m \u001b[0;31m# decode input (taking the buffer into account)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 321\u001b[0m \u001b[0mdata\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0minput\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 322\u001b[0;31m \u001b[0;34m(\u001b[0m\u001b[0mresult\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mconsumed\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_buffer_decode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0merrors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfinal\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 323\u001b[0m \u001b[0;31m# keep undecoded input until the next call\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 324\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbuffer\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mconsumed\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "with open('/home/lambda/Downloads/anti_dasheng.yaml', 'w') as f1, open('/home/lambda/Downloads/ad.yaml', 'r') as f2, open('/home/lambda/Downloads/anti_ad.yaml', 'r') as f3:\n", + " while f2 or f3:\n", + " if f2:\n", + " f1.write(f2.readline())\n", + " if f3:\n", + " f1.write(f3.readline())\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.8.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 8f1725043812ebe0cca48ca0ee8dcded2a9b48ec Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Thu, 15 Apr 2021 16:33:42 +0800 Subject: [PATCH 57/68] Add files via upload --- host_trans_anti.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 host_trans_anti.py diff --git a/host_trans_anti.py b/host_trans_anti.py new file mode 100644 index 0000000..9e937f2 --- /dev/null +++ b/host_trans_anti.py @@ -0,0 +1,30 @@ +#UTF-8 + +#把anti-AD的dsnmasq转换成MelinClash的hosts格式 + +import wget +from datetime import date +today = date.today() + +def host_trans(url): + file = wget.download(url, out='/home/lambda/Documents/adblock/anti_ad_'+str(today)+'.conf') + with open(file, 'r') as f: + new_f = open('/home/lambda/Documents/adblock/anti_ad_'+str(today)+'.yaml', 'w') + new_f.write('hosts:\n') + new_f.write(' router.asus.com: 192.168.50.1\n') + new_f.write(' services.googleapis.cn: 74.125.193.94\n') + for lines in f: + if '#' not in lines and not lines == "\n": + # 获取网址 + tail = lines[9:].strip() + # tail[:-1] 去掉字符串尾部的 / + new_lines = " " + tail[:-1] + ": " + '127.0.0.1' + new_f.write(new_lines+'\n') + else: + pass + new_f.close() + print("anti-ad.yaml文件保存在文档/adblock文件夹下") + +if __name__ == '__main__': + url = 'https://anti-ad.net/anti-ad-for-dnsmasq.conf' + host_trans(url) \ No newline at end of file From bb0b70d5df1fc86d7680a92b209eb9201290e272 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 19 Apr 2021 08:15:44 +0800 Subject: [PATCH 58/68] =?UTF-8?q?=E6=B2=AA=E6=B7=B1=E6=B8=AF=E9=80=9Aaioth?= =?UTF-8?q?hp=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hushengangtong.py | 140 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 hushengangtong.py diff --git a/hushengangtong.py b/hushengangtong.py new file mode 100644 index 0000000..2b94665 --- /dev/null +++ b/hushengangtong.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Apr 18 17:34:03 2021 + +@author: lambda +""" + +import aiohttp +import asyncio +import re +import os +import sys +import json +import random +import pandas as pd +import datetime +import time + +user_agent = [ + "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0", + "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", + "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11", + "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", + "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", + "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", + "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10", + "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", + "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+", + "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0", + "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)", + "UCWEB7.0.2.37/28/999", + "NOKIA5700/ UCWEB7.0.2.37/28/999", + "Openwave/ UCWEB7.0.2.37/28/999", + "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999", + # iPhone 6: + "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25", + +] + +today = datetime.date.today() +yestoday = today - datetime.timedelta(days=1) +print('今天获取的数据是: ',yestoday) +fname = str(yestoday)+".xlsx" +fname1 = "PPOS_POTE_"+fname +fname2 = "PPOS_POTE_SZ_"+fname + +file_path = '/home/lambda/Documents/jiatou' +if not os.path.exists(file_path): + os.mkdir(file_path) +os.chdir(file_path) + +if os.path.exists(fname): + print('文件已存在,明天再来吧') + sys.exit() + +heads = {'HdDate', 'SCode', 'SName', 'NewPrice', 'ShareSZ_Chg_One', 'ShareSZ_Chg_Rate_One', 'LTZB_One', 'ZZB_One'} +rows = [] +# 获取网页信息 +async def fetch(session, url): + headers = {'User-Agent': random.choice(user_agent)} + async with session.get(url, headers=headers) as response: + return await response.text(encoding='utf-8') + +# 解析网页 +async def parser(html): + pat = re.compile('data:(.*)}', re.S) # 使用正则 + result = re.search(pat, html).group(1) + data = json.loads(result) + if len(data) == 0: + print('日期有错误,看看是不是日期不对。。。。。。') + sys.exit() + for d in data: + row = {key: value for key, value in d.items() if key in heads} + rows.append(row) + +# 下载网页 +async def download(url): + async with aiohttp.ClientSession() as session: + html = await fetch(session, url) + await parser(html) + +urls = [f'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&st=ShareSZ_Chg_One&sr=-1&p='+str(p)+'&ps=50&js=var%20mXyeKPjW={pages:(tp),data:(x)}&filter=(DateType=%27jd%27%20and%20HdDate=%27'+str(yestoday)+'%27)&rt=53931781' for p in range(1, 31)] + +# 利用asyncio模块进行异步IO处理 +async def main(): + await asyncio.gather(*[download(url) for url in urls]) + +start = time.time() +asyncio.run(main()) +# 将rows转化为pandas中的DataFrame +df = pd.DataFrame(rows) +df.columns = ['日期', '代码', '名称', '最新股价' , '市值', '市值增幅', '占流通股比', '占总股比'] +# 从大到小排序 +df.sort_values(by='市值') +try: + df.to_excel(fname) # 保存成Excel文件 +except Exception as e: + print("请关闭文件后再试", e) + +df1 = df.nlargest(20, '占总股比') +df2 = df.nlargest(20, "占流通股比") +df3 = df.nlargest(10, "市值") +# 占总股比前20和流通股比前20的交集 +df1_df2 = pd.merge(df1, df2, on=list(df.columns), how='inner') +# 三者的交集 +df1_df2_df3 = pd.merge(df1_df2, df3, on=list(df.columns), how='inner') +try: + df1_df2.to_excel(fname1) +except Exception as e: + print("请关闭文件后再试", e) + +try: + df1_df2_df3.to_excel(fname2) +except Exception as e: + print("请关闭文件后再试", e) + +stop = time.time() +print(f"使用aiohttp共耗时{stop-start} S") \ No newline at end of file From ea522a6254f8c3983b024d6b89cb393de4e6c1d7 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Mon, 19 Apr 2021 20:12:53 +0800 Subject: [PATCH 59/68] =?UTF-8?q?=E6=B2=AA=E6=B7=B1=E6=B8=AF=E9=80=9Aaioht?= =?UTF-8?q?tp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hushengangtong.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/hushengangtong.py b/hushengangtong.py index 2b94665..09788b8 100644 --- a/hushengangtong.py +++ b/hushengangtong.py @@ -5,7 +5,6 @@ @author: lambda """ - import aiohttp import asyncio import re @@ -16,6 +15,8 @@ import pandas as pd import datetime import time +import requests as request +from lxml import etree user_agent = [ "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", @@ -56,13 +57,18 @@ "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999", # iPhone 6: "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25", - ] -today = datetime.date.today() -yestoday = today - datetime.timedelta(days=1) -print('今天获取的数据是: ',yestoday) -fname = str(yestoday)+".xlsx" +start = time.time() + +host = 'http://data.eastmoney.com/hsgtcg/list.html?DateType=DateType=%27jd%27' +res = request.get(host) +xml = etree.HTML(res.text) +result = xml.xpath('/html/body/div[1]/div[8]/div[2]/div[2]/div[1]/div[1]/div/span/text()')[0] +today = result[1:11] +print(f'今天获取的数据是: {today}') + +fname = str(today)+".xlsx" fname1 = "PPOS_POTE_"+fname fname2 = "PPOS_POTE_SZ_"+fname @@ -77,6 +83,7 @@ heads = {'HdDate', 'SCode', 'SName', 'NewPrice', 'ShareSZ_Chg_One', 'ShareSZ_Chg_Rate_One', 'LTZB_One', 'ZZB_One'} rows = [] + # 获取网页信息 async def fetch(session, url): headers = {'User-Agent': random.choice(user_agent)} @@ -101,19 +108,19 @@ async def download(url): html = await fetch(session, url) await parser(html) -urls = [f'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&st=ShareSZ_Chg_One&sr=-1&p='+str(p)+'&ps=50&js=var%20mXyeKPjW={pages:(tp),data:(x)}&filter=(DateType=%27jd%27%20and%20HdDate=%27'+str(yestoday)+'%27)&rt=53931781' for p in range(1, 31)] +#urls = [f'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?callback=jQuery112305322211230994847_1618827285261&st=ShareSZ_Chg_One&sr=-1&ps=50&p='+str(p)+'&type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&js=%7B%22data%22%3A(x)%2C%22pages%22%3A(tp)%2C%22font%22%3A(font)%7D&filter=(DateType%3D%27jd%27)(HdDate%3D%27'+str(today)+'%27)' for p in range(1, 31)] +urls = [f'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&st=ShareSZ_Chg_One&sr=-1&p='+str(p)+'&ps=50&js=var%20mXyeKPjW={pages:(tp),data:(x)}&filter=(DateType=%27jd%27%20and%20HdDate=%27'+str(today)+'%27)&rt=53931781' for p in range(1, 31)] # 利用asyncio模块进行异步IO处理 async def main(): await asyncio.gather(*[download(url) for url in urls]) - -start = time.time() + asyncio.run(main()) # 将rows转化为pandas中的DataFrame df = pd.DataFrame(rows) df.columns = ['日期', '代码', '名称', '最新股价' , '市值', '市值增幅', '占流通股比', '占总股比'] # 从大到小排序 -df.sort_values(by='市值') +df.sort_values(by='市值', ascending=False) try: df.to_excel(fname) # 保存成Excel文件 except Exception as e: From d69ab83ecab2d56796ecca25129e8877b59ec65f Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 07:31:09 +0000 Subject: [PATCH 60/68] Create hushengangtong.yml --- .github/workflows/hushengangtong.yml | 36 ++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 .github/workflows/hushengangtong.yml diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml new file mode 100644 index 0000000..6a2b91b --- /dev/null +++ b/.github/workflows/hushengangtong.yml @@ -0,0 +1,36 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [ master ] + pull_request: + branches: [ master ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. From 0dc9ebebd0a995cd4c92d6d211766fe38fd51d1c Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:05:58 +0000 Subject: [PATCH 61/68] Update hushengangtong.yml --- .github/workflows/hushengangtong.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml index 6a2b91b..7e196c6 100644 --- a/.github/workflows/hushengangtong.yml +++ b/.github/workflows/hushengangtong.yml @@ -24,13 +24,16 @@ jobs: steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v2 - - # Runs a single command using the runners shell - - name: Run a one-line script - run: echo Hello, world! - - # Runs a set of commands using the runners shell - - name: Run a multi-line script + - name: Set up Python 3.x + uses: actions/setup-python@v2 + with: + python-version: '3.x' + - name: Install dependencies run: | - echo Add other actions to build, - echo test, and deploy your project. + python -m pip install --upgrade pip + pip install aiohttp + pip install requests + pip install lxml + pip install pandas + - name: Download files + run: python -i ./husheng_action.py From 0a7f330515577360864023257cb04f2d23c7eefa Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 16:06:32 +0800 Subject: [PATCH 62/68] Add files via upload hushen_action --- husheng_action.py | 146 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 husheng_action.py diff --git a/husheng_action.py b/husheng_action.py new file mode 100644 index 0000000..a5fd897 --- /dev/null +++ b/husheng_action.py @@ -0,0 +1,146 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Created on Sun Apr 18 17:34:03 2021 + +@author: lambda +""" +import aiohttp +import asyncio +import re +import os +import sys +import json +import random +import pandas as pd +import datetime +import time +import requests as request +from lxml import etree + +user_agent = [ + "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", + "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0", + "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729; InfoPath.3; rv:11.0) like Gecko", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)", + "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1", + "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; en) Presto/2.8.131 Version/11.11", + "Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11", + "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SE 2.X MetaSr 1.0; SE 2.X MetaSr 1.0; .NET CLR 2.0.50727; SE 2.X MetaSr 1.0)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)", + "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", + "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5", + "Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", + "MQQBrowser/26 Mozilla/5.0 (Linux; U; Android 2.3.7; zh-cn; MB200 Build/GRJ22; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1", + "Opera/9.80 (Android 2.3.4; Linux; Opera Mobi/build-1107180945; U; en-GB) Presto/2.8.149 Version/11.10", + "Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13", + "Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en) AppleWebKit/534.1+ (KHTML, like Gecko) Version/6.0.0.337 Mobile Safari/534.1+", + "Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.0; U; en-US) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/233.70 Safari/534.6 TouchPad/1.0", + "Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/20.0.019; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.18124", + "Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)", + "UCWEB7.0.2.37/28/999", + "NOKIA5700/ UCWEB7.0.2.37/28/999", + "Openwave/ UCWEB7.0.2.37/28/999", + "Mozilla/4.0 (compatible; MSIE 6.0; ) Opera/UCWEB7.0.2.37/28/999", + # iPhone 6: + "Mozilla/6.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/8.0 Mobile/10A5376e Safari/8536.25", +] + +start = time.time() + +host = 'http://data.eastmoney.com/hsgtcg/list.html?DateType=DateType=%27jd%27' +res = request.get(host) +xml = etree.HTML(res.text) +result = xml.xpath('/html/body/div[1]/div[8]/div[2]/div[2]/div[1]/div[1]/div/span/text()')[0] +today = result[1:11] +print(f'今天获取的数据是: {today}') + +fname = str(today)+".xlsx" +fname1 = "PPOS_POTE_"+fname +fname2 = "PPOS_POTE_SZ_"+fname + +file_path = './hushengang' +if not os.path.exists(file_path): + os.mkdir(file_path) + +if os.path.exists(fname): + print('文件已存在,明天再来吧') + sys.exit() + +heads = {'HdDate', 'SCode', 'SName', 'NewPrice', 'ShareSZ_Chg_One', 'ShareSZ_Chg_Rate_One', 'LTZB_One', 'ZZB_One'} +rows = [] + +# 获取网页信息 +async def fetch(session, url): + headers = {'User-Agent': random.choice(user_agent)} + async with session.get(url, headers=headers) as response: + return await response.text(encoding='utf-8') + +# 解析网页 +async def parser(html): + pat = re.compile('data:(.*)}', re.S) # 使用正则 + result = re.search(pat, html).group(1) + data = json.loads(result) + if len(data) == 0: + print('日期有错误,看看是不是日期不对。。。。。。') + sys.exit() + for d in data: + row = {key: value for key, value in d.items() if key in heads} + rows.append(row) + +# 下载网页 +async def download(url): + async with aiohttp.ClientSession() as session: + html = await fetch(session, url) + await parser(html) + +#urls = [f'http://dcfm.eastmoney.com/em_mutisvcexpandinterface/api/js/get?callback=jQuery112305322211230994847_1618827285261&st=ShareSZ_Chg_One&sr=-1&ps=50&p='+str(p)+'&type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&js=%7B%22data%22%3A(x)%2C%22pages%22%3A(tp)%2C%22font%22%3A(font)%7D&filter=(DateType%3D%27jd%27)(HdDate%3D%27'+str(today)+'%27)' for p in range(1, 31)] +urls = [f'http://dcfm.eastmoney.com/EM_MutiSvcExpandInterface/api/js/get?type=HSGT20_GGTJ_SUM&token=894050c76af8597a853f5b408b759f5d&st=ShareSZ_Chg_One&sr=-1&p='+str(p)+'&ps=50&js=var%20mXyeKPjW={pages:(tp),data:(x)}&filter=(DateType=%27jd%27%20and%20HdDate=%27'+str(today)+'%27)&rt=53931781' for p in range(1, 31)] + +# 利用asyncio模块进行异步IO处理 +async def main(): + await asyncio.gather(*[download(url) for url in urls]) + +asyncio.run(main()) +# 将rows转化为pandas中的DataFrame +df = pd.DataFrame(rows) +df.columns = ['日期', '代码', '名称', '最新股价' , '市值', '市值增幅', '占流通股比', '占总股比'] +# 从大到小排序 +df.sort_values(by='市值', ascending=False) +try: + df.to_excel(fname) # 保存成Excel文件 +except Exception as e: + print("请关闭文件后再试", e) + +df1 = df.nlargest(20, '占总股比') +df2 = df.nlargest(20, "占流通股比") +df3 = df.nlargest(10, "市值") +# 占总股比前20和流通股比前20的交集 +df1_df2 = pd.merge(df1, df2, on=list(df.columns), how='inner') +# 三者的交集 +df1_df2_df3 = pd.merge(df1_df2, df3, on=list(df.columns), how='inner') +try: + df1_df2.to_excel(fname1) +except Exception as e: + print("请关闭文件后再试", e) + +try: + df1_df2_df3.to_excel(fname2) +except Exception as e: + print("请关闭文件后再试", e) + +stop = time.time() +print(f"使用aiohttp共耗时{stop-start} S") \ No newline at end of file From 9231a96df7fc671d5a2bc6f55d374c0a2db1aff0 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:10:45 +0000 Subject: [PATCH 63/68] Update hushengangtong.py delete os.path --- hushengangtong.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hushengangtong.py b/hushengangtong.py index 09788b8..9b841a5 100644 --- a/hushengangtong.py +++ b/hushengangtong.py @@ -72,10 +72,10 @@ fname1 = "PPOS_POTE_"+fname fname2 = "PPOS_POTE_SZ_"+fname -file_path = '/home/lambda/Documents/jiatou' -if not os.path.exists(file_path): - os.mkdir(file_path) -os.chdir(file_path) +file_path = './' +#if not os.path.exists(file_path): +# os.mkdir(file_path) +#os.chdir(file_path) if os.path.exists(fname): print('文件已存在,明天再来吧') @@ -144,4 +144,4 @@ async def main(): print("请关闭文件后再试", e) stop = time.time() -print(f"使用aiohttp共耗时{stop-start} S") \ No newline at end of file +print(f"使用aiohttp共耗时{stop-start} S") From 990a11cdcf73f680f2721907e18829eb435a0044 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:16:19 +0000 Subject: [PATCH 64/68] Update husheng_action.py --- husheng_action.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/husheng_action.py b/husheng_action.py index a5fd897..f57e5d1 100644 --- a/husheng_action.py +++ b/husheng_action.py @@ -72,13 +72,13 @@ fname1 = "PPOS_POTE_"+fname fname2 = "PPOS_POTE_SZ_"+fname -file_path = './hushengang' -if not os.path.exists(file_path): - os.mkdir(file_path) +#file_path = './hushengang' +#if not os.path.exists(file_path): +# os.mkdir(file_path) -if os.path.exists(fname): - print('文件已存在,明天再来吧') - sys.exit() +#if os.path.exists(fname): +# print('文件已存在,明天再来吧') +# sys.exit() heads = {'HdDate', 'SCode', 'SName', 'NewPrice', 'ShareSZ_Chg_One', 'ShareSZ_Chg_Rate_One', 'LTZB_One', 'ZZB_One'} rows = [] @@ -143,4 +143,4 @@ async def main(): print("请关闭文件后再试", e) stop = time.time() -print(f"使用aiohttp共耗时{stop-start} S") \ No newline at end of file +print(f"使用aiohttp共耗时{stop-start} S") From 3e69d6523c076d5714169ced8e6d7a4a55d78f2a Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:19:04 +0000 Subject: [PATCH 65/68] Update hushengangtong.yml --- .github/workflows/hushengangtong.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml index 7e196c6..cabbff7 100644 --- a/.github/workflows/hushengangtong.yml +++ b/.github/workflows/hushengangtong.yml @@ -36,4 +36,4 @@ jobs: pip install lxml pip install pandas - name: Download files - run: python -i ./husheng_action.py + run: python ./husheng_action.py From 5084d388ca8cb836cc0ff195e4ce97eeed09445a Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:33:25 +0000 Subject: [PATCH 66/68] Update hushengangtong.yml again python 3.8 --- .github/workflows/hushengangtong.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml index cabbff7..41a9ffa 100644 --- a/.github/workflows/hushengangtong.yml +++ b/.github/workflows/hushengangtong.yml @@ -27,7 +27,7 @@ jobs: - name: Set up Python 3.x uses: actions/setup-python@v2 with: - python-version: '3.x' + python-version: 3.8 - name: Install dependencies run: | python -m pip install --upgrade pip From 5286e96517c4828d96ac15281918b599f4f63323 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:51:40 +0000 Subject: [PATCH 67/68] Update hushengangtong.yml --- .github/workflows/hushengangtong.yml | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml index 41a9ffa..4b04d65 100644 --- a/.github/workflows/hushengangtong.yml +++ b/.github/workflows/hushengangtong.yml @@ -23,11 +23,21 @@ jobs: # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@v2 + - name: Checkout + uses: actions/checkout@v2 + with: + ref: master + + - name: make dir + run: | + mkdir -p ./hushengangtong + cd ./hushengangtong + - name: Set up Python 3.x uses: actions/setup-python@v2 with: python-version: 3.8 + - name: Install dependencies run: | python -m pip install --upgrade pip @@ -35,5 +45,12 @@ jobs: pip install requests pip install lxml pip install pandas + - name: Download files run: python ./husheng_action.py + + - name : Upload artifact + uses: actions/upload-artifact@master + with: + name: HuShenGang + path: ./hushengangtong/* From cdee360c046b0380820c4a67be6339a4aeb96cc4 Mon Sep 17 00:00:00 2001 From: lambdaplus Date: Wed, 21 Apr 2021 08:59:47 +0000 Subject: [PATCH 68/68] Delete hushengangtong.yml --- .github/workflows/hushengangtong.yml | 56 ---------------------------- 1 file changed, 56 deletions(-) delete mode 100644 .github/workflows/hushengangtong.yml diff --git a/.github/workflows/hushengangtong.yml b/.github/workflows/hushengangtong.yml deleted file mode 100644 index 4b04d65..0000000 --- a/.github/workflows/hushengangtong.yml +++ /dev/null @@ -1,56 +0,0 @@ -# This is a basic workflow to help you get started with Actions - -name: CI - -# Controls when the action will run. -on: - # Triggers the workflow on push or pull request events but only for the master branch - push: - branches: [ master ] - pull_request: - branches: [ master ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - # This workflow contains a single job called "build" - build: - # The type of runner that the job will run on - runs-on: ubuntu-latest - - # Steps represent a sequence of tasks that will be executed as part of the job - steps: - # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - name: Checkout - uses: actions/checkout@v2 - with: - ref: master - - - name: make dir - run: | - mkdir -p ./hushengangtong - cd ./hushengangtong - - - name: Set up Python 3.x - uses: actions/setup-python@v2 - with: - python-version: 3.8 - - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install aiohttp - pip install requests - pip install lxml - pip install pandas - - - name: Download files - run: python ./husheng_action.py - - - name : Upload artifact - uses: actions/upload-artifact@master - with: - name: HuShenGang - path: ./hushengangtong/*