
    TI3i`                         d dl Z d dlZd dlZd dlZd dlZd dlmZmZ d dlm	Z	m
Z
mZmZ d dlZd dlmZ d dlmZ d dlmZ ej                            d           d dlmZ i a G d	 d
e          ZdS )    N)	b64decode	b64encode)urlparseurljoin	urlencodequote)AES)unpad)PyQueryz..)Spiderc                       e Zd ZddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd ZddZd Zd ZddZd Zd Zd Zd Zd ZddZd dZd Zd Zd ZdS )!r    c                 ,   	 t          |t                    rt          j        |          n|pi }|                    di           | _        |                    dd          pd                                | _        | j        s|                                 | _        n'#  i | _        |                                 | _        Y nxY wdddddd	d
dddd
| _	        | j	        
                    | j        | j         dd           t          d| j                    dS )uK   初始化，支持 extend='{"host":"https://example.com", "proxies":{...}}'proxieshostr   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z`text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8zzh-CN,zh;q=0.9z
keep-alivezno-cachedocumentnavigatenonez?11)
z
User-AgentAcceptzAccept-Language
ConnectionzCache-ControlzSec-Fetch-DestzSec-Fetch-ModezSec-Fetch-SitezSec-Fetch-UserzUpgrade-Insecure-Requests/)OriginRefereru   [Spider] 使用站点: N)
isinstancestrjsonloadsgetr   stripr   get_working_hostheadersupdateprint)selfextendcfgs      9   /storage/emulated/0/纯福利/py1/E佬通用视频 (3).pyinitzSpider.init   s&   	0(263(?(?Q$*V$$$V\rC779b11DL,,299;;DI9 4 1133		0DL--//DIII Lx/&'(($"),
 
 	ty	___MMNNN3	3344444s   BB "B>c                     dS )Nu'   🌈 通用视频解析器|Pro增强版 r%   s    r(   getNamezSpider.getName1   s    88    c                 :    t          fddD                       S )Nc              3   H   K   | ]}|pd                                  v V  dS )r   N)lower).0exturls     r(   	<genexpr>z'Spider.isVideoFormat.<locals>.<genexpr>5   s8      ss#339"++---ssssssr.   ).m3u8.mp4z.ts.flvz.mkvz.aviz.webm)any)r%   r4   s    `r(   isVideoFormatzSpider.isVideoFormat4   s'    ssss9rssssssr.   c                     dS )NFr+   r,   s    r(   manualVideoCheckzSpider.manualVideoCheck7   s    ur.   c                 8    t                                            d S N)	img_cacheclearr,   s    r(   destroyzSpider.destroy:   s    r.   c                 ,   dg}|D ]p}	 t          j        || j        | j        d          }|j        dk    r)t          d|            |                    d          c S Z# t          $ r
}Y d}~id}~ww xY w|r|d                             d          nd	S )
u"   尝试多个host，找到可用的zhttps://wanwuu.com/   r"   r   timeout   u   [Spider] 检测到可用host: r   Nr   zhttps://jszyapi.com)requestsr   r"   r   status_coder$   rstrip	Exception)r%   dynamic_urlsr4   responsees        r(   r!   zSpider.get_working_host>   s     "
   	 	C#<T\4<abccc'3..@3@@AAA::c??*** /    .:U|A%%c***@UUs   AA  
A4/A4c           	         	 t          j        | j        | j        | j        d          }|j        dk    rg i g dS |j        |_        |                     |j	                  }g } |d          }t                      }g d}|                                D ]}|                    d          pd                                }	|	                                                                |	r|	d	v sd
|	v r]r&t                    dk     st                    dk    rt          fd|D                       r|	|v r|	                    d          st#          | j        |	          }	|                    |	d           |                    |	           t          |          dk    r n|sdddddddddg}|                     |d          }
dddddddddgdddddddd dd!d"dgdddd#d#dd$d$dd%d%dgdddd&d'dd(ddd)d*dgd+}|||
dS # t*          $ r"}t-          d,|            g i g dcY d-}~S d-}~ww xY w).u.   首页：动态分类 + 视频列表 + filters
   rD   rF   )classfilterslistznav a, .menu a, .nav a, #header a, .header a, ul.navbar-nav a, .category-list a, .scroll-content a, .module-menu a, .module-tab-item)u   登录u   注册   搜索u   首页HomeLoginSearchu   联系u   关于u   留言RSSu   推特TGu   Q群u   合作u   公告APP   下载hrefr   )#r   r   
javascript      c              3       K   | ]}|v V  	d S r>   r+   )r2   bwnames     r(   r5   z%Spider.homeContent.<locals>.<genexpr>d   s'      66brTz666666r.   http)	type_nametype_id   u   最新z/latest/u   热门z/hot/u   推荐z/recommend/z#content article, #main article, .posts article, .container .row article, article, .video-list .video-item, .module-poster-item, .avdata-outer, .search-result, .cardu   全部)nvu   高清HD4Ku   日本jpu   欧美usu   国产cn202420232022u   中文zhu   日语u   英文en)rP   areayearlangz[homeContent] Error: N)rG   r   r   r"   r   rH   apparent_encodingencodinggetpqtextsetitemsattrr    lenr9   
startswithr   appendaddgetlistrJ   r$   )r%   filterrL   dataclasses	nav_items
seen_hrefs	bad_wordskr[   videosrQ   rM   rb   s                @r(   homeContentzSpider.homeContentM   s   8	<|DIt|T\cefffH#s**!#B??? ( :H::hm,,DG  d  e  eIJ ~  ~  ~I__&&  v,"3355vvxx~~'' t~559M9M s4yy1}}D		B6666I66666 :%% v.. 4"49d33DTdCCDDDt$$$w<<2%%E &  "*zBB"*w??"*}EE \\$  )P  Q  QF !)r22(4N4NVZaePfPfg'b113M3MU]dhOiOiqy  AE  lF  lF  G'b11f3M3MU[bhOiOiqw  E  lF  lF  G'b113M3MU]dhOiOiqy  AE  lF  lF  G	 G %&III 	< 	< 	<-!--...B;;;;;;;;	<s#   7H GH 
I"H?9I?Ic                 \    |                      d          }d|                    dg           iS )u&   首页视频内容 (复用homeContent)NrR   )r   r   )r%   ress     r(   homeVideoContentzSpider.homeVideoContent   s.    t$$++,,r.   c                    	 d|v r>|                      |                    dd                    }|dddt          |          dS |rt          |          nd}|                    d          r|n$| j         |                    d          r|nd|z    }|                    d          }|dk    r| dn| d| d}d|v sd	|v r#|                    d
t          |                    }t          |t                    r{g }dD ]Q}	|
                    |	          r:|                    |	 dt          t          ||	                                         R|r#d|v rdnd}
||
z   d                    |          z   }t          d|            t          j
        || j        | j        d          }|j        dk    rg |ddddS |j        |_        |                     |j                  }|                     |d|          }t          dt          |           d           ||ddddS # t0          $ r<}t          d|            ddl}|                                 g |ddddcY d}~S d}~ww xY w)u   分类内容@folderr      Z   )rR   page	pagecountlimittotalrc   r   z?page=z?pg=z{pg})rP   rs   rt   ru   letterby=?&u   [categoryContent] 请求URL: rO   rD   rF   '  r   z.module-item, .module-poster-item, .video-item, article, .card, li.vodlist_item, .stui-vodlist__box, a.module-item-pic, .myui-vodlist__boxu   [categoryContent] 提取到 u
    个视频i?B z[categoryContent] Error: N)getfodreplacer}   intr~   r   rI   r   r   dictr   r   r   joinr$   rG   r"   r   rH   rv   rw   rx   ry   r   rJ   	traceback	print_exc)r%   tidpgr   r&   rh   r4   real_urlparamskeyseprL   r   r   rM   r   s                   r(   categoryContentzSpider.categoryContent   s   -	XCKKIr : :;; !11rTWXYTZTZ[[[%RAB//n##	5n#..Y\J]J]Cl33cfilcl5n5nC**S//C %'!GG#yyyyC"H3&C--;;vs2ww77 &$'' AL J JCzz# J&H&HuS5E5E/F/F&H&HIII A!$##cC'#~0@0@@H<(<<===|HdlDLbdeeeH#s** "BTBYZ[[[ ( :H::hm,,D \\ ] F HVHHHIII"BTBY_``` 	X 	X 	X1a11222!!!UVWWWWWWWW		Xs,   AH" E8H" =A$H" "
I(,1I#I(#I(c                    $%&'( 	 |d                              d          r|d         n j         |d          }t          j        | j         j        d          }|j        |_        |j        } 	                    |          }g %t                      (% (fd} |d          }|                                D ]H}|                                }	d|	v r.d|	v sd	|	v r&t          j        d
|	          }
|
D ]' |d'            I |d          rt           |d                                          d          D ]t\  }}|                    d          }|rX	 t!          j        |          }|                    di                               dd          }|r |d| |           m#  Y qxY wu |d                                          D ]d}|                    d          &&r |d&            |d                                          D ]!} |d|                    d                     "e |d                                          D ]p}|                    d          p|                    d          &&rBt%          &fddD                       r't%          &fddD                       s |d&           qg d}|D ]c}t          j        ||t          j                  }|D ]>}|                    d          't%          'fdd D                       r |d!'           ?d	 t          j        d"|t          j                  }|D ]y}	 t!          j        |          }t/          |t0                    rF|                                D ]1\  }}t/          |t2                    rd|v sd	|v r |d#| |           2s#  Y wxY wn#  Y nxY w%s |d$          }t           |d%                                          d          D ]\  }}|                                                                $|                    d&          }|rjt%          $fd'd(D                       rO$                    d)d                              d*d                                          }|sd+| } |||           %rd,                    %          nd-| } |d.                                                                          } | s/ |d/                                                                          } | sH |d0                                                              d1          d                                         }  |d2                                                                          }!d3d4||!p| d5giS # t<          $ r<}"t?          d6|"            dd7l }#|#!                                 d3d4d8d9gicY d7}"~"S d7}"~"ww xY w):u*   详情页：提取视频源（增强版）r   rc   rO   rD   c                     |r|v rd S |                     d          st          j        |          }                    |                               |  d|            d S )Nrc   $)r~   r   r   r   r   )rb   uplistr%   unique_urlss     r(   add_play_urlz*Spider.detailContent.<locals>.add_play_url   ss     A,,F||F++ .	1--A"""]]q]]+++++r.   scriptr4   r6   r7   z-["\']+(http[^"\']+\.(?:m3u8|mp4)[^\'"]*)["\']u	   脚本源z.dplayerr   )startzdata-configvideor   DPlayersrcu   HTML5视频sourceu   HTML5源iframezdata-srcc              3       K   | ]}|v V  	d S r>   r+   r2   xr   s     r(   r5   z'Spider.detailContent.<locals>.<genexpr>   s'      iiAqCxiiiiiir.   )r6   r7   uploadcloudplayerembedc              3       K   | ]}|v V  	d S r>   r+   r   s     r(   r5   z'Spider.detailContent.<locals>.<genexpr>   s'      RRAqCxRRRRRRr.   )googlefacebookdisqusu	   Iframe源)z$var\s+main\s*=\s*["\']([^"\']+)["\']z+url\s*:\s*["\']([^"\']+\.(?:m3u8|mp4))["\']zvurl\s*=\s*["\']([^"\']+)["\']z+vid\s*:\s*["\']([^"\']+\.(?:m3u8|mp4))["\']z"url"\s*:\s*"([^"]+)"z#video_url\s*=\s*[\'"]([^\'"]+)[\'"]z(var\s+videoUrl\s*=\s*["\']([^"\']+)["\']z!playurl\s*=\s*["\']([^"\']+)["\']z"playUrl"\s*:\s*"([^"]+)"z src="([^"]*\.(?:m3u8|mp4)[^"]*)"z%data-src="([^"]*\.(?:m3u8|mp4)[^"]*)"z mp4Url\s*=\s*["\']([^"\']+)["\']z!m3u8Url\s*=\s*["\']([^"\']+)["\']c              3       K   | ]}|v V  	d S r>   r+   )r2   r3   r   s     r(   r5   z'Spider.detailContent.<locals>.<genexpr>  s'      QQ3!8QQQQQQr.   )r6   r7   r8   z.m4vu	   正则源z6<script[^>]*type="text/javascript"[^>]*>(.*?)</script>zJSON-zH.post-content, article, .content, .video-info, .module-info-introductionar[   c              3       K   | ]}|v V  	d S r>   r+   )r2   kw	link_texts     r(   r5   z'Spider.detailContent.<locals>.<genexpr>%  s?        )_  )_Ry  )_  )_  )_  )_  )_  )_r.   )   点击观看u   观看u   播放u   视频u	   第一弹   线路Play	   播放器u   点击观看：r   r   r\   u%   无视频源，请尝试网页播放$h1z/.post-title, .module-info-heading, .video-titletitle|zF.post-content, article, .module-info-introduction-content, .video-descrR   u   通用解析)vod_play_fromvod_play_urlvod_contentz[detailContent] Error: Nu   获取失败)r   r   )"r~   r   rG   r   r"   r   rv   rw   ry   rx   rz   r{   refindall	enumerater|   r   r   r9   finditer
IGNORECASEgroupDOTALLr   r   r   r    r   r   splitrJ   r$   r   r   ))r%   idsr4   rL   	html_textr   r   scriptsstxturlscr   config_attrconfig	video_urlrh   src_tagr   common_patternspatmatchesmatchjson_matchesjson_strobjcontent_areailink	link_hrefep_nameplay_url	vod_titler   rM   r   r   r   r   r   r   s)   `                                   @@@@@r(   detailContentzSpider.detailContent   sj   {	aF--f55Q#a&&di;QQ;Q;QC|Ct|]_```H ( :H I::i((DE%%K, , , , , , , d8nnG]]__  ffhhC<<W^^v}}:&VX[\\D!  $[!444 tJ 
!%dd:&6&6&<&<&>&>aHHH 	! 	!DAq"#&&"7"7K" !!%)Z%<%<F(.

7B(?(?(C(CE2(N(NI( G ,]q]]I F F F! D! T']]((** B BffUmm 5 L444 q{{0022 B BG LW\\%-@-@AAAAB $x....00 7 7kk%((CFKK
,C,C 73iiii1hiiiii 7RRRR1QRRRRR 7$[#666  O ' 5 5+c9bmDD$ 5 5EAAQQQQ/PQQQQQ 5$[!4445!z*cenprpyzz ,  H"j22%c400 A(+		 A A1#-a#5#5 !A7a<<6UV;;$0La$@$@$@  	9#t$noo(c):):)@)@)B)B!LLL 9 9GAt $		 1 1 3 3I $		& 1 1I  9S  )_  )_  )_  )_  D^  )_  )_  )_  &_  &_ 9"+"3"34Er"J"J"R"RSace"f"f"l"l"n"n& 3&2qllG$Wi888*/bsxx5b]`5b5bH T

))//11I c D!RSSXXZZ``bb	 G DMM..0066s;;A>DDFF	 $ghhmmoouuwwK~xhs  iA  xA  B  B  C  D  D 	a 	a 	a/A//000!!!~~^^_```````		asj   EV6 AF)(V6 )F-+F V6 ,$O	 A/O O	 OO	 V6 	OG*V6 6
W< 1W71W<7W<r   c                    	 |rt          |          nd}| j         dt          |           }t          j        || j        | j        d          }|j        |_        | 	                    |j
                  }|                     |d          }||ddS # t          $ r"}t          d|            g |ddcY d	}~S d	}~ww xY w)
rS   r   z/?s=rO   rD   zdarticle, .search-result, .post, .video-item, .module-poster-item, .avdata-outer, .card, .module-itemr   )rR   r   r   z[searchContent] Error: N)r   r   r   rG   r   r"   r   rv   rw   rx   ry   r   rJ   r$   )	r%   r   quickr   r4   rL   r   r   rM   s	            r(   searchContentzSpider.searchContent>  s    
	?%RABY00E#JJ00C|Ct|]_```H ( :H::hm,,D\\$  )O  P  PF"BTBBB 	? 	? 	?/A//000>>>>>>>>	?s   BB 
B>B93B>9B>c                     d|v sd|v sd|v sd|v rd}n|                      |          rd}nd}d|v r|                     |          n|}||| j        dS )	r   htmlphpr   r   r   r   r6   )parser4   header)r:   proxyr"   )r%   flagidvipFlagsr   r4   s         r(   playerContentzSpider.playerContentL  sy    R<<5B;;'R--8r>>EE## 	EEE '2djjnnn2sdlCCCr.   c                 x   	 |                     d          }|                     d          }|dk    r:|                     d          }t                               |          x}rdd|gS g dS |dk    rm|                    d	          s|                     |          n|}t	          j         || j        | j        d
          }|                     |j                  }dd|gS |dk    r| 	                    |          S | 
                    |          S # t          $ r }t          d|            g dcY d}~S d}~ww xY w)u)   本地代理：处理m3u8/ts/图片解密typer4   cacher   rF   z
image/jpeg)  
text/plains   Expiredimgrc   rO   rD   m3u8z[localProxy] Error: r  r  r.   N)r   r?   r~   d64rG   r"   r   aesimgcontentm3ProxytsProxyrJ   r$   )	r%   paramtype_r4   r   r  r   r   rM   s	            r(   
localProxyzSpider.localProxyX  sa   	,IIf%%E))E""Cii&&'mmC0007 8w776666%03v0F0FO488C===Cl8T\4<acddd++ck22\733&||C((( ||C((( 	, 	, 	,,,,---+++++++++	,s7   A%D (D ,A2D D :D 
D9D4.D94D9r  c                 v    |r6| j         r/|                                  d|                     |           d| S |S )u   生成代理URL&url=z&type=)r   getProxyUrle64)r%   r   r  s      r(   r   zSpider.proxys  sL     	LDL 	L&&((KKtxx~~KKTKKKr.   c                     	 |                      |          }t          j        || j        | j        d          }|j        |_        |j        }|j        	                    dd          d         }g }|
                    d          D ]}d|vr|                                r|                    d          sX|                    d          r<d                    |j        
                    d          d	d
                   }| | }n| d| }|                    |                     |d                     |                    |           ddd                    |          gS # t           $ r }t#          d|            g dcY d	}~S d	}~ww xY w)u
   m3u8代理rO   rD   r   r   r   
z#EXTrc   NrC   tsrF   zapplication/vnd.apple.mpegurlz[m3Proxy] Error: r  )r	  rG   r   r"   r   rv   rw   ry   r4   rsplitr   r    r~   r   r   r   rJ   r$   )	r%   r4   r   r   baselinesline	host_baserM   s	            r(   r  zSpider.m3Proxyy  s   	,((3--C,sDL$,XZ[[[C0CL8D7>>#q))!,DE

4(( 
' 
'%%$**,,%??622 4??3// 4(+s1C1CBQB1G(H(HI&/#7#7#7DD&*#3#3T#3#3DLLD$!7!78888LL&&&&8$))E:J:JKK 	, 	, 	,)a))***+++++++++	,s   E E# #
F-FFFc                     	 t          j        |                     |          | j        | j        d          j        }dd|gS #  g dcY S xY w)u   ts代理rO   rD   rF   z
video/mp2tr  )rG   r   r	  r"   r   r  )r%   r4   r  s      r(   r  zSpider.tsProxy  s[    	,l488C==$,PTP\fhiiiqGw//	,++++++s   >A A	c                     t          t          |                                                                                    S )u   base64编码)r   r   encodedecoder%   ry   s     r(   r  z
Spider.e64  .    T))++,,33555r.   c                     t          t          |                                                                                    S )u   base64解码)r   r   r  r   r!  s     r(   r	  z
Spider.d64  r"  r.   c                 $   t          |          dk     r|S ddg}|D ]\  }}	 t          t          j        |t          j        |                              |          d          }|                    d          s*|                    d          s|                    d          r|c S n#  Y nxY w	 t          t          j        |t          j                                      |          d          }|                    d          r|c S #  Y xY w|S )u   AES解密图片   )s   f5d965df75336270s   97b60394abc2fbe1)s   75336270f5d965dfs   abc2fbe197b60394      PNG   GIF8)r}   r
   r	   newMODE_CBCdecryptr~   MODE_ECB)r%   r   keysr   rh   decs         r(   r
  zSpider.aesimg  s+   t99r>>K 76

  	 	DAqCGAs|Q77??EErJJ>>+.. #..2L2L PSP^P^_fPgPg JJJCGAs|44<<TBBBGG>>+.. JJJs   BB''B+/AD		Dc                    g }d|pdv } ||          }t          |          dk    r |d          }t          dt          |           d           t                      }g d}|                                D ]}	|	                    d          r|	}
|	                                }nU |	d	                              d          }
|
r|
                    d
          s |	d                              d          }
|	}|
                    d
          st          fddD                       rdv r|	                    d          
                                s*|
                    d          p|
                    d          s(|
	                    d                              d          s'|	                    d          
                                s|

                                r%t                                                    dk     rt          fd|D                       rt          |	d          r|	                                nt          |	          } |	d          
                                }|                     ||	|          }|s*d|                                v rB|v rH                    d          st%          | j                  |                               |	                    d          
                                pd}|                     |rdnd                                 |||rdnddddd            |S )!u   解析视频列表z/mrdgr   r   z
a:has(img)u   [getlist] 找到 u    个候选项)u   娱乐u   棋牌u   澳门u   葡京u	   太阳城u   彩票AVu   直播u   充值rZ   u   回家r   za[href]r[   c              3       K   | ]}|v V  	d S r>   r+   )r2   r   r[   s     r(   r5   z!Spider.getlist.<locals>.<genexpr>  s'      hh19hhhhhhr.   )z
/category/z/tag/z/feed/z/page/z/author/gitlub)r   r\   zOh2, h3, h4, .title, .video-title, .module-poster-item-title, .module-item-titler   z
data-titler  altz.video-name, .vodlist_titler^   c              3       K   | ]}|v V  	d S r>   r+   )r2   adr   s     r(   r5   z!Spider.getlist.<locals>.<genexpr>  s'      5522;555555r.   
outer_htmlr   z.gifrc   zItime, .date, .meta, .views, .video-duration, .module-item-note, .pic-textr   folderrectgHzG?)r  ratio)vod_idvod_namevod_picvod_remarksvod_tagstyle)r}   r$   rz   r{   is_parenteqr|   r9   findry   r    hasattrr6  r   getimgr1   r~   r   r   r   r   )r%   data_pqselectorr   r   	is_folderr{   seen_idsad_keywordsr   r   	container	card_htmlscript_textr  remarkr[   r   s                   @@r(   r   zSpider.getlist  s   	r*	!!u::??GL))E;#e**;;;<<<55 D  D  D >	 >	AuuSzz HHJJ		 AiLLOOA&& %v %#		!A	66&>>D hhhh&ghhhhh z!! NN#tuuzz||E @w?166,+?+? 2u**511 M!'DEEJJLL ! C..22555555555 *1!\*B*BNAI!H++**,,K++k1i88C $$x??6** 0ty$//LL^^$oppuuww}{}FMM!C	#A99rCC!KKMM%'0888b"(488      r.   Nc                    t          j        d|pd          x}r(|                     |                    d                    S t          j        d|pd          x}r(|                     |                    d                    S |5|3t	          |d          r|                                nt          |          }|sdS |                    dd                              d	d
                              dd          }t          j        d|t           j                  x}r(|                     |                    d                    S t          j        d|t           j                  x}r(|                     |                    d                    S t          j        d|t           j                  x}r(|                     |                    d                    S d|v rJt          j        d|t           j                  }|r(|                     |                    d                    S t          j        d|t           j                  x}r(|                     |                    d                    S dS )u   提取图片URLz'var\s+img_url\s*=\s*[\'"]([^\'"]+)[\'"]r   r   zloadBannerDirect\('([^']+)'Nr6  z&quot;"z&apos;'z&amp;r   z"data-src\s*=\s*["\']([^"\']+)["\']z'data-original\s*=\s*["\']([^"\']+)["\']z0(https?://[^"\'\s)]+\.(?:jpg|png|jpeg|webp|gif))zurl(z(url\s*\(\s*[\'"]?([^\"\'\)]+)[\'"]?\s*\)z8src\s*=\s*["\']([^"\']+\.(?:jpg|png|jpeg|webp|gif))["\'])	r   search	_proc_urlr   rD  r6  r   r   I)r%   ry   elemhtml_contentms        r(   rE  zSpider.getimg  s9    	DdjbQQQ1 	.>>!''!**--- 	8$*"EEE1 	.>>!''!**---D$407l0K0KZ4??,,,QTUYQZQZL 	2#++Hc::BB8SQQYYZacfgg 	?rtTTT1 	.>>!''!**---	DlTVTXYYY1 	.>>!''!**--- 	M|]_]abbb1 	.>>!''!**--- \!!	E|UWUYZZA 2~~aggajj111 	UWcegeijjj1 	.>>!''!**---rr.   c                    |sdS |                     d          }|                    d          r	 |                    dd          \  }}t          |          }|                    d          s?|                    d          s*|                    d          s|                     |          }t          j        |                                          }|t          |<   | 	                                 d	| S #  Y dS xY w|                    d
          st          | j        |          }| 	                                 d|                     |           dS )u!   处理URL：转义、代理、AESr   z'" zdata:,r   r&  r'  r(  z&type=cache&key=rc   r  z	&type=img)r    r~   r   r   r
  hashlibmd5	hexdigestr?   r  r   r   r  )r%   r4   _b64_strrawr   s         r(   rS  zSpider._proc_url6  sT    	2ii>>'"" 
		 YYsA..
7(({33 +s~~j7Q7Q +UXUcUcdkUlUl +++c**Ck#&&0022!$	#**,,CCcCCCrr~~f%% 	*$)S))C ""$$CC488C==CCCCs   CC5 5C:c                     g S )u   文件夹处理r+   )r%   r   s     r(   r   zSpider.getfodN  s    	r.   c                 t    	 t          |          S #  t          |                    d                    cY S xY w)u   获取pq对象zutf-8)pqr  )r%   r   s     r(   rx   zSpider.getpqR  s;    	,d88O	,dkk'**+++++s    $7)r   )r   )r  )NN)__name__
__module____qualname__r)   r-   r:   r<   rA   r!   r   r   r   r   r   r   r  r   r  r  r  r	  r
  r   rE  rS  r   rx   r+   r.   r(   r   r      s       5 5 5 569 9 9t t t    V V V:< :< :<x- - -
/X /X /Xb}a }a }a~? ? ? ?
D 
D 
D, , ,6   , , ,6, , ,6 6 66 6 6  6N N N N`% % % %ND D D0  , , , , ,r.   r   )r   r   sysrZ  timebase64r   r   urllib.parser   r   r   r   rG   Crypto.Cipherr	   Crypto.Util.Paddingr
   pyqueryr   rb  pathr   base.spiderr   
BaseSpiderr?   r+   r.   r(   <module>rp     s    				 



   ' ' ' ' ' ' ' ' < < < < < < < < < < < <        % % % % % % ! ! ! ! ! !     , , , , , , 	C	, C	, C	, C	, C	,Z C	, C	, C	, C	, C	,r.   