
    !h+                        S SK Jr  S SKrS SKrS SKJr  S SKJrJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  \(       a  S S	KJr  S S
KJr  S SKJrJr  S SKJr   " S S\5      r\
" \5       " S S5      5       rg)    )annotationsN)defaultdict)TYPE_CHECKINGProtocol)implementer)ISpiderLoader)walk_modules)iter_spider_classes)
ModuleType)Self)RequestSpider)BaseSettingsc                  F    \ rS rSr\SS j5       rS	S jrS
S jrSS jrSr	g)SpiderLoaderProtocol   c                    g)z6Return an instance of the class for the given settingsN clssettingss     Z/root/1688_scrapy/alibaba-scraper/venv/lib/python3.13/site-packages/scrapy/spiderloader.pyfrom_settings"SpiderLoaderProtocol.from_settings           c                    g)zmReturn the Spider class for the given spider name. If the spider
name is not found, it must raise a KeyError.Nr   selfspider_names     r   loadSpiderLoaderProtocol.load   r   r   c                    g)zDReturn a list with the names of all spiders available in the
projectNr   r   s    r   listSpiderLoaderProtocol.list!   r   r   c                    g)zBReturn the list of spiders names that can handle the given requestNr   )r   requests     r   find_by_request$SpiderLoaderProtocol.find_by_request%   r   r   r   Nr   r   returnr   r    strr,   ztype[Spider]r,   	list[str])r(   r   r,   z__builtins__.list[str])
__name__
__module____qualname____firstlineno__classmethodr   r!   r%   r)   __static_attributes__r   r   r   r   r      s&    E E8Qr   r   c                  r    \ rS rSrSrSS jrSS jrSS jrSS jr\	SS j5       r
SS jrSS	 jrSS
 jrSrg)SpiderLoader)   zN
SpiderLoader is a class which locates and loads spiders
in a Scrapy project.
c                    UR                  S5      U l        UR                  S5      U l        0 U l        [        [        5      U l        U R                  5         g )NSPIDER_MODULESSPIDER_LOADER_WARN_ONLY)	getlistspider_modulesgetbool	warn_only_spidersr   r%   _found_load_all_spiders)r   r   s     r   __init__SpiderLoader.__init__0   sH    )1)9)9:J)K'//0IJ13?J4?P r   c                J   / nU R                   R                  5        HG  u  p#UR                  U VVs/ s H#  u  pE[        U5      S:  d  M  SU SU< SU S3PM%     snn5        MI     U(       a/  SR	                  U5      n[
        R                  " SU S3[        S	9  g g s  snnf )
N   z  z named z (in )z

z/There are several spiders with the same name:

z'

  This can cause unexpected behavior.category)rB   itemsextendlenjoinwarningswarnUserWarning)r   dupesname	locationsmodr   dupes_strings          r   _check_name_duplicates#SpiderLoader._check_name_duplicates7   s    #{{002ODLL %.$-9~) 9bWTHE#a8$-  3 !;;u-LMMC. IK$ s   BBc                    [        U5       HY  nU R                  UR                     R                  UR                  UR                  45        X R
                  UR                  '   M[     g N)r
   rB   rS   appendr1   rA   )r   modulespclss      r   _load_spidersSpiderLoader._load_spidersJ   sI    (0EKK

#**FOOU^^+LM(-MM%**% 1r   c           	     J   U R                    H'  n [        U5       H  nU R                  U5        M     M)     U R                  5         g ! [        [        4 aI    U R
                  (       a6  [        R                  " S[        R                  " 5        SU S3[        S9   M  e f = f)N
z$Could not load spiders from module 'z#'. See above traceback for details.rI   )r>   r	   r^   ImportErrorSyntaxErrorr@   rO   rP   	traceback
format_excRuntimeWarningrW   )r   rS   r\   s      r   rC   SpiderLoader._load_all_spidersO   s    ''D*40F&&v. 1 ( 	##%  - 	>>MMY1134 5((,v .;; "0	 	s   #A		AB" B"c                    U " U5      $ rZ   r   r   s     r   r   SpiderLoader.from_settings`   s    8}r   c                Z     U R                   U   $ ! [         a    [        SU 35      ef = f)zg
Return the Spider class for the given spider name. If the spider
name is not found, raise a KeyError.
zSpider not found: )rA   KeyErrorr   s     r   r!   SpiderLoader.loadd   s8    
	?==-- 	?/}=>>	?s    *c                    U R                   R                  5        VVs/ s H  u  p#UR                  U5      (       d  M  UPM!     snn$ s  snnf )zD
Return the list of spider names that can handle the given request.
)rA   rK   handles_request)r   r(   rS   r   s       r   r)   SpiderLoader.find_by_requestn   sB    
 #'--"5"5"7
"7YT3;N;Nw;WD"7
 	
 
s
   AAc                H    [        U R                  R                  5       5      $ )zG
Return a list with the names of all spiders available in the project.
)r%   rA   keysr$   s    r   r%   SpiderLoader.listv   s     DMM&&())r   )rB   rA   r>   r@   N)r   r   )r,   None)r\   r   r,   rs   r+   r-   )r(   r   r,   r0   r/   )r1   r2   r3   r4   __doc__rD   rW   r^   rC   r5   r   r!   r)   r%   r6   r   r   r   r8   r8   )   s>    
!&.
&"  ?
*r   r8   )
__future__r   rd   rO   collectionsr   typingr   r   zope.interfacer   scrapy.interfacesr   scrapy.utils.miscr	   scrapy.utils.spiderr
   typesr   typing_extensionsr   scrapyr   r   scrapy.settingsr   r   r8   r   r   r   <module>r      s`    "   # * & + * 3  '&,Q8 Q" ]P* P* P*r   