Ë
    Í«£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mZ ddlm	Z	 dZ
dZdZdZdZd	Zd
dddœZdZdd„Zd„ Zd„ Zd„ Zdefd„Zedk(  radej0                  v ZeZ eej0                  «      D ]1  \  ZZej=                  d«      sŒ eejA                  d«      d   «      ZŒ3  eee¬«       yy)u;   é“œä»�å¸‚ä¸‡å±±åŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (TRS IGI CMS)é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu+   é“œä»�å¸‚ä¸‡å±±åŒºäººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šu   è´µå·žz!http://www.trws.gov.cn/xwzx/tzgg/é   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)z
User-AgentÚAcceptzAccept-Languagez·INSERT OR IGNORE INTO gov_raw
    (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)c                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparser   )ÚtableÚbase_urlÚurllibÚtblr	   r
   r   r   s           úcrawl_trws.pyÚhtml_table_to_htmlr      sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                  ó|   — dd l } | j                  t        «      }|j                  d«       |j                  d«       |S )Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r   Úconns     r   Úinit_dbr$   '   s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  dd¬«      D ]Î  }|j                  d«      }|sŒ|j                  d	«      xs |j	                  d
¬«      xs dj                  «       }|sŒQ|j                  dd«      j                  «       }|sŒt|j                  d«      r|nt        d|«      }|j                  d«      }	|	r|	j	                  d
¬«      nd}
|j                  |||
dœ«       ŒÐ |S )z/Extract (title, url, date) from list page HTML.r   ÚulÚNewsList©Úclass_ÚliF©Ú	recursiver	   ÚtitleT©Ústripr   r
   r   zhttp://www.trws.gov.cnÚspan)r-   ÚurlÚdate)	r   Úfindr   r   Úget_textr/   r   r   Úappend)Ú	html_textÚsoupÚitemsr&   r*   r	   r-   r
   Úfull_urlr0   r2   s              r   Úextract_list_itemsr:   /   s  € ä˜ MÓ2€DØ€EØ	�‰�4 
ˆÓ	+€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò FˆØ�G‰G�C‹LˆÙØØ—‘�w“Ò? 1§:¡:°D :Ó#9Ò?¸R×FÑFÓHˆÙØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙØØŸ?™?¨6Ô2‘4¼Ð@XÐZ^Ó8_ˆØ�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜u¨X¸tÑDÕEðFð €Lr   c                 óV  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry	 t        |j                  d	«      }|j                  d
d¬«      }|r|j                  d¬«      nd}d}|j                  dddi¬«      }|r'|j                  d«      r|d   j                  «       dd }g }g }	|j                  d
d¬«      }
|
�rÃ|
j                  d
t        j                  dt        j                   «      ¬«      }|r|n|
}|j#                  ddg«      D ]  }|j%                  «        Œ dD ]*  }|j#                  d
|¬«      D ]  }|j%                  «        Œ Œ, |j#                  ddgd¬«      D ]o  }|j&                  dk(  r!t)        || «      }|sŒ!|j+                  |«       Œ3|j&                  dk(  sŒC|j                  dd¬«      }|sŒY|dk7  sŒ_|j+                  |«       Œq |j#                  d d¬!«      D ]”  }|d"   j                  «       }t        j,                  d#|t        j                   «      sŒ<|j/                  d$«      r|nt1        | |«      }|	j+                  |j                  d¬«      xs |j3                  d%«      d&   |d'œ«       Œ– |s.|j+                  d(|xs | j3                  d%«      d&   ›d)| ›d*�«       d+j5                  |«      }|r|dd n|}|||t7        j8                  |	d,¬-«      fS # t
        $ r(}t        d|› �t        j                  ¬«       Y d}~yd}~ww xY w).z=Extract title, date, content, attachments from a detail page.é   ©ÚheadersÚtimeoutúutf-8éÈ   )NNNNz  [ERROR] fetch detail failed: ©ÚfileNr   ÚdivÚArticleTitler(   Tr.   r   ÚmetaÚnameÚPubDate)ÚattrsÚcontenté
   ÚArticle_ConÚTRSÚscriptÚstyle)zauto ewmÚvideoÚewmÚpr   r+   ú u$   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€å½“å‰�é¡µé�¢r	   )r
   r
   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r   ú/éÿÿÿÿ)rG   r1   ú[ú](ú)z

F)Úensure_ascii)Úrequestsr   ÚHEADERSÚencodingÚstatus_codeÚ	ExceptionÚprintÚsysÚstderrr   Útextr3   r4   r/   ÚreÚcompileÚIr   Ú	decomposerG   r   r5   Úsearchr   r   ÚsplitÚjoinÚjsonÚdumps)r1   ÚrÚer7   Útitle_elr-   Úpub_dateÚ	meta_dateÚcontent_partsÚattachmentsÚacÚtrsÚcontent_divÚnoiseÚcls_nameÚelÚchildÚtbl_htmlÚtxtr	   r
   Ú	full_hrefÚcontent_textÚsummarys                           r   Úextract_detailr   G   s  € ð&Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ)ð  ô ˜Ÿ™ Ó/€Dð �y‰y˜ ~ˆyÓ6€HÙ-5ˆH×Ñ DÐÔ)¸2€Eð €HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜YÑ'×-Ñ-Ó/°°Ð4ˆð €MØ€KØ	�‰�5 ˆÓ	/€BÚ	à�g‰g�e¤B§J¡J¨v´r·t±tÓ$<ˆgÓ=ˆÙ ‘c bˆð !×)Ñ)¨8°WÐ*=Ó>ò 	ˆEØ�O‰OÕð	à4ò 	ˆHØ!×*Ñ*¨5¸Ð*ÓBò �Ø—‘•ñð	ð
 !×)Ñ)¨3°¨.ÀDÐ)ÓIò 	.ˆEØ�z‰z˜WÒ$Ü-¨e°SÓ9�ÚØ!×(Ñ(¨Õ2Ø—‘˜sÓ"Ø—n‘n S°�nÓ5�Ú˜3Ð"HÓHØ!×(Ñ(¨Õ-ð	.ð ×%Ñ% c°Ð%Ó5ò 	ˆAØ�V‘9—?‘?Ó$ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ$(§O¡O°FÔ$;™DÄÈÈdÓAS�	Ø×"Ñ"ØŸJ™J¨T˜JÓ2ÒI°d·j±jÀ³oÀbÑ6IØ$ñ$õ ð		ñ Ø×Ò¨5Ò+F°C·I±I¸c³NÀ2Ñ4FÑ+FÊÐLÔMà—;‘;˜}Ó-€LÙ$0ˆl˜4˜CÑ °e€Gà�(˜L¬$¯*©*°[ÈuÔ*UÐUÐUøôw ò &ÜÐ/°¨sÐ3¼#¿*¹*ÕEÜ%ûð&ús   ‚2K7 Ë7	L(Ì L#Ì#L(Fc                 óª  — t        «       }|j                  «       }d}d}t        d|dz   «      D �]y  }|dk(  rt        }nd|dz
  z  }t	        d|› d|› �t
        j                  ¬«       	 t        j                  |t        d¬«      }d	|_
        |j                  d
k7  r1t	        d|› d|j                  › �t
        j                  ¬«       |dz  }Œ�	 t        |j                  «      }
t	        dt        |
«      › d�t
        j                  ¬«       |
st	        dt
        j                  ¬«        �n‚|
D �]d  }|j!                  d|d   f«       |j#                  «       r%t	        d|d   d d › �t
        j                  ¬«       ŒOt%        |d   «      \  }}}}|€'t	        d|d   › �t
        j                  ¬«       |dz  }Œ‹|xs |d   }|xs |d   }|r|d d
 n|}| r*t	        d|› d|d d › �t
        j                  ¬«       |dz  }ŒÒ	 |j!                  t&        t(        |d   |d   |j+                  «       ||j+                  «       |xs d|›d|d   ›d�t,        |t.        f
«       |j1                  «        |dz  }t	        d|d d › �t
        j                  ¬«       �Œg t3        j4                  d«       �Œ| |j7                  «        t	        d|› d |› �t
        j                  ¬«       |S # t        $ r1}	t	        d|› d|	› �t
        j                  ¬«       |dz  }Y d }	~	�Œåd }	~	ww xY w# t        $ r.}	t	        d|	› �t
        j                  ¬«       |dz  }Y d }	~	�Œ"d }	~	ww xY w)!Nr   é   z.http://www.trws.gov.cn/xwzx/tzgg/index_%d.htmlz[Page z] rB   r<   r=   r@   rA   z  [ERROR] list page z HTTP z: z  Found z itemsz!  [WARN] No items found, stoppingz)SELECT id FROM gov_raw WHERE page_url = ?r1   z  SKIP (exists): r-   é(   z  [ERROR] detail unreachable: r2   z  [é2   rV   rW   rX   z  OK: z  DB error: z
[DONE] Total: z
, Errors: )r$   ÚcursorÚrangeÚBASE_URLr_   r`   ra   rZ   r   r[   r\   r]   r^   r:   rb   Úlenr"   Úfetchoner   Ú
INSERT_SQLÚ	SITE_NAMEr/   ÚCATEGORYÚGROUPÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr#   ÚcurÚtotalÚerrorsÚpnÚlist_urlrl   rm   r8   Úitemr-   ro   rJ   rr   Úfinal_titleÚ
final_dateÚfinal_summarys                      r   Úcrawlrœ   Œ   s-  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€Fä�A�y 1‘}Ó%ó ?ˆØ�Š7Ü‰HàGÈ2ÐPQÉ6ÑRˆHä��r�d˜"˜X˜JÐ'¬c¯j©jÕ9ð
	Ü—‘˜X¬wÀÔCˆAØ ˆAŒJØ�}‰} Ò#ÜÐ,¨R¨D°°q·}±}°oÐFÌSÏZÉZÕXØ˜!‘�Øð $ô # 1§6¡6Ó*ˆÜ�œ˜U›˜ FÐ+´#·*±*Õ=áÜÐ5¼S¿Z¹ZÕHÚàó "	ˆDà�K‰KÐCÀdÈ5ÁkÀ^ÔTØ�|‰|Œ~ÜÐ)¨$¨w©-¸¸Ð*<Ð)=Ð>ÄSÇZÁZÕPØä4BÀ4ÈÁ;Ó4OÑ1ˆE�8˜W kØˆ}ÜÐ6°t¸E±{°mÐDÌ3Ï:É:ÕVØ˜!‘�ØàÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJÙ-4˜G D S™M¸+ˆMáÜ˜˜J˜< r¨+°c°rÐ*:Ð);Ð<Ä3Ç:Á:ÕNØ˜‘
�ØðØ—‘œJÜ˜t E™{¨D°©KØ×%Ñ%Ó'¨Ø!×'Ñ'Ó)¨7Ó+_Â[ÐRVÐW\ÓR]Ð7^Ü˜k¬5ð	)ô ð —‘”Ø˜‘
�Ü˜˜{¨3¨BÐ/Ð0Ð1¼¿
¹
×Cð?"	ôH 	�
‰
�1Žð?ðB 	‡J�J„LÜ	Ð˜U˜G :¨f¨XÐ
6¼S¿Z¹ZÕHØ€Løôi ò 	ÜÐ(¨¨¨B¨q¨cÐ2¼¿¹ÕDØ�a‰KˆFÝûð	ûôX ò Ü˜ Q CÐ(¬s¯z©zÕ:Ø˜!‘–ûðús2   Á(A"KÇ>BLË	LË'&LÌLÌ	MÌ$#MÍMÚ__main__z--testz--max-pages=ú=r�   )r‘   r’   )r   )!Ú__doc__rj   rc   r`   rŽ   rZ   Úbs4r   r   r   r!   rŠ   r‹   rŒ   r†   Ú	MAX_PAGESr[   r‰   r   r$   r:   r   rœ   Ú__name__Úargvr‘   ÚmpÚ	enumerateÚir	   r   Úintrh   © r   r   ú<module>r©      sã   ðñ Bß $× $Ó $Ý Ý  à
€Ø9€	Ø€Ø€Ø.€Ø€	ð DØOØ'ñ€ð-€
ó
òòò0BVðJ  Yó IðX ˆzÒØ˜CŸH™HÐ$€IØ	€BÙ˜#Ÿ(™(Ó#ò &‰ˆˆ1Ø�<‰<˜Õ'Ù�Q—W‘W˜S“\ !‘_Ó%‰Bð&ñ 
�I¨Ö,ð r   