From a6682372866c54feb6cf0c0b375d7894caa1d941 Mon Sep 17 00:00:00 2001 From: jffifa Date: Sun, 8 Mar 2015 16:05:42 +0800 Subject: [PATCH 01/11] add xvfb_display option to config that allows user to run webdriver headless --- GoogleScraper/config.cfg | 6 ++++++ GoogleScraper/selenium_mode.py | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/GoogleScraper/config.cfg b/GoogleScraper/config.cfg index 323a7016..840f43dd 100644 --- a/GoogleScraper/config.cfg +++ b/GoogleScraper/config.cfg @@ -236,6 +236,12 @@ sel_browser: Chrome ; with the current proxy is discarded. manual_captcha_solving: False +; Xvfb display option +; You should start xvfb at your own +; Format: [hostname]:displaynumber[.screennumber], see X(7) manuel for details +; will set environment variable $DISPLAY to it +xvfb_display: None + ; All settings that target the raw http packet scraping mode. [HTTP] diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index 9e580610..b0a358b3 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -9,6 +9,7 @@ import math import re import sys +import os try: from selenium import webdriver @@ -115,6 +116,8 @@ def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): self.captcha_lock = captcha_lock self.scrape_method = 'selenium' + self.xvfb_display = Config['SELENIUM'].get('xvfb_display', None) + # get the base search url based on the search engine. self.base_search_url = get_base_search_url_by_search_engine(self.search_engine_name, self.scrape_method) super().instance_creation_info(self.__class__.__name__) @@ -153,6 +156,11 @@ def proxy_check(self): return online + def _set_xvfb_display(self): + # TODO: should we check the format of the config? + if self.xvfb_display: + os.environ['DISPLAY'] = self.xvfb_display + def _get_webdriver(self): """Return a webdriver instance and set it up with the according profile/ proxies. @@ -495,6 +503,8 @@ def page_down(self): def run(self): """Run the SelScraper.""" + self._set_xvfb_display() + if not self._get_webdriver(): raise_or_log('{}: Aborting due to no available selenium webdriver.'.format(self.name), exception_obj=SeleniumMisconfigurationError) From 989ae4ce91458781932776ec0ce40dcaab8a07ad Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Tue, 17 Mar 2015 10:49:57 +0000 Subject: [PATCH 02/11] modified --- .../__pycache__/__init__.cpython-34.pyc | Bin 790 -> 0 bytes .../__pycache__/caching.cpython-34.pyc | Bin 16361 -> 0 bytes .../__pycache__/commandline.cpython-34.pyc | Bin 6409 -> 0 bytes GoogleScraper/__pycache__/config.cpython-34.pyc | Bin 4698 -> 0 bytes GoogleScraper/__pycache__/core.cpython-34.pyc | Bin 13130 -> 0 bytes .../__pycache__/database.cpython-34.pyc | Bin 9023 -> 0 bytes .../__pycache__/http_mode.cpython-34.pyc | Bin 8836 -> 0 bytes GoogleScraper/__pycache__/log.cpython-34.pyc | Bin 1241 -> 0 bytes .../__pycache__/output_converter.cpython-34.pyc | Bin 3344 -> 0 bytes .../__pycache__/parsing.cpython-34.pyc | Bin 26114 -> 0 bytes .../__pycache__/proxies.cpython-34.pyc | Bin 4417 -> 0 bytes .../__pycache__/scrape_jobs.cpython-34.pyc | Bin 919 -> 0 bytes .../__pycache__/scraping.cpython-34.pyc | Bin 14386 -> 0 bytes .../__pycache__/selenium_mode.cpython-34.pyc | Bin 20219 -> 0 bytes GoogleScraper/__pycache__/socks.cpython-34.pyc | Bin 21813 -> 0 bytes GoogleScraper/__pycache__/utils.cpython-34.pyc | Bin 2925 -> 0 bytes .../__pycache__/version.cpython-34.pyc | Bin 176 -> 0 bytes 17 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 GoogleScraper/__pycache__/__init__.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/caching.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/commandline.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/config.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/core.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/database.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/http_mode.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/log.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/output_converter.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/parsing.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/proxies.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/scrape_jobs.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/scraping.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/selenium_mode.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/socks.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/utils.cpython-34.pyc delete mode 100644 GoogleScraper/__pycache__/version.cpython-34.pyc diff --git a/GoogleScraper/__pycache__/__init__.cpython-34.pyc b/GoogleScraper/__pycache__/__init__.cpython-34.pyc deleted file mode 100644 index 5c27134e68cbcc4f3d81bf8353c118b334ebd0b6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 790 zcmZ8fKW`H;6n}S3F3Bb7pQu!fRu|MIX(KU#5E4+tK!s>0FP3|D?@aCUVf$K=m4%V- zz{J9b;A7m%#KH$);$6~8v}fJZ`@R3aXa5qLS)Zzqm0;UJFx5hoteJ}%{gEj7hPQeU;4%c`9dIV++ zbPQ$_=q5z62O4W5g*bCzM zLX|n$zo@fI60EV#+3WrEtl)v1uWT#L)_D;KC+Ao|OOn}Ii$_F*v_K`zWnh^t zFI0|bH#@Jb&9yw0+-1cpq~Mx|Z@E^PvbBFNKi1NR zmomsKNI@qRcV1$$F}xH^t5P1H9Bel|#)QonYf{E|9SZ9hqeI5(N^s0W&}Xc$MxyrM zrr~NBH?44XCB4IU0d)7SZ%xIuPlVpid6R~$TnFvV!_9s`>V8%^b%j)BcZ%LajHyxu#-`Px=|44A)LK4k W+xcA-Nt{G@;_V1evK{TkThTw3T<3)V diff --git a/GoogleScraper/__pycache__/caching.cpython-34.pyc b/GoogleScraper/__pycache__/caching.cpython-34.pyc deleted file mode 100644 index 26f4cf24d379719c5d1d68068cbcbda57b141f0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16361 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

|4+{ znOH=>v9WO!2$X9g39XO|`UDw{c-2_*WKTvB1-6&C zUC=>rK=YvuJ*-2^cC4-=ze9p-p*Qqx@W>VmqkdIAG6^8{AYE!U59An8BeII65=nbL ziXm$@heQx(3;Ar?S76f7osW@UG#<%nCS^U6-;*%o(UeQE7&wyWtD=T-0tM4#?`Gcy zLEo_k>519F^vid&cmM}>)BCI4?jVB~f{+m@rJMYk8^mMv3>(4X_P~QO!sJ&Rq(u*T z^ALV*C_$BX0@<_sI+Fwz(28B)qhO5q^0@1Z1cI%(31A@MA_Zs?-3;K_q~Et6)-{?{ zb|_TjYC%_Wgd+Uvp@dAO=?N1L2@5fxLb^k6s+noI={M8wHJg4C2T809Lu46CN8|yu zB+ulUgp=)*@kuUaNJvT%k4#p(ANd}lc@zTNkb+(nO@q)z3#Mp$(cu&+-ZblU0ci({ zI9XL8qZ6a1T~9Z!+pupEfUBC-wz0V5TLJ)x9ypeR^yX3oMAROe0GyXT)ocRI%}_?b zMbw1nngNR87gaRM>7SK~6R_t*oZL%9l-S`2*fnx3)PQgjPz}ngc^c#wH&hf;-hl&k zo!!)9MI5LJlkfR(z-%7R5d+RJABuPkOOoV4`m~mu1c{n}U=cW9P|u(KWma@WMPSM+ zp3W=C_XTDFReB>ja#T*H%bLX#&qkr7YKJ61rC6sb#J>+)BJ4@u3E8b(zJ|(A^@qw; zp2L-nb&@?zSGDX^9dTAkBUR>(`XA`2lkZWYDQdFqMX}`}i6{+b>_=sqAat}y^T!}n z-iSn@bfb+8IbxDSo4ZNnrd>gB!jtL8WIR1V<779-O1$0>9!Cm=!!;o?bvLI2fL*ek zUe!R>8IiwK_W`*MZ6S+%VWun1CMC|X3a55eJ$EQn+KXg(09mA;Ur}&Z0Y*gtNVZ|l zshqo(_YrUsrIwrf`@4Mi?wt>AUE6E$y*pRm*?VpMBGLgBJ+ez5eTqM#NCZFEicws5 zNeXNq`zZ5#O$%ZNkMzUPkK%f37p=;NUhP{e%e9A=OZk-KZ}G_Q9YnA3&GWCD8~C@` zx_r5+#xC*;7tHe)%+1UAIp5mccw?hV_6MfWLMlsS%lbu`BK5 zFf+ZA$#;|sQ7b9;k9_Z3oL2w@5W-USEULNFi@sGeG(5mrG_->NHdc1DU`applfe)> zQ1_0qjk#|SjT|TVCwj*0^#`A%RiMpA{XvhJzKiOlVw$Q9MI12SP;Sag81k2sog*6^0$`|`e3TP_`7m8>Hqo7R(H6wx^dDrs$t%HTT4mI3mCsGS(E^t7 zhUDJhn=Ql!Kz3B=(QNt+R2CdlQ1{nBnkT_J+Qb$$_o(}jYtq)y0=@=$As|@{`%Epl z0Duhr5!{N?k0>Tu4Zh7W#ov~LZUSq7he_BtwB;xVNP4hK2O4FeyjA>~)u|rG0{fY~ z=ymem7c)I%0IE2snej+k2ZRn70nM;>kU}q7Jl{pLY*HIiG`cUTeRVp@$BtQ(N>UH$ z&P&&?(hq7qb#T`}bWd0v91{b(nIF z>pJ63)kp(EIybM?Zrr}})|J~e%80eSt9P&L-rBiQ(>Y&9Yn>qH`8qbJAIYN_IpLTv z{G85X9lzfPN?UxBKjKQ=PLECuDqPX3U$>k{o~xy&noW0%dYk7s(M^AIg{u+Lq9`Cy zOs5zn6J;A}BH<@^%;eYe^rY6b*4MW%ieAZ;+pVntcA@rg`^_y%PuuHTqN}D%eiI#h z5TZ#H5(R?$FtqAV(KZ945!pH-;j}i*{7h)gqh7vGC)GS#7iUE+4PV>CVPwYG=o1Uj zz`m53l(!Q)(@9aEG@c`i@Tzn|SQYKIPbYni zE*Yq+0Aw#%485W{@YcR@A0^4`nO7ZcsX$D6^adZ$$>H3q=hTrszjiQpCbxyuLC}ri z6Zk~0;0w2f`OOI~LrQdW@)<5w@V`X&DsSV81poKy=9!hZLkkZ z47ZAONocUo7(1x2utFDxxbi$$QqQ<^EU|ux{jtOzRKV8Q`5UX3vy!=ymC@2>^M{s` zNZfTAx5KBv`m0;(L!|0;PakF1cSHX^LLpj5dOU&d#rvR!VE7XN-l? zi}<`yI%BNh_pGt1J~Z~cQK9eBLg{6UEht)|r_Xbx)A&AvPsKQ8%z@YGa@lyP3>}RUX?z+vBktk)>oNa3-1s*2qf)D6(V8kf#xcpqka)l-Oje z$kygo4rAXFg0~&H9_tqUT4Ui!s{$3vHcvm=P|lK?nS&VVG?pr>(^zv=hW%3`w_WU=ndwtkQk@e zIckCxcwZ&=8ohxqljMF(uEjJ>u)j|34b`7w$(iydxu4J*T>dO;$Gt`Fr)uLl5}3Ko zWUtAPV+oY=t~hr zYDTzr+w(=#G&={!OQ5qIzY|I??)DDqvzjk+5OYacyo@x2Q2{bd?X~#k) z#mCD}zFk;;$G+0627{ix8_F#qqolalm0?dL)kygEh75Njke62$Ew} zA-OrhoQBLpZ~Be{p-7Sc4}o)vYU%O=A2utcx~mjBnc|BUCd31vW^tBrBzk8qNw zj*Nr_oUnpW_Tcmf!iu}X(oSb_NUK#T;(-h-$8xy$(Le4<4EwMj`upJ1i?|9M@Js~^5AFDl(xRJD6K%5fS_oCPeA=oZp2~r71 z`W^_vR%;-o2q0-g9oGiLs2%Ol_rqOgrY|zDmM!b9g-Gs5r)PNqBnxm;t+-6?b~u1) zm8in%_~8a9b{y$B8_=tU7rly$u&$5z>a~nb-@zGt_sHsaJ0i$9j#_E)$;zXp$M&P8 z<%dUHU|pvdS<#^1#|>R;V;}OVv|w>sfQeGWX}hh4Ry%~|_MBed7c*A>^yQQsk+N*2 zzZlYh?P;Ic?Ru@Q5)*Etbzp`6B}nQ)vI-PyR`vZp+b0fTeRk|~$KTY7Y(aVe?k-Rex4OgwXT7gf@L<~bvcN#VFQ#|$!-T9Az0 zNe&r0F~cay_no+#6vZBVGD@l=MojWyUj!)!_Kjrh=(b7G4?7+3F9<0^t@lY;W=wuGHSUT+Ka}NF=JlM6^*G}G0!VS9+3)^6bQ6K9K)z~r7Y&dHh@<}4m+g67FKi` zAPdlThC&u1R#VuS`sWpfX49uZ32Zn}w2N4ba>|l}1J0fNJDT zZa(4WDmT}-xy{X|Xp(U$dcXoZwWYkvlX>>|hS@xmNpK`svz$$xw)e#o9&2-QQJw`I zQdB`hC79c|VAKtHAEOpeWxpIc%9vboq40^Jf3&cQNrtZK4z8$}Op)ps1U2-bs8gb= z@RSy~jL4_zIOUY%sZ;h`oBjP2=u|OA1-XEJiye!9{N|!n$;8TnOtq-4{0vn+iV-Cv z+=iWn4E7XAyV}Sd{Nu7eB@zZ0Eo$9}{uqw(GzB1H$vG$rZ`BPjFMe+Dat}5h|D&YyWQOVSX z5&bIFR`f>;NBj5S7nRY_SRIi(X-L-Nk#dU|@TyYoAJBmgqcI8)nM$#HL)NpdeIL9G zRP}^nET`fd8dtGelWS?Q#}(9?T0?=T;~3W1`<#p1jL9v>;O{G7KmmfJp5<$iCa;K-a~ibKthE$dyJ2uU<^lkQP;51J zv)4GW%K1SUgCjCY%ZtH0>Wh}w=DGr`-1Hvn>g=qz0yz>JdrQjfgI)_)WoH{HEsxRZ zxUk58k&!`r9@m;N;!wn2exPOq57d=fH<@(*zmtbiajiSZ~&Pz$P z>qHs;B~{0Dvw{2!%kpzge~(FvT3k8LgHq4w_rY5JjLCk^&AFq7V?rU)@6m~-(9mSj z$eBeXv@6CW+Uur9EERp{HC8i1CnYWpz_&Sl0zPKb(vK@Y4Rbe{I=>luK~lnJIDfbD zm#xa@w!DQ^`7M)-LBq?c;E)ZTw79v$4S$j9IKR(5#y}OTTC(HYsGbV*@>lwE`I{VQ tRZ6b`)obRYc^#oXVdikhl36vm)qlEQHA}fl;X-cW>sq~5ni`+@_&-R*$##<9BHL}ShT!eu3jszR;yiVm%F`|N6qOb*~5Me zt9wLpb|$c+O#&EBfFzD%JIEnOf*^+k2#`yH!~udFV!-glw>|~PA=n%OBk&>6#rgiK z?%|LtdpJ|9=U;#Q^}nkA`k(4><;8#e*~9V;qW`3UPagR<@C*M%BeL+-$R#rRd5sJ$ ztC(O_DK5-V_;At3)kTpr4fxb1mV@;7Y%{`FXM9oX|6b+YU*BP=7lQm19VOw6} z@yqi^KIfgiKd;4O>vmLc1fFO5R^4@cdp;izFE@nQvcuIg^d zX~TG|;o4>bf)NP;``BIoiRn7ljlf@X*4x62fd8$XhTY;!Jfc7~JgaVs^)N1|e(_AZ zWtou;`tY#&wi9j0N#-+gHfTq2RhSMI9f-Octb>@kWv`iS7Zj2NtT%&IEFI08_U?8d ztPley6meGqv1yCjW+Mv3ZhYuY5UjhlBKR#K0s&}M$9JMS=HXSKJh>F^`VBRF8T7H* zt}Wu>WT@J*282_7vPk&{F{W@4Nd&IY=qXW8qn(q~CA#@&mU?d@ZSbl;0OcW&O4j08ujpYUz+`%`rh}#WQ`F>G2t{$j3^!b7HO``QTu_`5 z7i_-~Saw|Auy-tH-3}wjLMg>B*1R~gx&7B9PGbk2y?JRP@a#*zvl+OibLoKyc!lAm zmT;bc%`WZR$pfWEAnaOeHy(As=K~xy%llhGLe;7^tj%cREb@Ie$e>Wb?`{0TO(b9g zY<&by$WXXI5%e@RI!jTG>#_Oj`61rbNMSr8q_ox*F~dO(%|`0>d?l_pq2q^<={M{+ z$J`KCJ~Z97E!AgSfRK1*6z6z)aSWUt z^|;zKWd;RpV_&0>x>C9K^3;XcA_dTbL=Ezr$NbqIiUmdl6Nvr<=Kx<$0Jo(` zy&~<7Nd!?WQLjWR{&>Id|1vTk`$y;_Mj1WI)GJfBM9m6WCDt@r7iwgPEYzY$Md}mE zUnhJGAvRFNM4jaM9Xa0ki0eh zZZg18Cc%7SI5Z|J1(eBao!CY zraM0z58aizLkf#AozSJGjJ)aAY@SiP0(_p+=(NmMOT5aBC(@BnH9*?84uJS|9VD1I zC+%lRfU+#v@sMy+tVJsJ?3=DSzGal0gfekuS(5J7juSx_l>6Ikl>56PUIT`54H8!+ z+xd_QD%c|uU*_aGC#U;~l=Mlt<#n~W?ENu6yoo*`FPidIt(?hfS*@T|@qbL4gykL6 zrZQ#JOld8Ok#R0 zI5|vm*tS3q0Ye%VW+0h?-y|WXR!nL>_Kp&VDzSgCQ}Ake4BMv-$9|%W&_#XQmNtVM zl%iFJD>9>YsBdrBKDr9sM5pZ(H68M!G_0lMp|3%iQ0XtckAhN=%AM7qGoexI(uL&= z)S0TuQ3R)i{TFy8(s_Z;!##>p;UQCEowqz+?EJ?K5F=vS_62$ZaVC_MezrBq(%DS! zcS^YiesLSdZb@Zoazpwf6{$^uX}kcmWF>`D0geI59El!aK>Wex^$!kQ4Vmw?IHqtx?t1NjMNa)D0q-u!^ckaFW=F+{m4C1c_p%d+X&MK#K>gXreu6UpJ zE`8eDgPCl#ZPku`a@o5-Uyk!(8@4nq)$8(PQjha;y>WFA(|C$Y33u@!kKGpNl0%p% zF5pZE<`g%%P))h4zUHypoC|GtO}vFBaTf{nUAbOw;Mfq>>w9Kc+(Da%Usy###bK>1 z|7Nw$kuPjsEk(7#>*NnR#C(-;1HbTRNOpe0JkgY985{*4S^QMiqz59Lm%w7+sm%i*pzO-g+%lS0f>s8QG)5T*nZlk30w(+?TK+jG2E^c9Ig!fPa)=0fwB03$3bt z4J0<63KJaO;E6wlo!-jQip6@NbRQlO&dA~x78qxtmY-?EpYzf`=d~+4Qx;$2Jd;`y zJdXyYTY?qP!oz#m@HW&9)$e18ZV2)Ao2(JD+;9FMTyv!JX} zzt}l(gCd-gzSxj#MA{;?H0s1R<&g+iOK`&qe9qRQB1JedW!Uj)mU+i`ELdWBU~rKu z#ox)nxL=a@UhMQ?FdVh#48YN=!iPCAr|sURs7g&-91Y2y(Fiqha|9O(%~g%t;H(W( z^U&ZzM!2u~^4eE?+`XmF7UPDSCVBnz6xEFAAw?K@0fl+tfx?v(h6F!B%}Fi-9O@HF zCIcpAEi`g^RTWK1G?L~SS_eVE%hP;arSQ4Qa0-LS&hoVv&k9=Z?ZuI_wloOwC|Pr| zFTBe#HD{RO)-gql%)m;H@AYGhaaVRCxlH3>Ku2eE7#BtdPHKh1H!=}WImtEf)1xC? z$*n_u1Tgz4Syk;(McpyMWwrnR^kr6Eb%ZIh~p(sd-A47f^;(tTA@XY8LJf zlicNg?xlY2NLs<<3npDi?c&jbh2Ou{ug1DFRQ+1`7Sfu zzsyEhH}psJ0yVL+SNmN7R{VVy={oKvvV1lHYcLhYB?JB>$NUWjoKF}q{DqwLHD-6k zlGc|fx&U~Zw)K-7s+zcEy(VYE*HHdPcq-lX}w9(I^)C(yh2?m7TU_kpd7wv`;AHZ z2m?L>j*t-RI$2*~pN~}ssPsC+RNA92DJg3f{q^M>D` zJ&L0*_CPQCTGMy?pc#g;_aZ)i=3T{6oGw#ajg2P?Y9x zio&1fv8mQAu2M&4t4+P>L0S45w{@p!6SIsK7_+yf4*U{Vq6y!9hz=0uUb^n&NN@=0We}*^Ho{%hRlQIz*Do-on>%HttT|wJ3`T$)WjDiTd4&2T1OZP z#^c*NN?m+W^M-WyW=qHese}L@b02MMwzM@@0$I9;DeRVj1wt+fxYWd126b_H@rl&` zlK$4$WnS*N^(e&yya~(m4K^g$1Z63nQUOyY5|n87I?pWrq7>a`Aq5>U_fybIN-k=| zm7(YkHQ$n}o}<0|v4Q+?itdv2SZ=z>*ubDEkq2;VbpY1}V~>j-%aRrdYOxDLzb%>X zpDWSVsQI>>=>$dhsEZWbEOiI=v8PiPt9gezXnS2xvft7>MLXZ&W!`-B8TC%n&ZoTp zHy?%6J3~87itbZaM!9Z2`a1Q_Quh?k{~CsMVUXUX=mA-4#JH?e7s9$h-P3H)KoHBJ zF8HlUUF^pu)5mhD3j^*kf|k#)o>E0_;7)mE%f|1c^2*LTjQPz+x2SiHcCO2Lz)j#C z%r58b!USX2@vr$Fbzy<95kD_;@%^NzJ=pqrnZN&4USUo40_}h;F?g8)g-!2r$gnl_wv8A0IF^8P3SE}>kfAwzjO?wPGLMAg5t ze_{$Jzm1VYS~zyv>Jo)RFZ~OAL=mH1z82YsOHF^X z&G+!~4jtDiZP)T&kWmCi`@jUDj<_Hn)DgpLY|3i@8JtW2^9Y=bpCCA9NqGCvPw?J< z^|1f4d{JM)1c3s{ehp*TAeT0toSVKexoRmiYM^vz1)nM5pD%4fC{dH_+XcQD>V(mhF z7}rW1$FeQFEZ`RhX{YC}@H}QqR(L#FA?{+J9o0HjesHzeoID42Te!PeV^oLtO>6E2Doi~*l-;x5v~RVUvZLmY9t3P7C&xg2!m|9BjN01Fg|dQBkdms~W< z;CQX`O%Q+Yq7xe-G3U1jHT?medLWhwE@O46+fZzLt?Z`*bbdOapMO_Ico+4Bg#^%o zd{V(GMQ!A+e36hes_=BbZ_OCxmnl+A)svLYIbq{giqYgNu^Q_b8IA%@&{2pxx~y$$ zozoAYfKsRu6cBumX4}DV=aQJ`<=y!@WVH_HGc%$Cp7-ebV z>OmC5lPo6*$JB9+TxYKN+yd~<;(buVQ$_^$*e_ka+}GOZh;Z_{t@lH9^3jPBMmww- z6%e`}Z2NVm)ma9ofE6T9?e%8^(nhElPdm0b$j4eAy*8XxhogE3@9#IT`a_rqwYS@T zEiR}Hjq}W5L7YRxB8>Bn2c)n$N?&n|xpOvoW0YzNt~?33a`DCk0Y4b9H5mmD9k1;o z*zoyvtlg+A-+kwUdrJ@RzI(s(01?W4ZUw>v@FegO0dbX8o9$Pd1BuWr@HW`EEi9za z^flL9$BTeyV9a7?S;@1Kt%1vZ1ZemP25M3nHYJ$>0PkmHYyoXjb4hyJuu&-^cg}Ep zbAY5yOUHXI0D`-eif65Jk~g(4&T=}Y|6b=>=gbEj3&lj~i=sXtNJxrE=PV1+THw0D zcA^;62E*rImu69~l*^y?I$8YNCm^gprAfSiOd=rqK9dMj0sfnTam2;{Od=xl+B0nt z@3e9o0mLuIhAEX4T#G{w9}pD*!K1UV#i@+Uzqy+b2P?y6HiA3}t&?C+U$GjK;5_+2 zs?Lw25-*`Mb3@hgY6l)o)#4)%A%yb|Sjjq5A)ZLu68=|}9EuqjfM|_?zKsth5$yyJ z=7}d5$N|7c#R}55cb(NcaGRwTPxSAnEYGQ49taz$#d2eU3iv3INr;*fL^)Q))xsVa znFDNLO@<;2X-|_8s*tqDS@($>mk=bfeW&f=$p&aEz76V&07+c5R`Cq4u^CsCs+Rc? zg>6c+xY{sVQDeiDJ&h5}BjcP1G$3$i4B`3VwhW@TJ@GDpb}DS87fgP5*E!5yKpTRf zVAhq92mgXwipev*co>;hJ7Rl}=O;$483z96zr<%g*GW`~_!dK!ibTL|A@Ktw^O6B7WMQn4IB~Cc5 zB-j@f2-(1E!kf!=gd=l~zZT#j9$V8;jB-;65wDOLF)rYchys|y5gbUu(xfXG7eP8R ziUdcT)Ke&gmag&OA|C&+{>SSaOf|v@M;b+$lM)gpVhi&&ArYd;wH2=AU?`q)7GUS` zj6$$wi%T**USHi6zsJQaUKYl@G(sjHa`93n&I{9rams=X#WXq^cqvs6+YTOt*hZ0`-s1cj z=WVYQ?HbHNiTf(}EuoC8#mDzENW#f++Ea)3ogmY^zl_r-^@lxml8dF)OBv%L<*6Z8;&gv5Y2@?ivL zl_8~_WziUx1pt)pzxYG$|6NYLha}dvjM2VQQM+aolhc7w;bo|TR9RAa83k2iWO-ML zsj@4mOsqvlIphN(KlUA<`)Qt1CTBSJ5|Z!W7k-;hg(C&6lAG3!WhU?lWg0{zM#$JuA+BEJBhjiuvhcqQ4an_wW-_$ zR#wPX`46FJUQ<~satXod3Tg`4Feoqq2t4wOf77{PJn!KLJiPuP;5sT{7qm%WG{V2^ zSf-kt0^H&3DZm}ePVrCCS khJ^WQ?{5sx8s_+61EhqdYz%+Z%xJbcUY(gbH+$y)0WyD%#{d8T diff --git a/GoogleScraper/__pycache__/database.cpython-34.pyc b/GoogleScraper/__pycache__/database.cpython-34.pyc deleted file mode 100644 index 68bc2e893f971a7c138a89f56cd0d797bf3dfc43..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9023 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 RrAw9KQe$a$_SE93-vfdlATR&` diff --git a/GoogleScraper/__pycache__/http_mode.cpython-34.pyc b/GoogleScraper/__pycache__/http_mode.cpython-34.pyc deleted file mode 100644 index 2774016a71f6d4f1c018af85ae2752adcced0250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8836 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 diff --git a/GoogleScraper/__pycache__/log.cpython-34.pyc b/GoogleScraper/__pycache__/log.cpython-34.pyc deleted file mode 100644 index b8c0ed1f098373c4150e572189ff735ce3fc7e1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1241 zcmah|&2G~`5T0E-PMjtLN~u(Yz?Vw+KqDap7lbGkEtRUYBAgFn97?TNw$@Ih8*^53?(@CI4EJ$;H80A51`AtQnGF}Eb zPg5p>BQAm+&eNRrV-Zc5(CtOllS;6tID5AKIFhl-3Kq)XNwEI7jON>%%~*a-FPM~3 zijKX|*L8!Gm8teqruHnVZb;mkOS;{+;on7Nk|VeyPo+l4gbAVjZ7zyPDYUon!auDU zCCT3#p{r{aUVBwW0~(LCk7-pmzk#@e4fws;9r1#7%j}rvQPw>We9U4cyAzSkBE`B3 zN#D>g@W$lSa+pqr6-?c9^%e@C9nz-vaN(DTyJ!)n?UxiqY=n7?Wj+kgQNf1eB&?Z% zpth?NOviC7C>#?IPeEb#vCq|fly;K)q1)5m&ffl;%{}eUm^kDzQ>S7D1BR|JVA{hf zXQdJyqqtdl#6w3rg-i!dKFfunY%5ZUW#i@WsanO2^iTjo)KKV^g+bV; z{+X(>?rv{;ziO~4l;vXUr2V&7N!Wnb7?{};w#bc_1y80qdu0kKTPRvs=i79--Ju=t E4=Xh!*#H0l diff --git a/GoogleScraper/__pycache__/output_converter.cpython-34.pyc b/GoogleScraper/__pycache__/output_converter.cpython-34.pyc deleted file mode 100644 index 452c3b8d9961cc132968eb5836e0aaf4e3b5d4ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3344 zcmZuz%WmAr6}?5W*$=TT$x<{{G7k=B9GHpI3MN1>Fa*P%kzyb)G)7tj0X-uy6iKPs zVw0^ZwrmOZ%CpHje-LDokH{jMZ1M-S%_iRD1GE_A++w$^M<}tnSdUxxo^v1dU$5Kw z>9Z@Ti>=s&@${(~mLzo49GaM>3$5c6@12G+c9)4(=;i*kp?4hd)OInn)=?5IxrngY+E+vq;K#4~`K<5=ox|H1E1%p*e7AaXW{h#o;{b2bW ztfiemXm>J^Sy6HC>#{h^jsitju>X!$jG_I6im3~zCBW&@Z-(*_(hgqKXV%CQr{$+B%#;Z2aR79_#n_#$J z6NQ4?k)RPYvn?eGb@@sgF(3wflfu-1k#Q)zyv zTfCx(#_8Wk-o=?0I~&7toNg4^ahXTi#tT^*?Kc4WX;h^f&&u*BPy4ZqCaJvfRht#U z_|sGZj^5-o zS~iUw2CN3Drm-gQt!0U-!E;#4fSF+F2ky>=c&Od1NYbKu$M_H0s+3iDoSv!Oz?F*_ zl3i{Pg`^!OPdmwUJdvzdV96yOw*jg_uWnZ68$L!ywa}1gixu&SIA6PEwBaTeya*5f zvL43bPtmC@2I=euFm(0}`mq@F_X7(?><9K0H5+kWsx%Nrxf^2Le zr4yFy1Wl%nJtGWtCk)4BGR?W~h2hCG%4ajpFigrg4CN}M8Iv!0ND5jUIV~C&_NJ*s>?XYzf)y!SicN_H=q;o0ROic9r-0kY~)aJ zZ$92I<1aXRc^vXgR3BR;kLl7UBBB#W$COJv^%tsK8a1hEu^c2ZL?B|mLgo?zi=ou0 zVKs5Y*Yx?l<4=zW8=mFU}%l9(3o89=nvh2Sd-DUaU^FjYf9x zJ?I=}X`V37N^;x;UERcf-Yac=OnG)hvbZFM#~&(hvuDdRMhXy|J8%O9C;@D5_Z^U*vRZoYb8qQauB z{g3DkQsc}iY_r}ZMr;u$Kc_ur)H2k>hO>DN5GN3hIor(rlV1I4E@f+fo8Hut>XVUD z92&Xw+IX0_tOz^`zaZLT{Tw46-r}&j;^dt6W=GTxh2z@nN9%B#x)8EQb?De3wsV1x zHyeLsA4OH{2VV470MV~Xnflc*^(T>3Y2tH@L;oo4bviyCvjD{fD`cvsISS38EXTg$ z44oB6epZ;t2xYTG5=RcdEI-CkW^%USLaFrY;`wk^rlb!~`M=9|hZzo<7IBrKo{gh3 z{~-0_D9@pyIY09IX(Z#}c5##yvwGo|(o7n~<0u}oesdvFo>gZ(e{Yx;*96@b^N52YrN0!}?MeM{Kv(1(8H=b5Vf^3dli!hCxKtdCH$iy0_S<&k=1Br(*y z@{#}a>JBrfn=|B19GjSnL7jOxP}#Hlc-1e_WG1KYe@fq5?AEpaBA*<)geZS)-1*NI zow(FDF@`kG;S|`~>it@aV=Yc^#NI_`GeLmI<#_TK35OKt&^DdlSL{2XxdPP+_BQhp z9I3~>_d85#(eAV7-+cA-xo)FyACwAAykiUG2WWNzPu|C`ZprfH7krd%tg`krR~DsEV}1619z`S|m3N z)XTRl*@gtg<&~CQWRni+*v~A_S`wbMjPI^k7pvldkWaDV8W)$fxJdw zdhwZMMuRouf$|r;+bUJ@x);hu);b4|_K^(p4$AOb(^yOKexNj839tF)3| z@fhc8-3V(2`O;*3wJtrJ;0^vpt1J4O%3+E|YqP#pJmx4d1;Yb*{I`U^wYDo<@uju0 KviPC*`TqcE#ScyZ diff --git a/GoogleScraper/__pycache__/parsing.cpython-34.pyc b/GoogleScraper/__pycache__/parsing.cpython-34.pyc deleted file mode 100644 index d80a12e91dfd20b4ce42eab80d193054cd99bed3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26114 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 diff --git a/GoogleScraper/__pycache__/proxies.cpython-34.pyc b/GoogleScraper/__pycache__/proxies.cpython-34.pyc deleted file mode 100644 index 3d69d4ba300201e08104aafa1ede3d042c0a0085..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4417 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 From fd0b920c9c8758ef54b22d2084928ac5de53114a Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 18 Mar 2015 06:34:13 +0000 Subject: [PATCH 03/11] modified --- GoogleScraper/config.cfg | 5 +++ GoogleScraper/selenium_mode.py | 60 ++++++++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/GoogleScraper/config.cfg b/GoogleScraper/config.cfg index 840f43dd..1b7667ac 100644 --- a/GoogleScraper/config.cfg +++ b/GoogleScraper/config.cfg @@ -106,6 +106,11 @@ check_proxies: True ; response when something fails. raise_exceptions_while_scraping: False +; The following two options only make sense when search_engine is set to "googleimg" +; do NOT use them unless you are sure what you are goint to do +image_search_type: None +image_size: None + ; Global configuration parameters that apply on all modes. [GLOBAL] ; The proxy file. If this is a valid file path, each line will represent a proxy. diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index b0a358b3..c5df73d1 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -62,7 +62,8 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'baidu': '.n', 'ask': '#paging div a.txt3.l_nu', 'blekko': '', - 'duckduckgo': '' + 'duckduckgo': '', + 'googleimg': '#pnnext', } input_field_selectors = { @@ -74,6 +75,22 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'duckduckgo': (By.NAME, 'q'), 'ask': (By.NAME, 'q'), 'blekko': (By.NAME, 'q'), + 'google': (By.NAME, 'q'), + 'googleimg': (By.NAME, 'as_q'), + } + + param_field_selectors = { + 'googleimg': { + 'image_type': (By.NAME, 'imgtype'), + 'image_size': (By.NAME, 'imgsz'), + }, + } + + param_values = { + 'googleimg': { + 'image_type': None, + 'image_size': None, + }, } normal_search_locations = { @@ -84,7 +101,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'baidu': 'http://baidu.com/', 'duckduckgo': 'https://duckduckgo.com/', 'ask': 'http://ask.com/', - 'blekko': 'http://blekko.com/' + 'blekko': 'http://blekko.com/', } image_search_locations = { @@ -96,6 +113,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'duckduckgo': None, # duckduckgo doesnt't support direct image search 'ask': 'http://www.ask.com/pictures/', 'blekko': None, + 'googleimg':'https://www.google.com/advanced_image_search', } def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): @@ -118,6 +136,11 @@ def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): self.xvfb_display = Config['SELENIUM'].get('xvfb_display', None) + for param_key in self.param_values: + cfg = Config['SEARCH'].get(param_key, None): + if cfg: + self.param_values[param_key] = cfg + # get the base search url based on the search engine. self.base_search_url = get_base_search_url_by_search_engine(self.search_engine_name, self.scrape_method) super().instance_creation_info(self.__class__.__name__) @@ -308,6 +331,12 @@ def _get_search_input_field(self): """ return self.input_field_selectors[self.search_engine_name] + def _get_search_param_fields(self): + if self.search_engine_name in self.param_field_selectors: + return self.param_field_selectors[self.search_engine_name] + else: + return {} + def _wait_until_search_input_field_appears(self, max_wait=5): """Waits until the search input field can be located for the current search engine @@ -329,6 +358,20 @@ def find_visible_search_input(driver): logger.error('{}: TimeoutException waiting for search input field: {}'.format(self.name, e)) return False + def _wait_until_search_param_fields_appears(self, max_wait=5): + def find_visible_search_param(driver): + for param, field in self._get_search_param_fields().items(): + input_field = driver.find_element(*field) + if not input_field: + return False + return True + + try: + fields = WebDriverWait(self.webdriver, max_wait).until(find_visible_search_param) + return fields + except TimeoutException as e: + logger.error('{}: TimeoutException waiting for search param field: {}'.format(self.name, e)) + return False def _wait_until_search_input_field_contains_query(self, max_wait=5): """Waits until the search input field contains the query. @@ -447,6 +490,19 @@ def search(self): self.search_input.clear() time.sleep(.25) + self.search_params = self._get_search_param_fields() + if self.search_params: + wait_res = self._wait_until_search_param_fields_appears() + if wait_res is False: + raise Exception('Waiting search param input fields time exceeds') + for param, field in self.search_params.items(): + js_tpl = 'document.getElementBy%s("%s").setAttribute("value", "%s")'; + if field[0] == By.ID: + js_str = js_tpl % ('Id', field[1], self.param_values[param]) + elif field[0] == By.NAME: + js_str = js_tpl % ('Name', field[1], self.param_values[param]) + webdriver.executeScript(js_str) + try: self.search_input.send_keys(self.query + Keys.ENTER) except ElementNotVisibleException as e: From 6868480a698322405daf035cc36fb9083fe5b1d7 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Wed, 18 Mar 2015 06:42:50 +0000 Subject: [PATCH 04/11] modified --- GoogleScraper/selenium_mode.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index c5df73d1..f3753e64 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -137,7 +137,7 @@ def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): self.xvfb_display = Config['SELENIUM'].get('xvfb_display', None) for param_key in self.param_values: - cfg = Config['SEARCH'].get(param_key, None): + cfg = Config['SEARCH'].get(param_key, None) if cfg: self.param_values[param_key] = cfg From 07f51d4985366f813ec0178513c633af3dadabdf Mon Sep 17 00:00:00 2001 From: jffifa Date: Wed, 18 Mar 2015 15:19:55 +0800 Subject: [PATCH 05/11] modified --- GoogleScraper/config.cfg | 2 +- GoogleScraper/parsing.py | 2 +- GoogleScraper/selenium_mode.py | 25 +++++++++++++++---------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/GoogleScraper/config.cfg b/GoogleScraper/config.cfg index 1b7667ac..d711a517 100644 --- a/GoogleScraper/config.cfg +++ b/GoogleScraper/config.cfg @@ -108,7 +108,7 @@ raise_exceptions_while_scraping: False ; The following two options only make sense when search_engine is set to "googleimg" ; do NOT use them unless you are sure what you are goint to do -image_search_type: None +image_type: None image_size: None ; Global configuration parameters that apply on all modes. diff --git a/GoogleScraper/parsing.py b/GoogleScraper/parsing.py index 58e62f59..361f6232 100644 --- a/GoogleScraper/parsing.py +++ b/GoogleScraper/parsing.py @@ -953,7 +953,7 @@ def get_parser_by_search_engine(search_engine): Raises: NoParserForSearchEngineException if no parser could be found for the name. """ - if search_engine == 'google': + if search_engine == 'google' or search_engine == 'googleimg': return GoogleParser elif search_engine == 'yandex': return YandexParser diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index f3753e64..53936226 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -86,7 +86,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): }, } - param_values = { + search_params = { 'googleimg': { 'image_type': None, 'image_size': None, @@ -136,10 +136,7 @@ def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): self.xvfb_display = Config['SELENIUM'].get('xvfb_display', None) - for param_key in self.param_values: - cfg = Config['SEARCH'].get(param_key, None) - if cfg: - self.param_values[param_key] = cfg + self._get_search_param_values() # get the base search url based on the search engine. self.base_search_url = get_base_search_url_by_search_engine(self.search_engine_name, self.scrape_method) @@ -323,6 +320,13 @@ def build_search(self): self.webdriver.get(self.starting_point) + def _get_search_param_values(self): + self.search_param_values = {} + for param_key in self.search_params: + cfg = Config['SCRAPING'].get(param_key, None) + if cfg: + self.search_param_values[param_key] = cfg + def _get_search_input_field(self): """Get the search input field for the current search_engine. @@ -490,17 +494,18 @@ def search(self): self.search_input.clear() time.sleep(.25) - self.search_params = self._get_search_param_fields() - if self.search_params: + self.search_param_fields = self._get_search_param_fields() + + if self.search_param_fields: wait_res = self._wait_until_search_param_fields_appears() if wait_res is False: raise Exception('Waiting search param input fields time exceeds') - for param, field in self.search_params.items(): + for param, field in self.search_param_fields.items(): js_tpl = 'document.getElementBy%s("%s").setAttribute("value", "%s")'; if field[0] == By.ID: - js_str = js_tpl % ('Id', field[1], self.param_values[param]) + js_str = js_tpl % ('Id', field[1], self.search_param_values[param]) elif field[0] == By.NAME: - js_str = js_tpl % ('Name', field[1], self.param_values[param]) + js_str = js_tpl % ('Name', field[1], self.search_param_values[param]) webdriver.executeScript(js_str) try: From 6a9025515087dda3df4f1c3c6a49a418f51c7821 Mon Sep 17 00:00:00 2001 From: jffifa Date: Thu, 19 Mar 2015 16:14:08 +0000 Subject: [PATCH 06/11] modified --- GoogleScraper/selenium_mode.py | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index 53936226..7b5656de 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -81,8 +81,8 @@ class SelScrape(SearchEngineScrape, threading.Thread): param_field_selectors = { 'googleimg': { - 'image_type': (By.NAME, 'imgtype'), - 'image_size': (By.NAME, 'imgsz'), + 'image_type': (By.ID, 'input_imgtype'), + 'image_size': (By.ID, 'input_imgsz'), }, } @@ -136,7 +136,7 @@ def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): self.xvfb_display = Config['SELENIUM'].get('xvfb_display', None) - self._get_search_param_values() + self.search_param_values = self._get_search_param_values() # get the base search url based on the search engine. self.base_search_url = get_base_search_url_by_search_engine(self.search_engine_name, self.scrape_method) @@ -321,11 +321,13 @@ def build_search(self): self.webdriver.get(self.starting_point) def _get_search_param_values(self): - self.search_param_values = {} - for param_key in self.search_params: - cfg = Config['SCRAPING'].get(param_key, None) - if cfg: - self.search_param_values[param_key] = cfg + search_param_values = {} + if self.search_engine_name in self.search_params: + for param_key in self.search_params[self.search_engine_name]: + cfg = Config['SCRAPING'].get(param_key, None) + if cfg: + search_param_values[param_key] = cfg + return search_param_values def _get_search_input_field(self): """Get the search input field for the current search_engine. @@ -501,11 +503,19 @@ def search(self): if wait_res is False: raise Exception('Waiting search param input fields time exceeds') for param, field in self.search_param_fields.items(): - js_tpl = 'document.getElementBy%s("%s").setAttribute("value", "%s")'; if field[0] == By.ID: - js_str = js_tpl % ('Id', field[1], self.search_param_values[param]) + js_tpl = ''' + var field = document.getElementById("%s"); + field.setAttribute("value", "%s"); + ''' elif field[0] == By.NAME: - js_str = js_tpl % ('Name', field[1], self.search_param_values[param]) + js_tpl = ''' + var fields = document.getElementsByName("%s"); + for (var f in fields) { + f.setAttribute("value", "%s"); + } + ''' + js_str = js_tpl % (field[1], self.search_param_values[param]) webdriver.executeScript(js_str) try: From f16ee7f9fc3f53ad4b8ed442e055cc4029281a4c Mon Sep 17 00:00:00 2001 From: jffifa Date: Thu, 19 Mar 2015 16:19:04 +0000 Subject: [PATCH 07/11] modified --- GoogleScraper/selenium_mode.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index 7b5656de..8c007896 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -81,8 +81,8 @@ class SelScrape(SearchEngineScrape, threading.Thread): param_field_selectors = { 'googleimg': { - 'image_type': (By.ID, 'input_imgtype'), - 'image_size': (By.ID, 'input_imgsz'), + 'image_type': (By.ID, 'imgtype_input'), + 'image_size': (By.ID, 'imgsz_input'), }, } From d503f52cdef9ec5e1cae3b326ca36ab0036ab2de Mon Sep 17 00:00:00 2001 From: jffifa Date: Thu, 19 Mar 2015 16:26:14 +0000 Subject: [PATCH 08/11] modified --- GoogleScraper/selenium_mode.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index 8c007896..ed4bbe34 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -516,7 +516,8 @@ def search(self): } ''' js_str = js_tpl % (field[1], self.search_param_values[param]) - webdriver.executeScript(js_str) + raise Exception(js_str) + self.webdriver.execute_script(js_str) try: self.search_input.send_keys(self.query + Keys.ENTER) From 5ba8c9c084f9ace6af5c4cb8e85dc4b5a5155d42 Mon Sep 17 00:00:00 2001 From: jffifa Date: Thu, 19 Mar 2015 16:26:46 +0000 Subject: [PATCH 09/11] modified --- GoogleScraper/selenium_mode.py | 1 - 1 file changed, 1 deletion(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index ed4bbe34..6155ffb9 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -516,7 +516,6 @@ def search(self): } ''' js_str = js_tpl % (field[1], self.search_param_values[param]) - raise Exception(js_str) self.webdriver.execute_script(js_str) try: From cebb27374c6c1706d942bdbc4c8a8837e374ddea Mon Sep 17 00:00:00 2001 From: jffifa Date: Sat, 21 Mar 2015 14:41:57 +0800 Subject: [PATCH 10/11] modified --- GoogleScraper/parsing.py | 2 +- GoogleScraper/selenium_mode.py | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/GoogleScraper/parsing.py b/GoogleScraper/parsing.py index 361f6232..bfa2a2b9 100644 --- a/GoogleScraper/parsing.py +++ b/GoogleScraper/parsing.py @@ -961,7 +961,7 @@ def get_parser_by_search_engine(search_engine): return BingParser elif search_engine == 'yahoo': return YahooParser - elif search_engine == 'baidu': + elif search_engine == 'baidu' or search_engine == 'baiduimg': return BaiduParser elif search_engine == 'duckduckgo': return DuckduckgoParser diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index 6155ffb9..ca79c3b1 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -64,6 +64,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'blekko': '', 'duckduckgo': '', 'googleimg': '#pnnext', + 'baiduimg': '.n', } input_field_selectors = { @@ -77,6 +78,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'blekko': (By.NAME, 'q'), 'google': (By.NAME, 'q'), 'googleimg': (By.NAME, 'as_q'), + 'baiduimg': (By.NAME, 'word'), } param_field_selectors = { @@ -114,6 +116,7 @@ class SelScrape(SearchEngineScrape, threading.Thread): 'ask': 'http://www.ask.com/pictures/', 'blekko': None, 'googleimg':'https://www.google.com/advanced_image_search', + 'baiduimg': 'http://image.baidu.com/', } def __init__(self, *args, captcha_lock=None, browser_num=1, **kwargs): @@ -499,6 +502,7 @@ def search(self): self.search_param_fields = self._get_search_param_fields() if self.search_param_fields: + print('herhehehre') wait_res = self._wait_until_search_param_fields_appears() if wait_res is False: raise Exception('Waiting search param input fields time exceeds') From b2eb7a10bcf6b48b623cb1fa0c145d82a7eaef18 Mon Sep 17 00:00:00 2001 From: jffifa Date: Sat, 21 Mar 2015 14:45:36 +0800 Subject: [PATCH 11/11] modified --- GoogleScraper/selenium_mode.py | 1 - 1 file changed, 1 deletion(-) diff --git a/GoogleScraper/selenium_mode.py b/GoogleScraper/selenium_mode.py index ca79c3b1..1180d851 100644 --- a/GoogleScraper/selenium_mode.py +++ b/GoogleScraper/selenium_mode.py @@ -502,7 +502,6 @@ def search(self): self.search_param_fields = self._get_search_param_fields() if self.search_param_fields: - print('herhehehre') wait_res = self._wait_until_search_param_fields_appears() if wait_res is False: raise Exception('Waiting search param input fields time exceeds')