
    
1i(                         d dl Z d dlZd dlZd dlmZ e j                            d           d dlmZ  G d de          ZdS )    N)urljoinz..)Spiderc                   X    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 Zd ZdS )r    c                 \    d| _         dddddd| _        t          d| j                     d S )	Nzhttps://xchina001.sitezoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36ztext/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7zzh-CN,zh;q=0.9z
keep-alivezno-cache)
User-AgentAcceptzAccept-Language
ConnectionzCache-Controlu   使用站点: )hostheaderprint)selfextends     3   /storage/emulated/0/纯福利/py1/小黄书[密].pyinitzSpider.init	   sM    ,	 L `/&'
 
 	*ty**+++++    c                     dS )Nu	   小黄书 r   s    r   getNamezSpider.getName   s    {r   c                 :    t          fddD                       S )Nc              3   $   K   | ]
}|pd v V  dS )r   Nr   ).0exturls     r   	<genexpr>z'Spider.isVideoFormat.<locals>.<genexpr>   s,      JJ#339"%JJJJJJr   )z.m3u8z.mp4z.ts)any)r   r   s    `r   isVideoFormatzSpider.isVideoFormat   s'    JJJJ1IJJJJJJr   c                     dS )NFr   r   s    r   manualVideoCheckzSpider.manualVideoCheck   s    ur   c                    g }t          j        d|t           j                  }|D ]}t          j        d|          }|r|                    d          }|                    d          }d}t          j        d|          }	|	rR|	                    d                              d          }|                    d          st          | j        |          }|	                    ||                                |dd	           |sit          j        d
|t           j                  }
|
D ]F\  }}t          | j        |          }|	                    ||                                ddd	           G|S )Nz+<div[^>]*class="item video[^>]*>(.*?)</div>z+<a[^>]*href="(.*?)"[^>]*title="(.*?)"[^>]*>      r   zbackground-image:url\((.*?)\)z"'zhttp://zhttps://)vod_idvod_namevod_picvod_remarksz3<a[^>]*href="(/videos/.*?)"[^>]*title="(.*?)"[^>]*>)
refindallSsearchgroupstrip
startswithr   r   append)r   html_contentvodsvideo_itemsitem
link_matchhreftitleimg	img_matchgeneral_items	full_hrefs               r   _extractVideoItemszSpider._extractVideoItems   s   j!OQ]_a_cdd 	 	D#QSWXXJ !''**"((++I&FMM	 6#//!,,22599C>>*ABB 6%di55" %"#%	      		J']_kmomqrrM,  e#DIt44	' %!#%	      r   c                     i }g }ddddddddddd	dd
ddddddddddddddddddddddddddddddddd d!dd"d#dd$d%dd&d'dg}|                     |           ||d(<   i |d)<   |S )*Nu   麻豆传媒z!/videos/series-5f904550b8fcc.html)	type_nametype_idu   独立创作者z!/videos/series-61bf6e439fed6.htmlu
   糖心Vlogz!/videos/series-61014080dbfde.htmlu   蜜桃传媒z!/videos/series-5fe8403919165.htmlu   星空传媒z!/videos/series-6054e93356ded.htmlu   天美传媒z!/videos/series-60153c49058ce.htmlu   果冻传媒z!/videos/series-5fe840718d665.htmlu   香蕉视频z!/videos/series-65e5f74e4605c.htmlu   精东影业z!/videos/series-60126bcfb97fa.htmlu   爱豆传媒z!/videos/series-63d134c7a0a15.htmlu   杏吧原版z!/videos/series-6072997559b46.htmlzIBiZa Mediaz!/videos/series-64e9cce89da21.htmlu	   性视界z!/videos/series-63490362dac45.htmlz	ED Mosaicz!/videos/series-63732f5c3d36b.htmlu   大象传媒z!/videos/series-65bcaa9688514.htmlu   扣扣传媒z!/videos/series-6230974ada989.htmlu	   萝莉社z!/videos/series-6360ca9706ecb.htmlu   SA国际传媒z!/videos/series-633ef3ef07d33.htmlu   其他中文AVz!/videos/series-63986aec205d8.htmlclassfilters)r   )r   filterresultclassesvideo_classess        r   homeContentzSpider.homeContent@   s#   (5XYY+8[\\&3VWW(5XYY(5XYY(5XYY(5XYY(5XYY(5XYY(5XYY(5XYY'4WXX%2UVV%2UVV(5XYY(5XYY%2UVV*7Z[[*7Z[['
, 	}%%%!wyr   c                    i }|                     d          r|}nt          | j        |          }|rt          |          nd}|dk    rd|v r	|d| z  }n|d| z  }	 t	          j        || j        d          }d|_        |j        }| 	                    |          }	|	|d	<   t          |	          }
d
|v pd|                                v p	d|dz    |v }|r|dz   }||
z  }n|}|
}||d<   ||d<   |
|d<   ||d<   nB# t          $ r5}t          d|            g |d	<   ||d<   d|d<   d|d<   d|d<   Y d }~nd }~ww xY w|S )Nhttpr"   ?z&page=z?page=
   headerstimeoututf-8listu	   下一页nextzpage=page	pagecountlimittotalzcategoryContent error:    r   )r/   r   r   intrequestsgetr   encodingtextr<   lenlower	Exceptionr   )r   tidpgrB   r   rC   r   resr1   r2   current_page_itemshas_next_pagerR   rT   es                  r   categoryContentzSpider.categoryContent^   s   >>&!! 	*CC$)S))C!SWWW66czz}}}$}}}$	 ,sDKDDDC"CL8L**<88D!F6N!$T'<7{6\EWEWEYEY;Y{]keghiei]k]ko{]{M +F	!$66	*F6N"+F;0F7O#F7OO 	  	  	 /A//000F6NF6N"#F; F7OF7OOOOOO	  s   BC< <
D;+D66D;c                 \   |d         }d|v r|nt          | j        |          }|dddddddddd
}	 t          j        || j        d          }d|_        |j        }t          j        d	|t          j	                  }|r+|
                    d
                                          |d<   nmt          j        d|t          j	                  }|rK|
                    d
                                          }	d|	v r|	                    d          d         n|	|d<   t          j        d|t          j	                  }
|
rV|

                    d
                                          }|                    d          st          | j        |          }||d<   t          j        d|t          j	                  }|r+|
                    d
                                          |d<   nt          j        d|t          j	                  }|ru	 dd l}|                    |
                    d
                    }t!          |t"                    r+|D ](}t!          |t$                    rd|v r|d         |d<    n)n#  Y nxY wd|d<   d| |d<   n)# t&          $ r}t)          d|            Y d }~nd }~ww xY wd|giS )Nr   rH   u   小黄书视频r   )
r%   r&   r'   r>   vod_yearvod_arear(   	vod_actorvod_directorvod_contentrJ   rK   rN   z<h1[^>]*>(.*?)</h1>r"   r&   z<title>(.*?)</title>z - z)<meta property="og:image" content="(.*?)"r$   r'   z)<meta name="description" content="(.*?)">rj   z2<script type="application/ld\+json">(.*?)</script>descriptionu   瑟佬在线vod_play_fromu   开撸$vod_play_urlzdetailContent error: rO   )r   r   rW   rX   r   rY   rZ   r)   r,   r+   r-   r.   splitr/   jsonloads
isinstancerO   dictr]   r   )r   idsvidr   vodr`   r1   title_matchtitle_match_alt
full_titlecover_match	cover_img
desc_matchjsonld_matchro   jsonld_datar4   rc   s                     r   detailContentzSpider.detailContent   s   !fs]]cc	3(?(?)
 
&	/,sDKDDDC"CL8L)$:L"$OOK h"-"3"3A"6"6"<"<">">J"$),C\SUSW"X"X" h!0!6!6q!9!9!?!?!A!AJDIZDWDWj&6&6u&=&=a&@&@]gC
O)$PR^`b`deeK +'--a006688	 ++,CDD > '	9 = =I!*I#OQ]_a_cddJ %/%5%5a%8%8%>%>%@%@M""!y)^`lnpnrss 
	#&*jj1C1CA1F1F&G&G%k488 *(3 * *#-dD#9#9 !*mt>S>S9=m9LC$6$)E#1C "1C//C 	/ 	/ 	/-!--........	/s1   GJ  >A,I+ *J  +I/-J   
J&
J!!J&c                    |}	 t          j        || j        d          }d|_        |j        }t          j        dt
          j                  }|                    |          }|r4|	                    d          }	t          j        d|	          r
dd|	d|d	d
S n)# t          $ r}
t          d|
            Y d }
~
nd }
~
ww xY wd|| j        dS )NrJ   rK   rN   z>const player = new VideoPlayer\(.*?src:\s*["\']([^"\']+?)["\']r"   z\.(m3u8|mp4|ts)r   zoMozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36)r   Referer)jxparser   r   u   playerContent解析错误: )r   r   r   )rW   rX   r   rY   rZ   r)   compiler+   r,   r-   r]   r   )r   flagidvipFlagsr   r`   htmlvideoplayer_patternvideoplayer_match	video_urlrc   s              r   playerContentzSpider.playerContent   s   	5,sDKDDDC"CL8D"$*-nprpt"u"u 3 : :4 @ @  -33A66	9/;; 	!"( +\'*# #	    	5 	5 	533344444444	53$+>>>s   BB 
B?#B::B?c                    dg i}	 | j          d| }t          j        || j        d          }d|_        |j        }|                     |          }||d<   n)# t          $ r}t          d|            Y d }~nd }~ww xY w|S )NrO   z
/search?q=rJ   rK   rN   zsearchContent error: 	r   rW   rX   r   rY   rZ   r<   r]   r   )	r   keyquickrC   
search_urlr`   r1   r2   rc   s	            r   searchContentzSpider.searchContent   s    "	/ I6666J,z4;KKKC"CL8L**<88D!F6NN 	/ 	/ 	/-!--........	/s   AA 
A=!A88A=c                     	 | j         }t          j        || j        d          }d|_        |j        }|                     |          }d|iS # t          $ r }t          d|            dg icY d }~S d }~ww xY w)NrJ   rK   rN   rO   zhomeVideoContent error: r   )r   r   r`   r1   r2   rc   s         r   homeVideoContentzSpider.homeVideoContent   s    		 )C,sDKDDDC"CL8L**<88DD>! 	  	  	 0Q00111B<	 s   A	A 
A6A1+A61A6c                     d S )Nr   )r   paramss     r   
localProxyzSpider.localProxy   s    tr   N)r   )__name__
__module____qualname__r   r   r   r    r<   rF   rd   r~   r   r   r   r   r   r   r   r   r      s        	, 	, 	, 	,  K K K  ! ! !F  <) ) )V7 7 7r? ? ?2  
  
  
     r   r   )	sysrW   r)   urllib.parser   pathr0   base.spiderr   r   r   r   <module>r      s    



  				                      m m m m mV m m m m mr   