Ë
    ¸¬uj>  ã                   ó´  — 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	Z	ddl
mZ ddlmZmZ ddlZ ej                   ej"                  j$                  «       dZedz   ZdZdZd	Zd
Z ej2                  dd«      Zdedz   dœZ e	j8                  «       Zej<                  j?                  e«       de_         d„ Z!dd„Z"dd„Z#d„ Z$d„ Z%d„ Z&e'dk(  r e&«        yy)u  
æ‹œåŸŽåŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š
URL: https://www.xjbc.gov.cn/gsgg/index.html
CMS: é˜¿å…‹è‹�CMS (AJAX + OpenAPI)
List: dataList JSON embedded in first page (10 pages x 15 = 150 items pre-loaded)
Detail: div#zoomc > p (text) + table + img + attachments
é    N)ÚBeautifulSoup)ÚurljoinÚurlparsezhttps://www.xjbc.gov.cnz/gsgg/index.htmlu"   æ‹œåŸŽåŽ¿äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šu   å…¬ç¤ºå…¬å‘Šu   æ–°ç–†é   Ú	SEARCH_DBz/root/search.dbz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36ú/)z
User-AgentÚRefererFc                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    ú/root/gov_crawler/crawl_xjbc.pyÚlogr   !   s   € Ü	ˆ#”C—J‘J dÖ+ó    c           
      ó   — t        |«      D ].  }	 t        j                  | d¬«      }d|_        |j                  c S  y	# t
        $ r6}t        d|dz   › d|› d|› �«       t        j                  d«       Y d }~Œld }~ww xY w)
Né   ©Útimeoutzutf-8u     [WARN] è¯·æ±‚å¤±è´¥ (å°�è¯• é   r   z): é   Ú )	ÚrangeÚsessionÚgetÚencodingÚtextÚ	Exceptionr   ÚtimeÚsleep)ÚurlÚretriesÚattemptÚrÚes        r   Úfetchr(   %   s€   € Ü˜“>ò ˆð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØ—6‘6ŠMð	ð øô ò 	ÜÐ0°¸±°¸1¸W¸IÀSÈÈÐLÔMÜ�J‰J�q�M‰Mûð	ús   �)>¾	A=Á,A8Á8A=c           	      ó  — g }t        j                  d| t         j                  «      }|st        d«       |S 	 t	        j
                  |j                  d«      «      }t        |t        |«      «      }t        |«      D ]Û  }||   }|j                  dg «      }	|	D ]Ÿ  }
|
j                  dd«      j                  «       }|
j                  d	d«      j                  «       }|
j                  d
d«      }|r,t        j                  dt        j                  |dz  «      «      nd}|sŒˆ|sŒ‹|j!                  |||dœ«       Œ¡ t        d|dz   › dt        |	«      › d�«       ŒÝ |S # t        j                  $ r}t        d|› �«       |cY d}~S d}~ww xY w)uB   ä»Žç¬¬ä¸€é¡µHTMLä¸­è§£æž�dataList JSONï¼ŒèŽ·å�–å‰�Né¡µåˆ—è¡¨æ•°æ�®z$var dataList=(.*?);\s*var pagesData=u     [ERR] æœªæ‰¾åˆ°dataListæ•°æ�®r   u     [ERR] dataListè§£æž�å¤±è´¥: NÚinfolistÚtitler   r#   ÚreleaseTimer   z%Y-%m-%déè  )r#   r+   Údatez  Page z: z items)ÚreÚsearchÚDOTALLr   ÚjsonÚloadsÚgroupÚJSONDecodeErrorÚminÚlenr   r   Ústripr!   ÚstrftimeÚ	localtimeÚappend)ÚhtmlÚ	max_pagesÚitemsÚmÚdatar'   Úpages_to_takeÚpage_idxÚ	page_datar*   Úentryr+   r#   ÚtsÚdate_strs                  r   Úparse_list_datarG   1   sp  € à€EÜ
�	‰	Ð9¸4ÄÇÁÓK€AÙÜÐ-Ô.ØˆðÜ�z‰z˜!Ÿ'™' !›*Ó%ˆô
 ˜	¤3 t£9Ó-€MÜ˜-Ó(ò ;ˆØ˜‘Nˆ	Ø—=‘= ¨RÓ0ˆØò 	ˆEØ—I‘I˜g rÓ*×0Ñ0Ó2ˆEØ—)‘)˜E 2Ó&×,Ñ,Ó.ˆCà—‘˜=¨!Ó,ˆBÙOQ”t—}‘} Z´·±ÀÀTÁ	Ó1JÔKÐWYˆHÚšØ—‘ØØ"Ø$ñõ ð	ô 	ˆg�h˜q‘j�\ ¤C¨£M ?°&Ð9Õ:ð;ð  €Løô+ ×Ñò ÜÐ,¨Q¨CÐ0Ô1Ø�ûðús   ¸$E ÅF	Å/FÅ>F	ÆF	c                 ó¸  — t        | «      }|sdddg fS t        |d«      }d}|j                  dd¬«      }|r|j                  d¬«      }d}|j                  dd	d
i¬«      }|r|j	                  d«      r|d   dd }d}|j                  dd¬«      xs |j                  dd¬«      }g }	|�r¬g }
|j                  dd¬«      D ]8  }|j                  dd¬«      }|sŒt        |«      dkD  sŒ(|
j                  |«       Œ: |j                  d«      }|D ]"  }t        |«      }|
j                  d|› d�«       Œ$ |j                  dd¬«      D ]  }|d   }|j                  d¬«      }t        j                  d|t        j                  «      sŒ@t        t        |«      }|	j                  |xs d|dœ«       |
j                  d|› d |› d!�«       Œ� |j                  d"«      }|D ]Q  }|j	                  d#d«      }|sŒt        t        |«      }|j	                  d$d«      xs d%}|	j                  ||dœ«       ŒS |
rd&j                  |
«      nd}|s|rd't        |«      › d(�}||||	fS ))u2   æ��å�–è¯¦æƒ…é¡µ: æ ‡é¢˜ã€�æ—¥æœŸã€�æ­£æ–‡ã€�é™„ä»¶r   zhtml.parserÚh1Ú	main_5121)Úclass_T)r8   ÚmetaÚnameÚPubDate)ÚattrsÚcontentNé
   ÚdivÚzoomc)ÚidÚ
main_51231Úp)Ú	recursiver   Útableu
   
[è¡¨æ ¼]
u
   
[/è¡¨æ ¼]Úa)ÚhrefrZ   z&\.(pdf|doc|docx|xls|xlsx|zip|rar|txt)$u   é™„ä»¶)rM   r#   u	   [é™„ä»¶: z](ú)ÚimgÚsrcÚaltu   æ­£æ–‡é™„å›¾z

u   [æœ¬å…¬å‘Šä¸ºå›¾ç‰‡æ ¼å¼�ï¼Œå…±u
   å¼ é™„å›¾])r(   r   ÚfindÚget_textr   Úfind_allr7   r;   Ústrr/   r0   ÚIr   ÚBASEÚjoin)r#   r<   Úsoupr+   rI   rF   Úmeta_pubrP   rS   ÚattachmentsÚpartsrV   Úp_textÚtablesÚtblÚtbl_htmlrY   rZ   ÚfnameÚfull_urlÚimgsr\   r]   Úfull_srcr^   s                            r   Úfetch_detailrr   S   sz  € ä�‹:€DÙØ�2�r˜2ˆ~Ðä˜˜}Ó-€Dð €EØ	�‰�4 ˆÓ	,€BÙ	Ø—‘ $�Ó'ˆð €HØ�y‰y˜¨°	Ð':ˆyÓ;€HÙ�H—L‘L Ô+Ø˜IÑ& s¨Ð+ˆð €GØ�I‰I�e ˆIÓ(ÒQ¨D¯I©I°eÀL¨IÓ,Q€EØ€KÚàˆØ—‘ ¨t�Ó4ò 	%ˆAØ—Z‘Z ¨$�ZÓ/ˆFÚœ#˜f›+¨›/Ø—‘˜VÕ$ð	%ð —‘ Ó(ˆØò 	?ˆCÜ˜3“xˆHØ�L‰L˜<¨ z°Ð=Õ>ð	?ð
 —‘ ¨$�Ó/ò 	?ˆAØ�V‘9ˆDØ—J‘J T�JÓ*ˆEÜ�y‰yÐBÀDÌ"Ï$É$ÕOÜ"¤4¨Ó.�Ø×"Ñ"¨EÒ,=°XÀhÑ#OÔPØ—‘˜y¨¨¨r°(°¸1Ð=Õ>ð	?ð �~‰~˜eÓ$ˆØò 	CˆCØ—'‘'˜% Ó$ˆCÚÜ"¤4¨Ó-�à—g‘g˜e RÓ(Ò:¨N�Ø×"Ñ"¨C¸Ñ#AÕBð	Cñ ).�&—+‘+˜eÔ$°2ˆÙ™4Ø7¼¸D»	°{À*ÐMˆGà�(˜G [Ð0Ð0r   c           
      óv  — 	 t        j                  t        d¬«      }| j                  d«      xs dd d }| j                  d«      xs dd d }| j                  d«      xs d}| j                  d	«      xs dd d
 }| j                  d«      xs dd d }t	        j
                  | j                  d«      xs g d¬«      }|j                  d|f«      j                  «       }|r)|j                  d|d   f«       |j                  d|f«       |j                  d|||||||f«       |j                  d«      j                  «       d   }	|r|d d n|d d }
|j                  d|	|||
f«       |j                  «        |j                  «        t        d|d d › �«       y# t        $ r}t        d|› �«       Y d }~yd }~ww xY w)NrQ   r   r+   r   iô  Úpage_urlr-   rP   Úpublish_dateé   Ú	site_nameÚunknownéd   rh   F)Úensure_asciiz,SELECT rowid FROM gov_raw WHERE page_url = ?z&DELETE FROM gov_search WHERE rowid = ?r   z&DELETE FROM gov_raw WHERE page_url = ?z�INSERT INTO gov_raw (title, page_url, content, publish_date, site_name, source_url, status, attachments) VALUES (?, ?, ?, ?, ?, ?, 'synced', ?)zSELECT last_insert_rowid()zWINSERT OR REPLACE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)u     âœ… r   Tz  [ERR] DB import failed: )Úsqlite3ÚconnectÚDB_PATHr   r2   ÚdumpsÚexecuteÚfetchoneÚcommitÚcloser   r    )ÚrecordÚdbr+   rt   rP   ru   rw   Úattachments_strÚoldÚ	new_rowidÚsummaryr'   s               r   Úimport_to_dbr‰   “   s¶  € ðÜ�_‰_œW¨bÔ1ˆØ—‘˜GÓ$Ò*¨¨D¨SÐ1ˆØ—J‘J˜zÓ*Ò0¨b°%°4Ð8ˆØ—*‘*˜YÓ'Ò-¨2ˆØŸ
™
 >Ó2Ò8°b¸#¸2Ð>ˆØ—Z‘Z Ó,Ò9°	¸4¸CÐ@ˆ	ÜŸ*™* V§Z¡Z°Ó%>Ò%DÀ"ÐSXÔYˆà�j‰jÐGÈ(ÈÓU×^Ñ^Ó`ˆÙØ�J‰JÐ?À#ÀaÁ&ÀÔKØ�J‰JÐ?À(ÀÔMà
�
‰
ð ^Ø�H˜g |°YÀÈ/ÐZô	
ð —J‘JÐ;Ó<×EÑEÓGÈÑJˆ	Ù#*�'˜$˜3‘-°°d°s°ˆØ
�
‰
ÐlØ˜u i°Ð9ô	;à
�	‰	ŒØ
�‰Œ
Üˆf�U˜3˜B�Z�LÐ!Ô"ØøÜò ÜÐ(¨¨Ð,Ô-Üûðús   ‚FF Æ	F8Æ F3Æ3F8c                  óª  — dd l } | j                  «       }|j                  dt        dd¬«       |j	                  «       }t        |j                  d«      }d}t        d«       t        t        «      }|st        d«       y t        ||¬	«      }t        d
t        |«      › d|› d�«       t        |d«      D ]‰  \  }}|d   }	t        d|› dt        |«      › d|d   d d › �«       t        |	«      \  }
}}}|
xs |d   |	|xs |d   ||t        t        t         dœ}t#        |«      }|r|dz  }t%        j&                  d«       Œ‹ t        dt        › d|› d�«       y )Nr   z--pagesé   uF   çˆ¬å�–å‰�Né¡µï¼ˆæ¯�é¡µ15æ�¡ï¼Œé»˜è®¤5é¡µ=75æ�¡ï¼Œæœ€å¤š10é¡µ=150æ�¡ï¼‰)ÚtypeÚdefaultÚhelprQ   u   ðŸ“„ èŽ·å�–åˆ—è¡¨é¡µ...u   â�Œ æ— æ³•èŽ·å�–åˆ—è¡¨é¡µ)r=   u
     â†’ å…± u
    æ�¡ï¼ˆå‰�u   é¡µï¼‰r   r#   z  (r   z) r+   é(   r.   )r+   rt   ru   rP   rh   rw   ÚcolumnÚprovinceg      à?u   
âœ… u    çˆ¬å�–å®Œæˆ�ï¼Œå…±å…¥åº“ u    æ�¡)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr6   Úpagesr   r(   ÚLIST_URLrG   r7   Ú	enumeraterr   ÚSITEÚCOLUMNÚPROVINCEr‰   r!   r"   )r’   ÚparserÚargsr—   Úcountr<   r>   ÚidxÚitemr#   r+   Údetail_daterP   rh   rƒ   Úoks                   r   Úmainr¤   ³   sl  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QØeð ô gà×ÑÓ€Dä�—
‘
˜BÓ€EØ€EäÐ
!Ô#Ü”‹?€DÙÜÐ'Ô(Øä˜D¨EÔ2€EÜˆ*”S˜“Z�L 
¨5¨'°Ð8Ô9ä˜u aÓ(ò ‰	ˆˆTØ�5‰kˆÜˆc�#��aœ˜E›
�| 2 d¨7¡m°C°RÐ&8Ð%9Ð:Ô;Ü3?ÀÓ3DÑ0ˆˆ{˜G [ð Ò+˜d 7™mØØ'Ò7¨4°©<ØØ&ÜÜÜ ñ	
ˆô ˜&Ó!ˆÙØ�Q‰JˆEÜ�
‰
�3�ð%ô( ˆ&”�Ð0°°°tÐ<Õ=r   Ú__main__)é   )r‹   )(Ú__doc__r   Úosr/   r2   r!   r{   r<   Úhtml_modÚrequestsÚbs4r   Úurllib.parser   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrd   r˜   rš   r›   rœ   ÚPER_PAGEÚgetenvr}   ÚHEADERSÚSessionr   ÚheadersÚupdateÚverifyr   r(   rG   rr   r‰   r¤   Ú__name__© r   r   ú<module>rº      sì   ðñ÷ :× 9× 9Ó 9Û Ý ß *Û Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà €ØÐ$Ñ$€Ø+€Ø	€Ø€Ø€Ø
ˆ"�)‰)�KÐ!2Ó
3€ð QØ�c‰zñ€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ Ø€„ò,ó	óòD=1ò@ò@'>ðT ˆzÒÙ…Fð r   