o ?OgÐ$ã@sZ ddlZddlZddlZdgZe dd¡ZGdd„dƒZGdd„dƒZGdd „d ƒZ dS) éNÚRobotFileParserÚ RequestRatezrequests secondsc@speZdZ ddd„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ú9/opt/alt/python310/lib64/python3.10/urllib/robotparser.pyÚ__init__s  zRobotFileParser.__init__cCs |jS©N)r ©r rrrÚmtime%szRobotFileParser.mtimecCs ddl}| ¡|_dS)Nr)Útimer )r rrrrÚmodified.szRobotFileParser.modifiedcCs( ||_tj |¡dd…\|_|_dS)Néé)rÚurllibÚparseÚurlparseZhostÚpathr rrrr 6s zRobotFileParser.set_urlc Cs¶ z tj |j¡}Wn@tjjyJ}z2|jdvrd|_n|jdkr1|jdkr?d|_WYd}~dSWYd}~dSWYd}~dSWYd}~dSd}~ww|  ¡}|  |  d¡  ¡¡dS)N)i‘i“Tiiôzutf-8) rZrequestZurlopenrÚerrorZ HTTPErrorÚcoderr ÚreadrÚdecodeÚ splitlines)r ÚfÚerrÚrawrrrr;s ÿÿ€ýzRobotFileParser.readcCs2d|jvr|jdur||_dSdS|j |¡dS©NÚ*)Ú useragentsrrÚappend)r ÚentryrrrÚ _add_entryHs   þzRobotFileParser._add_entrycCsL d}tƒ}| ¡|D] }|s)|dkrtƒ}d}n|dkr)| |¡tƒ}d}| d¡}|dkr8|d|…}| ¡}|s?q | dd¡}t|ƒdkr|d ¡ ¡|d<tj   |d ¡¡|d<|ddkr|dkrt| |¡tƒ}|j   |d¡d}q |ddkr—|dkr–|j   t|ddƒ¡d}q |dd kr¯|dkr®|j   t|dd ƒ¡d}q |dd krË|dkrÊ|d ¡ ¡rÈt|dƒ|_d}q |dd kr|dkr|d d ¡}t|ƒdkr|d ¡ ¡r|d ¡ ¡rtt|dƒt|dƒƒ|_d}q |ddkr|j  |d¡q |dkr$| |¡dSdS)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ÚiZnumbersrrrrQsx         € € €  ÿ€€ ÿzRobotFileParser.parsecCs¢ |jrdS|jr dS|jsdStj tj |¡¡}tj dd|j|j |j |j f¡}tj  |¡}|s4d}|j D]}| |¡rE| |¡Sq7|jrO|j |¡SdS)NFTrr.)rr r rrrr5Ú urlunparserÚparamsZqueryZfragmentÚquoterÚ applies_toÚ allowancer)r Ú useragentrZ parsed_urlr)rrrÚ can_fetchšs* ÿ   ÿ zRobotFileParser.can_fetchcCó>| ¡sdS|jD] }| |¡r|jSq |jr|jjSdSr)rrrCr:r©r rEr)rrrÚ crawl_delay·ó   ÿzRobotFileParser.crawl_delaycCrGr)rrrCr;rrHrrrÚ request_rateÁrJzRobotFileParser.request_ratecCs|jsdS|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 rr*rrFrIrKrLrPrrrrrs     I  c@s&eZdZ dd„Zdd„Zdd„ZdS)r7cCs<|dkr|sd}tj tj |¡¡}tj |¡|_||_dS)NrT)rrr@rrBrrD)r rrDrrrrÚs  zRuleLine.__init__cCs|jdkp | |j¡Sr%)rÚ startswith)r ÚfilenamerrrrCâszRuleLine.applies_tocCs|jrdndd|jS)NZAllowZDisallowz: )rDrrrrrrPåszRuleLine.__str__N)rQrRrSrrCrPrrrrr7×s  r7c@s.eZdZ dd„Zdd„Zdd„Zdd„Zd S) r/cCsg|_g|_d|_d|_dSr)r'r6r:r;rrrrrës zEntry.__init__cCs‚g}|jD] }| d|›¡q|jdur| d|j›¡|jdur3|j}| d|j›d|j›¡| tt|j ƒ¡d  |¡S)Nz User-agent: z Crawl-delay: zRequest-rate: r.Ú ) r'r(r:r;ZrequestsZsecondsÚextendrNrOr6rM)r ZretÚagentZraterrrrPñs    z Entry.__str__cCsH | d¡d ¡}|jD]}|dkrdS| ¡}||vr!dSq dS)Nr.rr&TF)r2r4r')r rErXrrrrCýs ÿzEntry.applies_tocCs& |jD] }| |¡r|jSqdS)NT)r6rCrD)r rUr>rrrrD s    ÿzEntry.allowanceN)rQrRrSrrPrCrDrrrrr/és  r/) Ú collectionsZ urllib.parserZurllib.requestÚ__all__Ú namedtuplerrr7r/rrrrÚs  B