Ë
    =]«jŸ&  ã                   ób  — d Z ddlZddlZ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	 dZ
e
dz   ZdZdZej                  j                  dd	«      Zd
ZddddœZ ej&                  «       Zej*                  j-                  e«       dd„Zd„ Zd„ Zedfd„Zd„ Zedk(  rdej:                  v rdZ e«        yy)uœ   
ç¦�å»ºçŽ¯ä¿�ç½‘-ä¸€æ¬¡å…¬ç¤º çˆ¬è™«
https://www.fjhb.org/huanping/yici/
CMS: è‡ªå®šä¹‰
åˆ†é¡µ: list_N.html (20æ�¡/é¡µ)
ä»…å…¨é‡�å‰�5é¡µï¼Œæ—¥è·‘ä»…ç¬¬1é¡µ
é    N)ÚBeautifulSoupzhttps://www.fjhb.orgz/huanping/yiciu   ç¦�å»ºçŽ¯ä¿�ç½‘-ä¸€æ¬¡å…¬ç¤ºu   ä¼�ä¸šÚDB_PATHz/root/search.dbé   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,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 óB   — t         j                  | |¬«      }d|_        |S )N©Útimeoutzutf-8)ÚsessionÚgetÚencoding)Úurlr	   Úresps      úcrawl_fjhb.pyÚfetchr   %   s    € Ü�;‰;�s Gˆ;Ó,€DØ€D„MØ€Kó    c                 ó¢  — | dk(  r
t         › d�}nt         › d| › d�}t        d| › d|› �«       	 t        |«      }t	        |j
                  d	«      }g }|j                  d
«      }|D ]Â  }|j                  d«      }t        |«      dk  rŒ#|d   j                  d«      }	|	sŒ:|	j                  d¬«      }
|
sŒO|	j                  dd«      }|j                  d«      s'|j                  d«      rt        › |› �}nt         › d|› �}|d   j                  d¬«      }|j                  |
||dœ«       ŒÄ |S # t        $ r}t        d|› �«       g cY d}~S d}~ww xY w)u   çˆ¬å�–åˆ—è¡¨é¡µé   z/list_1.htmlz/list_z.htmlz  Fetching page z: z	  Error: Núhtml.parserztable trÚtdé   r   ÚaT©ÚstripÚhrefÚ Úhttpú/é   )Útitler   Údate)Ú	LIST_BASEÚprintr   Ú	Exceptionr   ÚtextÚselectÚlenÚfindÚget_textr   Ú
startswithÚBASE_URLÚappend)Úpage_numr   r   ÚeÚsoupÚitemsÚrowsÚrowÚcellsÚlinkr   r   Ú	date_texts                r   Ú
crawl_listr5   +   sm  € à�1‚}Ü�˜<Ð(‰ä�˜6 ( ¨5Ð1ˆä	Ð˜X˜J b¨¨Ð
.Ô/ðÜ�S‹zˆô
 ˜Ÿ™ MÓ2€DØ€Eà�;‰;�zÓ"€DØò ˆØ—
‘
˜4Ó ˆÜˆu‹:˜Š>Øà�Q‰x�}‰}˜SÓ!ˆÙØà—‘ D�Ó)ˆÙØà�x‰x˜ Ó#ˆØ�‰˜vÔ&Ø�‰˜sÔ#Ü"˜ D 6Ð*‘ä#˜ A d VÐ,�à˜!‘H×%Ñ%¨DÐ%Ó1ˆ	à�‰ØØØñ
õ 	ð-ð8 €LøôI ò Ü�	˜!˜ˆoÔØ�	ûðús   ®D+ Ä+	EÄ4E	ÅEÅ	Ec                 óP
  — | d   }t        d| d   dd › d�«       	 t        |«      }t        |j                  d«      }| d   }|sL|j                  d«      }|r9|j                  d	¬
«      }d|v r#|j                  dd«      d   j                  «       }| d   }t        j                  d|j                  «      }	|	r|	j                  d«      }|j                  dt        j                  d«      ¬«      }
|
s|j                  d«      }
|
s%|j                  t        j                  d«      ¬«      }
|
s�|j                  dt        j                  d«      ¬«      }|r+|j                  g d¢«      D ]  }|j                  «        Œ |}
n=|j                  d«      }|r*|j                  g d¢«      D ]  }|j                  «        Œ |}
g }g }|
�r¢|
j                  dd	¬«      D ]·  }|d   }|j                  d«      s2|j                  d«      rt         › |› �}n|j#                  d«      › d|› �}t        j                  d|t        j$                  «      sŒq|j                  d	¬
«      }|j'                  |xs t(        j*                  j-                  |«      |dœ«       Œ¹ |
j                  d dg«      }t/        «       }|D ]+  }|j1                  d!„ |j                  d dg«      D «       «       Œ- |D �cg c]  }t3        |«      |vsŒ|‘Œ }}|D �]e  }|j                  d	¬
«      sŒ|j5                  d"d#g«      rŒ+|j                  d	¬
«      }t        j6                  d$d%|«      j                  «       }|sŒe|d&v st        j8                  d'|«      rŒ€t        j8                  d(|«      rŒ—t        j8                  d)|«      rd*|v rŒ²d+|v sd,|v sd-|v rŒ¿|j                  d.«      }|r"|D ]  }|j'                  t;        |«      «       Œ Œôt        j8                  d/|«      r�Œ|j                  d0«      r8d1j=                  d2„ |j                  d1d	¬
«      j?                  d1«      D «       «      }|j'                  |«       �Œh d3j=                  d4„ |D «       «      }tA        |j                  «       «      d5k  r/d1j=                  d6„ |D «       «      }|rd7|› d8|› d9|› �}n	d7|› d8|› d:�}|r|dd; n|}tB        d%|||||tD        d<|rtG        jH                  |d=¬>«      d?œ
S d%d?œ
S # t        $ r}t        d|› �«       Y d}~yd}~ww xY wc c}w )@u   çˆ¬å�–è¯¦æƒ…é¡µr   z    Detail: r   Né(   ú...z    Error: r   Tr   Ú_r   r   r    u"   æ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})Údivz content|article|detail|text|body)Úclass_Úarticle©Úidzmain|container|wrap)ÚheaderÚfooterÚnavÚasideÚbody)r?   r@   rA   rB   ÚscriptÚstyler   )r   r   r   r   z+\.(doc|docx|pdf|xls|xlsx|ppt|pptx|zip|rar)$)r   r   Úpc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©Nr=   )Ú.0Ú_cs     r   ú	<genexpr>zcrawl_detail.<locals>.<genexpr>§   s   è ø€ Ò!M¨R¤" R§&Ñ!Mùs   ‚ÚformÚtextareaz[\ue000-\uf8ff]r   )u   é™„ä»¶ä¸‹è½½u   æ–‡ç« è¯„è®ºu   ^å…± \d+ æ�¡è¯„è®ºu"   ^è¿™ç¯‡æ–‡ç« è¿˜æ²¡æœ‰æ”¶åˆ°è¯„è®ºu!   ^æ—¥æœŸ[ï¼š:]\s*\d{4}-\d{2}-\d{2}u	   è®¿é—®é‡�u   å…± 0 æ�¡è¯„è®ºu   èµ¶ç´§æ�¥æŠ¢æ²™å�‘u!   è¿™ç¯‡æ–‡ç« è¿˜æ²¡æœ‰æ”¶åˆ°è¯„è®ºÚtableu>   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|ç¼–è¾‘[ï¼š:]|\[çº é”™\]).*Úbrú
c              3   ó^   K  — | ]%  }|j                  «       sŒ|j                  «       –— Œ' y ­wrH   r   )rI   Úsegs     r   rK   zcrawl_detail.<locals>.<genexpr>Ê   s"   è ø€ Ò p°Ðdg×dmÑdmÕdo §¡§Ñ pùs   ‚-˜-z

c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­wrH   © )rI   Úparts     r   rK   zcrawl_detail.<locals>.<genexpr>Í   s   è ø€ ÒA 4ºDœ$ÑAùs   ‚Šé   c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)ú[r   z](r   ú)NrT   )rI   r   s     r   rK   zcrawl_detail.<locals>.<genexpr>Ñ   s'   è ø€ Ò TÀ1 1 Q w¡Z L°°1°U±8°*¸AÔ!>Ñ Tùs   ‚z<p><a href="z">u   </a></p>

é™„ä»¶ï¼š
z</a></p>éÈ   Ú	publishedF)Úensure_ascii)
Ú	site_nameÚ
source_urlÚpage_urlr   Úpublish_dateÚcontentÚsummaryÚcategoryÚstatusÚattachments)%r"   r   r#   r   r$   r'   r(   Úrsplitr   ÚreÚsearchÚgroupÚcompileÚfind_allÚ	decomposer)   r*   ÚrstripÚIr+   ÚosÚpathÚbasenameÚsetÚupdater>   Úfind_parentÚsubÚmatchÚstrÚjoinÚsplitr&   Ú	SITE_NAMEÚGROUPÚjsonÚdumps)Úitemr   r   r-   r.   r   Út_tagÚt_textr    Ú
date_matchÚcontent_divÚmain_divÚtagrC   Úcontent_partsre   Úa_tagr   Úattach_titleÚ_allÚ_has_hit_childÚ_nÚ_leavesrF   r$   ÚtablesrN   ra   Úattach_linksrb   s                                 r   Úcrawl_detailrŽ   ]   s  € à
ˆu‰+€CÜ	ˆL˜˜g™ s¨Ð+Ð,¨CÐ
0Ô1ðÜ�S‹zˆô
 ˜Ÿ™ MÓ2€Dð �‰M€EÙà—	‘	˜'Ó"ˆÙØ—^‘^¨$�^Ó/ˆFØ�f‰}ØŸ™ c¨1Ó-¨aÑ0×6Ñ6Ó8�ð �‰<€DÜ—‘Ð@À$Ç)Á)ÓL€JÙØ×Ñ Ó"ˆð —)‘)˜E¬"¯*©*Ð5XÓ*Y�)ÓZ€KÙØ—i‘i 	Ó*ˆÙØ—i‘i¤2§:¡:Ð.QÓ#R�iÓSˆÙØ—9‘9˜U¬2¯:©:Ð6LÓ+M�9ÓNˆÙØ×(Ñ(Ò)MÓNò  �Ø—‘•ð à"‰Kà—9‘9˜VÓ$ˆDÙØŸ=™=Ò)`Óaò $�CØ—M‘M•Oð$à"�à€MØ€Kâà ×)Ñ)¨#°DÐ)Ó9ò 	ˆEØ˜‘=ˆDØ—?‘? 6Ô*Ø—?‘? 3Ô'Ü&˜Z¨ vÐ.‘Dà!Ÿj™j¨›oÐ.¨a°¨vÐ6�DÜ�y‰yÐGÈÌrÏtÉtÕTØ$Ÿ~™~°D˜~Ó9�Ø×"Ñ"Ø)ÒC¬R¯W©W×-=Ñ-=¸dÓ-CØñ$õ ð	ð$ ×#Ñ# S¨% LÓ1ˆÜ›ˆØò 	NˆBØ×!Ñ!Ñ!M°2·;±;ÀÀU¸|Ó3LÔ!MÕMð	Nà $ÖE˜"¬¨2«°nÒ(D’2ÐEˆÐEØó "	'ˆAØ—:‘: D�:Ô)ØØ�}‰}˜f jÐ1Ô2Øà—:‘: D�:Ó)ˆDä—6‘6Ð,¨b°$Ó7×=Ñ=Ó?ˆDÙØØÐ7Ñ7¼2¿8¹8ÐDYÐ[_Ô;`ØÜ�x‰xÐ=¸tÔDØä�x‰xÐ<¸dÔCÈÐW[ÑH[ØØ  DÑ(Ð,@ÀDÑ,HÐLoÐswÑLwØà—Z‘Z Ó(ˆFÙØ#ò 5�EØ!×(Ñ(¬¨U«Õ4ð5àô �x‰xÐYÐ[_Ô`Ùð �v‰v�dŒ|Ø—y‘yÑ p¸¿
¹
À4Èt¸
Ó8T×8ZÑ8ZÐ[_Ó8`Ô pÓp�Ø× Ñ  Ö&ðE"	'ðH �k‰kÑA¨=ÔAÓA€Gô ˆ7�=‰=‹?Ó˜bÒ Ø—y‘yÑ TÈÔ TÓTˆÙØ$ S E¨¨E¨7Ð2IÈ,ÈÐX‰Gà$ S E¨¨E¨7°(Ð;ˆGá&ˆg�d�s‰m¨E€Gô ØØØØØØÜØÙFQ”t—z‘z +¸EÔBñð ð XZñð øôk ò Ü�˜A˜3ÐÔ ÜûðüòH Fs#   œS? ËT#Ë2T#Ó?	T ÔTÔT Fc                 ó(  — | syt        j                  |d¬«      }|j                  «       }d}t        | «      D ]�  \  }}	 |j	                  d|d   |d   |d   |d   |d	   |d
   |d   |d   |d   |d   f
«       |j
                  dkD  r>|dz  }|dk  s|dz   dz  dk(  r)t        d|dz   › dt        | «      › d|d   dd › d|› �«       Œ� |j                  «        |j                  «        |S # t        $ r}t        d|d   › d|› �«       Y d}~ŒÔd}~ww xY w)u   ä¿�å­˜åˆ°æ•°æ�®åº“r   é<   r   zÝINSERT OR IGNORE INTO gov_raw 
                (site_name, source_url, page_url, title, publish_date,
                 content, summary, category, status, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r]   r^   r_   r   r`   ra   rb   rc   rd   re   r   r   rV   ú  [r   ú] Nr7   z +z	  ERROR [z]: )Úsqlite3ÚconnectÚcursorÚ	enumerateÚexecuteÚrowcountr"   r&   r#   ÚcommitÚclose)	ÚrecordsÚdb_pathÚincrementalÚconnÚcÚ	new_countÚiÚrecr-   s	            r   Ú
save_to_dbr£   ç   sK  € áØä�?‰?˜7¨BÔ/€DØ�‰‹€Aà€IÜ˜GÓ$ò 7‰ˆˆ3ð	7Ø�I‰Ið 9ð �[Ñ! 3 |Ñ#4°c¸*±oØ�W‘˜s >Ñ2°C¸	±NØ�Y‘  Z¡°#°h±-Ø�]Ñ#ð%ô	&ð �z‰z˜AŠ~Ø˜Q‘�	Ø ’> a¨¡c¨R¡Z°1¢_Ü˜C  !¡˜u A¤c¨'£l ^°2°c¸'±lÀ3ÀBÐ6GÐ5HÈÈ9È+ÐVÔWøð7ð" 	‡K�K„MØ‡J�J„LØÐøô ò 	7Ü�I˜c *™oÐ.¨c°!°Ð5×6Ñ6ûð	7ús   ¿BC*Ã*	DÃ3DÄDc                  ó¤  — t        dt        › d�«       g } t        «       }t        dt        dz   «      D ]m  }t        |«      }|st        d|› �«        nPt        dt        |«      › d|› �«       |D ]/  }|d   |vsŒ|j                  |d   «       | j                  |«       Œ1 Œo t        dt        | «      › �«       g }t        | «      D ]_  \  }}t        d	|dz   › d
t        | «      › d|d   d d › d�«       t        |«      }|r|j                  |«       t        j                  d«       Œa |rt        |«      }t        d|› d�«       y t        d«       y )Nz=== u    - å…¨é‡�çˆ¬å�– ===r   z  -> 0 items on page z  -> z items on page r   z
Total unique items: r‘   r   r’   r   é   r8   g      à?z

Inserted z% new records (trigger auto-syncs FTS)z
No records to insert)r"   rz   rr   ÚrangeÚ	MAX_PAGESr5   r&   Úaddr+   r–   rŽ   ÚtimeÚsleepr£   )	Ú	all_itemsÚ	seen_urlsÚpager/   r~   r›   ÚidxÚdetailÚcounts	            r   Úmainr±     s`  € Ü	ˆD”�Ð.Ð
/Ô0à€IÜ“€Iä�aœ Q™Ó'ò 	'ˆÜ˜4Ó ˆÙÜÐ)¨$¨Ð0Ô1ÙÜ�”c˜%“j�\ °°Ð7Ô8Øò 	'ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Õ&ñ	'ð	'ô 
Ð"¤3 y£>Ð"2Ð
3Ô4à€GÜ˜yÓ)ò ‰	ˆˆTÜ��C˜‘E�7˜!œC 	›NÐ+¨2¨d°7©m¸C¸RÐ.@Ð-AÀÐEÔFÜ˜dÓ#ˆÙØ�N‰N˜6Ô"Ü�
‰
�3�ðñ Ü˜7Ó#ˆÜ�˜E˜7Ð"GÐHÕIäÐ&Õ'r   Ú__main__z--incrementalr   )r¥   )Ú__doc__Úrequestsrg   r|   r©   Úsysro   r“   Úbs4r   r*   r!   rz   r{   Úenvironr   r   r§   ÚHEADERSÚSessionr
   Úheadersrs   r   r5   rŽ   r£   r±   Ú__name__ÚargvrT   r   r   ú<module>r½      sØ   ðñó Û 	Û Û Û 
Û 	Û Ý à!€ØÐ'Ñ'€	Ø*€	Ø€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø€	ð DØOØ0ñ€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ óò/òdGðT !(°Uó ò>(ðD ˆzÒà˜#Ÿ(™(Ñ"Øˆ	Ù…Fð	 r   