f ž _Ð$ã@sXddlZddlZddlZdgZe dd¡ZGdd„dƒZGdd„dƒZGdd „d ƒZ dS) éNÚRobotFileParserÚ RequestRatezrequests secondsc@sneZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z dd„ZdS)rÚcCs2g|_g|_d|_d|_d|_| |¡d|_dS)NFr)ÚentriesÚsitemapsÚ default_entryÚ disallow_allÚ allow_allÚset_urlÚ last_checked©ÚselfÚurl©rú+/usr/lib64/python3.10/urllib/robotparser.pyÚ__init__s zRobotFileParser.__init__cCs|jS©N)r ©r rrrÚmtime%szRobotFileParser.mtimecCsddl}| ¡|_dS)Nr)Útimer )r rrrrÚmodified.szRobotFileParser.modifiedcCs&||_tj |¡dd…\|_|_dS)Néé)rÚurllibÚparseÚurlparseÚhostÚpathr rrrr 6szRobotFileParser.set_urlc Csˆztj |j¡}WnTtjjyf}z8|jdvr8d|_n|jdkrR|jdkrRd|_WYd}~n&d}~00|  ¡}|  |  d¡  ¡¡dS)N)i‘i“Tiiôzutf-8) rZrequestÚurlopenrÚerrorÚ HTTPErrorÚcoderr ÚreadrÚdecodeÚ splitlines)r ÚfÚerrÚrawrrrr";s zRobotFileParser.readcCs,d|jvr|jdur(||_n |j |¡dS©NÚ*)Ú useragentsrrÚappend)r ÚentryrrrÚ _add_entryHs  zRobotFileParser._add_entrycCsPd}tƒ}| ¡|D]}|sP|dkr4tƒ}d}n|dkrP| |¡tƒ}d}| d¡}|dkrn|d|…}| ¡}|s|q| dd¡}t|ƒdkr|d ¡ ¡|d<tj   |d ¡¡|d<|ddkrú|dkrä| |¡tƒ}|j   |d¡d}q|ddkr.|dkr6|j   t|ddƒ¡d}q|dd krb|dkr6|j   t|dd ƒ¡d}q|dd kr |dkr6|d ¡ ¡ršt|dƒ|_d}q|dd kr|dkr6|d d ¡}t|ƒdkr|d ¡ ¡r|d ¡ ¡rtt|dƒt|dƒƒ|_d}q|ddkr|j  |d¡q|dkrL| |¡dS)Nrréú#ú:z user-agentZdisallowFZallowTz crawl-delayz request-rateú/Zsitemap)ÚEntryrr-ÚfindÚstripÚsplitÚlenÚlowerrrÚunquoter*r+Ú rulelinesÚRuleLineÚisdigitÚintÚdelayrÚreq_rater)r ÚlinesÚstater,ÚlineÚiZnumbersrrrrQsj              ÿ  zRobotFileParser.parsecCsž|jr dS|jrdS|jsdStj tj |¡¡}tj dd|j|j |j |j f¡}tj  |¡}|sfd}|j D]}| |¡rl| |¡S|jrš|j |¡SdS)NFTrr1)rr r rrrr8Ú urlunparserÚparamsÚqueryÚfragmentÚquoterÚ applies_toÚ allowancer)r Ú useragentrZ parsed_urlr,rrrÚ can_fetchšs& ÿ    zRobotFileParser.can_fetchcCs<| ¡s dS|jD]}| |¡r|jS|jr8|jjSdSr)rrrHr=r©r rJr,rrrÚ crawl_delay·s   zRobotFileParser.crawl_delaycCs<| ¡s dS|jD]}| |¡r|jS|jr8|jjSdSr)rrrHr>rrLrrrÚ request_rateÁs   zRobotFileParser.request_ratecCs|js dS|jSr)rrrrrÚ site_mapsËszRobotFileParser.site_mapscCs,|j}|jdur||jg}d tt|ƒ¡S)Nz )rrÚjoinÚmapÚstr)r rrrrÚ__str__Ðs  zRobotFileParser.__str__N)r)Ú__name__Ú __module__Ú __qualname__rrrr r"r-rrKrMrNrOrSrrrrrs    I  c@s$eZdZdd„Zdd„Zdd„ZdS)r:cCs<|dkr|sd}tj tj |¡¡}tj |¡|_||_dS)NrT)rrrCrrGrrI)r rrIrrrrÚs  zRuleLine.__init__cCs|jdkp| |j¡Sr()rÚ startswith)r ÚfilenamerrrrHâszRuleLine.applies_tocCs|jr dndd|jS)NZAllowZDisallowz: )rIrrrrrrSåszRuleLine.__str__N)rTrUrVrrHrSrrrrr:×sr:c@s,eZdZdd„Zdd„Zdd„Zdd„Zd S) r2cCsg|_g|_d|_d|_dSr)r*r9r=r>rrrrrëszEntry.__init__cCs‚g}|jD]}| d|›¡q |jdur<| d|j›¡|jdurf|j}| d|j›d|j›¡| tt|j ƒ¡d  |¡S)Nz User-agent: z Crawl-delay: zRequest-rate: r1Ú ) r*r+r=r>ZrequestsZsecondsÚextendrQrRr9rP)r ÚretÚagentZraterrrrSñs   z Entry.__str__cCsD| d¡d ¡}|jD]&}|dkr*dS| ¡}||vrdSdS)Nr1rr)TF)r5r7r*)r rJr\rrrrHýs zEntry.applies_tocCs"|jD]}| |¡r|jSdS)NT)r9rHrI)r rXrArrrrI s   zEntry.allowanceN)rTrUrVrrSrHrIrrrrr2és  r2) Ú collectionsÚ urllib.parserZurllib.requestÚ__all__Ú namedtuplerrr:r2rrrrÚ s B