Ë
    ¸¬uj,  ã                   ó€  — d Z ddlZddlZddlZddlZddlZej                  j                  dd«       ddlm	Z	m
Z
 ddlZddlZdZdZdZ ej                  dd	«      Zd
ZdZdZdde› de› de› �dœZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r8 ej                  «       Z e«         ed ej                  «       ez
  d›d�«       yy)u  
å’ŒåŽ¿äººæ°‘æ”¿åºœ-ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€ (hx.gov.cn)
å»ºè®¾é¡¹ç›®çŽ¯è¯„æ–‡ä»¶ï¼ˆæŠ¥å‘Šä¹¦ã€�æŠ¥å‘Šè¡¨ï¼‰å®¡æ‰¹(é�žæ”¿åºœæŠ•èµ„é¡¹ç›®)
åˆ—è¡¨: /xxgk/opennessTarget/?branch_id=...&column_code=350101&page=N (AJAX)
è¯¦æƒ…: /xxgk/openness/detail/content/{id}.html
é    Nz/root/gov_crawler)Ú
fetch_pageÚ
clean_htmlu   å’ŒåŽ¿ç”Ÿæ€�çŽ¯å¢ƒåˆ†å±€zhttps://www.hx.gov.cnz
2023-06-01Ú	SEARCH_DBz/root/search.dbÚ57a3df762c262ea9a00aad33Ú350101é   z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36ztoken_verified=truez!/xxgk/opennessContent/?branch_id=ú&column_code=)z
User-AgentÚCookieÚRefererc                 ó  — | st        d«       y t        j                  t        «      }|j	                  d«       |j	                  d«       d\  }}| D ]Ô  }	 |j	                  d|j                  dd«      d d |j                  d	d«      |j                  d	d«      |j                  d
«      xs dd d |j                  d«      xs dd d |j                  d«      xs dd d |j                  dd«      dd|j                  d«      xs dd d f
«       |j                  dkD  r|dz  }n|dz  }ŒÖ |j                  «        |j	                  dt        f«       |j                  «        |j                  «        t        d|› d|› d�«       y #  |dz  }Y �Œ;xY w)Nu     â�­ æ— æ•°æ�®zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMAL)r   r   zÑINSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date,
                 summary, content, status, category, tags)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)Ú	site_nameÚ éÈ   ÚurlÚtitleiô  Úpub_dateé
   ÚsummaryÚcontentÚactiveÚtagséd   r   é   zÇINSERT INTO gov_search(rowid, title, site_name, summary)
        SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r
        WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?u     ðŸ’¾ å…¥åº“: æ–°å¢žu   , è·³è¿‡u   , FTSå·²å�Œæ­¥)
ÚprintÚsqlite3Úconnectr   ÚexecuteÚgetÚtotal_changesÚcommitÚ	SITE_NAMEÚclose)ÚitemsÚdbÚokÚskipÚitems        ú/root/gov_crawler/crawl_hx.pyÚinsert_to_dbr)      s”  € ÙÜÐÔ ØÜ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð 5ð —‘˜ RÓ(¨¨#Ð.Ø—‘˜˜rÓ"Ø—‘˜˜rÓ"Ø—‘˜'Ó"Ò( b¨$¨3Ð/Ø—‘˜*Ó%Ò+¨¨S¨bÐ1Ø—‘˜)Ó$Ò*¨¨D¨SÐ1Ø—‘˜ 2Ó&Ø˜"˜tŸx™x¨Ó/Ò5°2°t¸Ð<ð	7ôð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð%ð* ‡I�I„KØ‡J�Jð Nô 
ˆôð ‡I�I„KØ‡H�H„JÜ	Ð! "  X¨d¨V°>Ð
BÕCøð	Ø�A‰I‹Dús   ÁCFÆFc                 ó  — ddl }|j                  j                  | t        ¬«      }	 |j                  j	                  |d¬«      }|j                  «       j                  dd¬«      }|S # t        $ r}t        d	|› �«       Y d}~yd}~ww xY w)
u#   å¸¦ token_verified cookie çš„è¯·æ±‚r   N)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsu       â�Œ è¯·æ±‚å¤±è´¥: )	Úurllib.requestÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	Exceptionr   )r   ÚurllibÚreqÚrespÚhtmlÚes         r(   Úfetch_with_cookier=   D   s   € ãØ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðØ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<ˆØˆøÜò ÜÐ& q cÐ*Ô+Üûðús   §?A' Á'	BÁ0BÂBc                 ó4   — t         › dt        › dt        › d| › �S )Nz /xxgk/opennessTarget/?branch_id=r	   z&page=)ÚBASEÚ	BRANCH_IDÚCOLUMN_CODE)Úpages    r(   Úget_list_urlrC   P   s#   € ÜˆVÐ3´I°;¸mÌKÈ=ÐX^Ð_cÐ^dÐeÐeó    c                 ó¦  — g }t        j                  dt         j                  «      }|j                  | «      D ]–  }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|sŒ‚|j                  ||||f«       Œ˜ |S )u/   è§£æž�åˆ—è¡¨é¡µï¼Œæ��å�– (title, url, date_str)z²<td\s+class="xh"[^>]*>\d+</td>\s*<td\s+class="bt"[^>]*><a\s+href="(/xxgk/openness/detail/content/([^"]+))"[^>]*>(.*?)</a>.*?<td\s+class="cwrq"[^>]*>\s*(\d{4}-\d{2}-\d{2})\s*</td>r   é   é   é   )ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚappend)r;   r#   ÚpatternÚmÚhrefÚ
content_idr   Údate_strs           r(   Ú
parse_listrU   S   sµ   € à€Eä�j‰jð 	~Ü
�	‰	ó€Gð ×Ñ˜dÓ#ò >ˆØ�w‰w�q‹z×ÑÓ!ˆØ—W‘W˜Q“Z×%Ñ%Ó'ˆ
Ø—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:×#Ñ#Ó%ˆÚØ�L‰L˜%  z°8Ð<Õ=ð>ð €LrD   c                 óÈ
  — t        | «      }|syd}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|s7t        j                  d|«      }|r|j	                  d«      j                  «       }|sdt        j                  d|t        j                  «      }|r=|j	                  d«      j                  «       j                  dd«      j                  «       }d}t        j                  d|«      }|r|j	                  d«      }|s)t        j                  d	|«      }|r|j	                  d«      }d}t        j                  d
|«      }|r|j	                  d«      j                  «       }d}t        j                  d|«      }|r|j	                  d«      j                  «       }d}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|sFt        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|�r%t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|«      }t        j                  dd|«      }t        |«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|t        j                  ¬«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|t        j                  ¬«      }t        j                  d |«      }i }	|D ]B  }
|
j                  «       }
t        |
«      d!kD  sŒ"|
|	v r|j                  d"|
› d#�d$d«      }Œ>d|	|
<   ŒD g }t        j                  d%|t        j                  «      }|r±|j	                  d«      }t        j                  d&|t        j                  «      D ]x  }|j	                  d«      r|j	                  d«      j                  «       nd}|j	                  d'«      rt        |j	                  d'«      z   nd}|s|sŒe|j                  ||d(œ«       Œz |xs d)|xs d)|xs d)|||fS )*u*   èŽ·å�–è¯¦æƒ…é¡µçš„æ ‡é¢˜ã€�æ­£æ–‡ã€�æ—¥æœŸ)NNNNNNr   z,<h1[^>]*id="downloads_title"[^>]*>(.*?)</h1>r   z/<meta\s+name="ArticleTitle"\s+content="([^"]*)"z<title>(.*?)</title>u   -å’ŒåŽ¿äººæ°‘æ”¿åºœz5<meta\s+name="PubDate"\s+content="(\d{4}-\d{2}-\d{2})u1   æˆ�æ–‡æ—¥æœŸ[ï¼š:].*?<td[^>]*>(\d{4}-\d{2}-\d{2})u(   å�‘å¸ƒæœºæž„[ï¼š:].*?<td[^>]*>(.*?)</td>u)   æ–‡[ ã€€]*å�·[ï¼š:].*?<td[^>]*>(.*?)</td>z=<div\s+id="downloads_body"[^>]*>(.*?)</div>\s*</div>\s*</div>z+<div\s+id="downloads_body"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z\s*style="[^"]*"z\s*class="[^"]*"z
<p>\s*(<p)z\1z
<p>\s*</p>z<div>\s*</div>z<div>&nbsp;</div>z</p>\s*</p>z</p>u.   <p>\s*æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€å½“å‰�é¡µ\s*</p>u!   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€å½“å‰�é¡µu+   å¦‚æžœå†…å®¹ä¸�èƒ½æ­£å¸¸æ˜¾ç¤º.*?(?:</p>|$)uC   \[?\s*åœ¨çº¿å®‰è£…\s*\]?\s*[,ï¼Œ]?\s*(?:æˆ–ä¸‹è½½æœ¬PDFæ–‡æ¡£ã€‚?)?z<div\s+id="qrcode"[^>]*>z"class="attachments"[^>]*>.*?</div>z	>([^<]+)<é   ú>ú<z><z,<div\s+class="m-xgxx"[^>]*>.*?<ul>(.*?)</ul>uj   <li[^>]*>(.*?)(?:<li\s+class="linkxz"[^>]*><a\s+href="(/xxgk/download/[^"]+)"[^>]*>æ–‡ä»¶ä¸‹è½½</a>)?</li>rF   )Únamer   N)r=   rI   ÚsearchrK   rM   rN   r.   ÚsubÚIr   ÚfindallÚlenrL   r?   rO   )r   r;   r   rQ   r   Ú	publisherÚdoc_nor   ÚtextsÚ
seen_textsÚtÚattachmentsÚattach_htmlÚamr[   Úlinks                   r(   Úfetch_detailrj   d   s†  € ä˜SÓ!€DÙØ1ð €EÜ
�	‰	ÐAÀ4ÌÏÉÓS€AÙØ—‘˜“
× Ñ Ó"ˆÙä�I‰IÐHÈ$ÓOˆÙØ—G‘G˜A“J×$Ñ$Ó&ˆEÙä�I‰IÐ-¨t´R·Y±YÓ?ˆÙØ—G‘G˜A“J×$Ñ$Ó&×.Ñ.Ð/DÀbÓI×OÑOÓQˆEð €HÜ
�	‰	ÐJÈDÓQ€AÙØ—7‘7˜1“:ˆÙÜ�I‰IÐJÈDÓQˆÙØ—w‘w˜q“zˆHð €IÜ
�	‰	Ð=¸tÓD€AÙØ—G‘G˜A“J×$Ñ$Ó&ˆ	ð €FÜ
�	‰	Ð>ÀÓE€AÙØ—‘˜“×!Ñ!Ó#ˆð €GÜ
�	‰	ÐRÐTXÔZ\×ZcÑZcÓd€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆÙÜ�I‰IÐDÀdÌBÏIÉIÓVˆÙØ—g‘g˜a“j×&Ñ&Ó(ˆGâÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆÜ—&‘&Ð,¨b°'Ó:ˆÜ—&‘&Ð,¨b°'Ó:ˆä˜WÓ%ˆä—&‘&˜¨¨wÓ7ˆä—&‘&˜¨¨GÓ4ˆÜ—&‘&Ð*¨B°Ó8ˆÜ—&‘&Ð-¨r°7Ó;ˆä—&‘&˜¨°Ó9ˆä—&‘&ÐJÈBÐPWÓXˆÜ—&‘&Ð=¸rÀ7ÓKˆÜ—&‘&ÐGÈÈWÔ\^×\eÑ\eÔfˆÜ—&‘&Ð_ÐacÐelÓmˆô —&‘&Ð4°b¸'ÓBˆÜ—&‘&Ð>ÀÀGÔSU×S\ÑS\Ô]ˆä—
‘
˜<¨Ó1ˆØˆ
Øò 	&ˆAØ—‘“	ˆAÜ�1‹v˜‹{Ø˜
‘?à%Ÿo™o°°!°°A¨h¸¸aÓ@‘Gà$%�J˜q’Mð	&ð €KÜ
�	‰	ÐAÀ4ÌÏÉÓS€AÙØ—g‘g˜a“jˆÜ—+‘+ð  Lð  NYô  []÷  [dñ  [dó  eò 	@ˆBØ*,¯(©(°1¬+�2—8‘8˜A“;×$Ñ$Ô&¸2ˆDØ)+¯©°!¬”4˜"Ÿ(™( 1›+Ò%¸"ˆDÙ’tØ×"Ñ"¨D¸Ñ#>Õ?ð		@ð Š=�D˜'š/ T¨8Ò+;°t¸YÈÐP[Ð[Ð[rD   c                  ó†  — t        dd› dt        › dd› �«       g t        «       }} t        dt        dz   «      D �]a  }t        |«      }t        d|› d�dd¬	«       t        |«      }|st        d
«        �n)t        |«      }|st        d«        �nt        dt        |«      › d�«       t        j                  d|«      }|rVt        |j                  d«      «      }t        |j                  d«      «      }t        d|› d|› d�«       ||k\  rt        d«       t        |d«      D �]Z  \  }	\  }
}}}t        |z   }||v rŒ|j                  |«       |r
|t         k  rŒ7t        d|	› dt        |«      › d|
d d › d�dd¬	«       t#        |«      \  }}}}}}|r|}
|r|}d}|rJd}|D ]>  }|j%                  dd«      }|j%                  dd«      }|r|d|› d|› d�z  }Œ6|d|› d �z  }Œ@ |d!z  }|xs d|z   }t        j&                  d"d|«      j)                  «       d d# }t        j&                  d$d|«      }d%}|r|d|› �z  }| j+                  t        |
|||xs d||d&œ«       t        d|› �«       t-        j.                  d'«       �Œ] t        |«      d(k  s�ŒWt        d)«        n | rt1        | «       t        d*t        | «      › d�«       y )+Nú
z2==================================================u   
ðŸ�  r   u     ðŸ“„ ç¬¬ u    é¡µ...ú T)ÚendÚflushu   â�Œ è¯·æ±‚å¤±è´¥u   0 æ�¡ï¼ˆå�¯èƒ½æ˜¯æœ«é¡µï¼‰u   âœ… u    æ�¡z7<pagination\s+currentpage="(\d+)"[^>]*pagecount="(\d+)"rF   u       (ç¬¬ú/u   é¡µ)u       (æœ«é¡µ)z    [z] é2   z...r   u2   <div class="attachments"><h3>æ–‡ä»¶ä¸‹è½½</h3><ul>r[   r   z<li><a href="z">z	</a></li>z<li>z</li>z</ul></div>z<[^>]+>i,  z\s+u   çŽ¯è¯„å®¡æ‰¹-å’ŒåŽ¿)r   r   r   r   r   r   r   g333333Ó?rX   u       (æœ«é¡µ, ä¸�è¶³20æ�¡)u   
âœ… å®Œæˆ�! å…± )r   r!   ÚsetÚrangeÚ	MAX_PAGESrC   r=   rU   r`   rI   r\   ÚintrM   Ú	enumerater?   ÚaddÚTHREE_YEARS_AGOrj   r   r]   rN   rO   ÚtimeÚsleepr)   )Ú	all_itemsÚseenrB   r   r;   r#   Úpagination_matchÚcurrentÚtotalÚir   rR   rS   rT   Úfull_urlÚdtr   r   ra   rb   rf   ÚextraÚattr[   ri   Úfull_contentr   r   s                               r(   Úmainr†   Ì   s  € Ü	ˆBˆvˆh�gœi˜[¨¨6¨(Ð
3Ô4Øœ#›%ˆt€Iä�aœ Q™Ó'ó HˆÜ˜4Ó ˆÜ�˜D˜6 Ð)¨s¸$Õ?Ü  Ó%ˆÙÜÐ$Ô%Úä˜4Ó ˆÙÜÐ.Ô/Úä�”S˜“Z�L Ð%Ô&ô Ÿ9™9Ð%_ÐaeÓfÐÙÜÐ*×0Ñ0°Ó3Ó4ˆGÜÐ(×.Ñ.¨qÓ1Ó2ˆEÜ�H˜W˜I Q u g¨TÐ2Ô3Ø˜%ÒÜ�nÔ%ä6?ÀÀqÓ6Ió +	Ñ2ˆAÑ2��t˜Z¨Ü˜d‘{ˆHØ˜4ÑØØ�H‰H�XÔá˜H¤Ò6Øä�E˜!˜˜Aœc %›j˜\¨¨E°#°2¨J¨<°sÐ;ÀÈDÕQÜDPÐQYÓDZÑAˆB�˜ 9¨f°kÙØ�ÙØ#�ð ˆEÙØL�Ø&ò 4�CØŸ7™7 6¨2Ó.�DØŸ7™7 5¨"Ó-�DÙØ =°°°b¸¸¸iÐ!HÑH™à 4¨ v¨UÐ!3Ñ3™ð4ð ˜Ñ&�Ø#šM r¨UÑ2ˆLä—f‘f˜Z¨¨lÓ;×AÑAÓCÀDÀSÐIˆGÜ—f‘f˜V S¨'Ó2ˆGà(ˆDÙØ˜!˜F˜8˜Ñ$�à×ÑÜ&°¸xØ'°X²^ÀØ"¨Dñô ô
 �D˜˜
Ð#Ô$Ü�J‰J�sŽOðW+	ô\ ˆu‹:˜Œ?ÜÐ-Ô.ÙðQHñT Ü�YÔÜ	Ðœs 9›~Ð.¨dÐ
3Õ4rD   Ú__main__u   â�± è€—æ—¶: z.1fÚs)Ú__doc__ÚsysÚosrI   ry   ÚjsonÚpathÚinsertÚcrawler_libr   r   r   r!   r?   rx   Úgetenvr   r@   rA   rt   r3   r)   r=   rC   rU   rj   r†   Ú__name__Út0r   © rD   r(   ú<module>r”      sò   ðñ÷ × Ó Ø ‡�‡��Ð&Ô 'ß .Û Û 	à&€	Ø€Ø€ØˆB�I‰I�kÐ#4Ó5€	ð '€	Ø€Ø€	ð QØ#Ø�Ð8¸¸À=ÐQ\ÐP]Ð^ñ€ò$DòL
òfòò"e\òPP5ðf ˆzÒØ	ˆ�‰‹€BÙ„FÙ	ˆL˜˜Ÿ™› R™¨Ð,¨AÐ
.Õ/ð rD   