Ë
    ¸¬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
ZddlZ ej                  d«       ej                  j                  ej                  j                  e«      «      Zej                  j%                  de«       ej                  j%                  dej                  j'                  edd«      «       ddlmZ dZdZd	Z ej2                  d
d«      ZdZd„ Zd„ Zd„ Zefd„Zdd„Z d„ Z!dd„Z"e#dk(  rqdZ$ejJ                  dd Z& e'e&«      D ])  \  Z(Z)e)dk(  sŒe(dz    e*e&«      k  sŒ	  e+e&e(dz      «      Z$Œ+ e$€ e&D ]  Z)	  e+e)jY                  d«      «      Z$ n  e"e$¬«       yy#  Y Œ]xY w#  Y Œ4xY w)už   
ç¬¬äº”å¸ˆå�Œæ²³å¸‚-çŽ¯è¯„å…¬ç¤º çˆ¬è™« (CMS AJAX)
ç«™ç‚¹: www.xjshs.gov.cn
æ �ç›®: çŽ¯è¯„å…¬ç¤º (catid=177, category=35)
API: POST api-ajax_list-{page}.html
é    NÚignorez..Úcrawler)Ú
fetch_pageu   ç¬¬äº”å¸ˆå�Œæ²³å¸‚-çŽ¯è¯„å…¬ç¤ºzwww.xjshs.gov.cnzhttps://www.xjshs.gov.cnÚ	SEARCH_DBz/root/search.dbé   c                 óÞ  — | sy t        j                  t        «      }|j                  d«       |j                  d«       |j                  d«       |j                  d«       |j                  d«       |j	                  «        dx}}| D ]Ø  }	 |j                  d«      xs dd d	 }|j                  d
«      xs |d d	 }|j                  d«      xs d}|j                  d«      xs dd d }|j                  d«      xs d}	|j                  d«      xs |	}
|j                  d«      xs d}|j                  dt        |	|
||||d|f	«       |j                  dkD  r|dz  }n|dz  }ŒÚ |j	                  «        	 |j                  dt        f«       |j	                  «        |j                  «        t        d|› d|› �«       |S #  |dz  }Y �Œ@xY w# t        $ r}t        d|› �«       Y d }~ŒLd }~ww xY w)NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=8000zPRAGMA synchronous=NORMALa"  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        site_name TEXT, source_url TEXT UNIQUE, page_url TEXT,
        title TEXT, publish_date TEXT, summary TEXT,
        content TEXT, status TEXT, category TEXT, tags TEXT,
        attachments TEXT
    )zˆCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(
        title, site_name, summary, content='gov_raw', content_rowid='id'
    )r   ÚtitleÚ iô  ÚsummaryÚcontentÚpublish_dateé
   Ú
source_urlÚurlÚattachmentszÏINSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date,
                 summary, content, status, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)Úactiveé   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.site_name=? AND r.id NOT IN (SELECT rowid FROM gov_search)z  [FTS ERROR] u     [DB] æ–°å¢ž: õ
   , è·³è¿‡: )Úsqlite3Úconnectr   ÚexecuteÚcommitÚgetÚ	SITE_NAMEÚtotal_changesÚ	ExceptionÚprintÚclose)ÚitemsÚdbÚokÚskipÚitemr	   r   r   Úpub_dater   Úpage_urlr   Úes                ú /root/gov_crawler/crawl_xjshs.pyÚ	insert_dbr(      sý  € ÙØÜ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ)Ô*Ø‡J�JÐ*Ô+Ø‡J�Jð 	ô 
ð ‡J�Jð 	ô 
ð ‡I�I„KØ€M€BˆØò ˆð	Ø—X‘X˜gÓ&Ò,¨"¨d¨sÐ3ˆEØ—x‘x 	Ó*Ò3¨e°T°cÐ:ˆGØ—h‘h˜yÓ)Ò/¨RˆGØŸ™ Ó0Ò6°B¸¸Ð<ˆHØŸ™ ,Ó/Ò5°2ˆJØ—x‘x “Ò4¨*ˆHØŸ(™( =Ó1Ò7°RˆKØ�J‰Jð 6ô ˜J¨°%¸Ø˜' 8¨[ð:ô	;ð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð%ð* ‡I�I„Kð$Ø
�
‰
ð Rô ˆLô		ð
 	�	‰	Œð ‡H�H„JÜ	ˆO˜B˜4˜z¨$¨Ð
0Ô1Ø€Iøð	Ø�A‰I‹Dûô ò $Ü�˜q˜cÐ"×#Ñ#ûð$ús%   ÂCF>Å4'G Æ>GÇ	G,ÇG'Ç'G,c                 óV  — | syt        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  ¬«      } | j	                  «       S )Nr
   z<style[^>]*>.*?</style>©Úflagsz<script[^>]*>.*?</script>z
<!--.*?-->)ÚreÚsubÚDOTALLÚ
IGNORECASEÚstrip)Úhtmls    r'   Úclean_contentr2   Q   sp   € ÙØÜ�6‰6Ð,¨b°$¼b¿i¹iÌ"Ï-É-Ñ>WÔX€DÜ�6‰6Ð.°°DÄÇ	Á	ÌBÏMÉMÑ@YÔZ€DÜ�6‰6�-  T´·±Ô;€DØ�:‰:‹<Ðó    c                 óp  — | sy| }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  d	d|t         j                  ¬«      }t        j                  d
d|t         j                  ¬«      }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|«      }|j                  «       S )Nr
   z	<br\s*/?>ú
r*   z</p>z

ú</div>z</tr>z</th>z</td>z5<(?!/?(?:table|tr|td|th|thead|tbody|tfoot|img))[^>]*>z&nbsp;ú z&lt;ú<z&gt;ú>z&amp;ú&z\n{3,}z[ \t]+z-(?<=[\u4e00-\u9fff])[ \t]+(?=[\u4e00-\u9fff]))r,   r-   r/   r0   )r1   Útexts     r'   Úextract_textr<   Y   s<  € ÙØØ€DÜ�6‰6�,  d´"·-±-Ô@€Dä�6‰6�'˜6 4¬r¯}©}Ô=€DÜ�6‰6�)˜T 4¬r¯}©}Ô=€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6�(˜D $¬b¯m©mÔ<€DÜ�6‰6ÐJÈBÐPTÓU€DÜ�6‰6�)˜S $Ó'€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�'˜3 Ó%€DÜ�6‰6�(˜C Ó&€Dä�6‰6�)˜V TÓ*€DÜ�6‰6�)˜S $Ó'€Dä�6‰6ÐBÀBÈÓM€DØ�:‰:‹<Ðr3   c                 ód  — | syd}t        j                  d|z   dz   | t         j                  «      }|syg }|D ]f  \  }}}}|j                  d«      r|n%|j	                  d«      dz   |j                  d«      z   }|j                  d|j                  «       › d|› d	�«       Œh d
j                  |«      S )Nr
   z1\.(doc|docx|pdf|xls|xlsx|rar|zip)(\?[^\s"\'<>]*)?z<a[^>]*href=["\']([^"\']*?(?:z))["\'][^>]*>([^<]*)</a>Úhttpú/u	   [é™„ä»¶: z](ú)r5   )	r,   Úfindallr/   Ú
startswithÚrstripÚlstripÚappendr0   Újoin)	r1   Úbase_urlÚext_patternÚlinksÚpartsÚhrefÚ_r;   Úfull_urls	            r'   Úextract_attachmentsrN   p   s¼   € ÙØØF€KÜ�J‰JØ(¨;Ñ6Ð9TÑTØŒb�m‰mó€Eñ ØØ€EØ!ò >Ñˆˆa��DØŸ?™?¨6Ô2‘4¸¿¹ÈÓ9MÐPSÑ9SÐVZ×VaÑVaÐbeÓVfÑ9fˆØ�‰�y §¡£ ¨b°°
¸!Ð<Õ=ð>ð �9‰9�UÓÐr3   r   c                 óä  — t         › d| › d�}d}	 t        j                  j                  ||j	                  «       ¬«      }|j                  dd«       |j                  dd«       t        j                  j                  |d	¬
«      }t        j                  |j                  «       «      }|j                  dg «      |j                  dd«      fS # t        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)Nz/api-ajax_list-z.htmlzæajax_type[]=18_xxgk&ajax_type[]=177&ajax_type[]=18&ajax_type[]=xxgk&ajax_type[]=Y-m-d&ajax_type[]=35&ajax_type[]=20&ajax_type[7][]=inputtime+DESC&ajax_type[7][]=displayorder+DESC&ajax_type[7][]=is_top+DESC&ajax_type[]=null&is_ds=1)Údataz
User-AgentzMozilla/5.0zContent-Typez!application/x-www-form-urlencodedé   ©Útimeoutu     â�Œ APIè¯·æ±‚å¤±è´¥(page=z): )Nr   rP   Útotalr   )ÚBASE_URLÚurllibÚrequestÚRequestÚencodeÚ
add_headerÚurlopenÚjsonÚloadsÚreadr   r   r   )Úpager   Ú	post_dataÚreqÚresprP   r&   s          r'   Ú
fetch_listrc   €   sÝ   € ÜˆJ�o d V¨5Ð
1€Cð	?ð ðÜ�n‰n×$Ñ$ S¨y×/?Ñ/?Ó/AÐ$ÓBˆØ�‰�| ]Ô3Ø�‰�~Ð'JÔKÜ�~‰~×%Ñ% c°2Ð%Ó6ˆÜ�z‰z˜$Ÿ)™)›+Ó&ˆð �8‰8�F˜BÓ §¡¨'°1Ó!5Ð5Ð5øô ò ÜÐ+¨D¨6°°Q°CÐ8Ô9Üûðús   �BC Ã	C/ÃC*Ã*C/c                 ó|  — | rd| vryt        | d¬«      }|syt        j                  d|t        j                  «      }d}|r |j	                  d«      j                  «       }n_t        j                  d|t        j                  «      }|r8|j	                  d«      j                  «       }t        j                  dd	|«      }|}|j                  d
«      }|dk  r|j                  d«      }|dk  ry|j                  d|«      }|dk  ry||dz   d }d}	d}
|	dkD  ra|
t        |«      k  rS||
|
dz    dk(  r||
dz   |
dz    dk(  s|	dz  }	|
dz  }
n||
|
dz    dk(  r|	dz  }	|
dz  }
n|
dz  }
|	dkD  r|
t        |«      k  rŒS|d|
dz
   }t        |«      }t        |«      }t        |«      }|r|j                  «       dz   |z   }|||dœS )u,   èŽ·å�–è¯¦æƒ…é¡µå†…å®¹ï¼Œå¤„ç�† 302 é‡�å®šå�‘zxjshs.gov.cnNrQ   rR   zC<meta\s+name=["\']ArticleTitle["\'][^>]*content=["\']([^"\']+)["\']r   z<title>([^<]+)</title>u.   ^ç¬¬äº”å¸ˆå�Œæ²³å¸‚äººæ°‘æ”¿åºœ\s*[-â€“â€”]\s*r
   zclass="xxgk_content"r   zclass='xxgk_content'r9   é   z<divé   é   r6   u   

--- é™„ä»¶ ---
)r	   r   r   )r   r,   Úsearchr/   Úgroupr0   r-   ÚfindÚlenr2   rN   r<   rC   )r   r1   ÚmtÚdetail_titleÚttÚtÚidxÚtag_endÚrestÚdepthÚposÚraw_contentÚcleanedr   Útext_contents                  r'   Úfetch_detailrx   ”   sô  € á�.¨Ñ+ØÜ�c 2Ô&€DÙØô 
�‰ÐYÐ[_Ôac×anÑanÓ	o€BØ€LÙ	Ø—x‘x “{×(Ñ(Ó*‰ä�Y‰YÐ0°$¼¿¹ÓFˆÙØ—‘˜“×!Ñ!Ó#ˆAä—‘ÐHÈ"ÈaÓPˆAØˆLð �)‰)Ð*Ó
+€CØ
ˆQ‚wØ�i‰iÐ.Ó/ˆØ
ˆQ‚wØà�i‰i˜˜SÓ!€GØ�‚{ØØ�˜‘	�
Ð€Dà€EØ
€CØ
�!Š)˜œc $›išØ��C˜‘Eˆ?˜fÒ$¨T°#°a±%¸¸A¹Ð->À#Ò-EØ�Q‰JˆEØ�1‰H‰CØ�#�c˜!‘eˆ_ Ò(Ø�Q‰JˆEØ�1‰H‰Cà�1‰HˆCð �!Š)˜œc $›i›ð �v˜˜A™�,€Kä˜KÓ(€GÜ% kÓ2€KÜ Ó(€LáØ#×*Ñ*Ó,Ð/EÑEÈÑSˆð ØØ"ñð r3   c                 óü  — t        dd› �«       t        dt        › �«       t        d› «       t        d«       t        d«      \  }}|€y t        j                  |t
        z  «      }t        d|› dt
        › d|› �«       | r| d	kD  r| |k  r| }t        d
| › d�«       |rt        |«      ng }t        d|dz   «      D ]T  }t        |«      \  }}|r0|j                  |«       t        d|› d|› dt        |«      › d�«       ŒCt        d|› d|› d�«       ŒV t        dt        |«      › d�«       d	x}}	g }
t        |d«      D ]Ú  \  }}|j                  dd«      }|j                  dd«      }|j                  dd«      }t        d|› dt        |«      › d|d d › d�«       t        |«      }|€|	dz  }	Œp|j                  d«      xs |}|d   }|
j                  ||||d d |d d ||j                  dd«      dœ«       |dz  }t        d t        |«      › d!|d d › �«       ŒÜ t        dd› �«       t        d"|› d#|	› d$t        |«      |z
  |	z
  › �«       |
rt        |
«       t        d› «       t        d%t        |«      › d&|› d'|	› �«       y )(Nr5   z<============================================================u   ðŸš€ u   
ðŸ“¥ èŽ·å�–åˆ—è¡¨...r   u      æ€»æ�¡æ•°: u
   , æ¯�é¡µ: u   , æ€»é¡µæ•°: r   u      --pages é™�åˆ¶: å�–å‰� u    é¡µé   u      ç¬¬ r?   u    é¡µ: u    æ�¡u	    é¡µ: ç©ºu      å…±èŽ·å�–: r   r
   r	   Ú	inputtimez
[z] é<   z...r   r   éÈ   r   )r	   r   r   r   r   r   r   u      âœ… æ­£æ–‡: u    å­—, æ—¥æœŸ: u    ðŸ“¦ å†™å…¥æ•°æ�®åº“... æˆ�åŠŸ: u
   , å¤±è´¥: r   u   âœ… å®Œæˆ�! å…±å¤„ç�† u    æ�¡ï¼Œæˆ�åŠŸ u
   ï¼Œå¤±è´¥ )r   r   rc   ÚmathÚceilÚ	PAGE_SIZEÚlistÚrangeÚextendrk   Ú	enumerater   rx   rE   r(   )Ú	max_pagesÚarticlesrT   Útotal_pagesÚ	all_itemsÚpÚartsrL   ÚsuccessÚfailÚdb_itemsÚir#   r   r	   Údate_strÚdetailÚdb_titleÚcontent_texts                      r'   Úrunr“   Ï   sÔ  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔô 
Ð
"Ô#Ü  “m�O€HˆeØÐØÜ—)‘)˜E¤IÑ-Ó.€KÜ	ˆN˜5˜' ¬I¨;°mÀKÀ=Ð
QÔRá�Y ’] y°;Ò'>ØˆÜÐ*¨9¨+°TÐ:Ô;ñ #+”�X”°€IÜ�1�k A‘oÓ&ò 8ˆÜ˜Q“-‰ˆˆaÙØ×Ñ˜TÔ"Ü�G˜A˜3˜a ˜}¨F´3°t³9°+¸TÐBÕCä�G˜A˜3˜a ˜}¨IÐ6Õ7ð8ô 
ˆNœ3˜y›>Ð*¨$Ð
/Ô0ð Ð€GˆdØ€Hä˜Y¨Ó*ò R‰ˆˆ4Ø�h‰h�u˜bÓ!ˆØ—‘˜ "Ó%ˆØ—8‘8˜K¨Ó,ˆä��A�3�aœ˜I›Ð' r¨%°°¨*¨°SÐ9Ô:ä˜cÓ"ˆØˆ>Ø�A‰IˆDØà—:‘:˜gÓ&Ò/¨%ˆØ˜iÑ(ˆà�‰ØØØØ$ S b˜MØ  �~Ø#Ø!Ÿ:™: m°RÓ8ñ
ô 	ð 	�1‰ˆÜ�¤ LÓ 1Ð2°.ÀÈ#È2ÀÀÐPÕQð3Rô6 
ˆBˆvˆhˆ-ÔÜ	Ð,¨W¨I°ZÀ¸vÀZÔPSÐT]ÓP^Ð_fÑPfÐgkÑPkÐOlÐ
mÔnÙÜ�(ÔÜ	ˆVˆHÔÜ	Ð"¤3 y£>Ð"2°.ÀÀ	ÈÐTXÐSYÐ
ZÕ[r3   Ú__main__z--pagesú-)r…   )r   )N)-Ú__doc__ÚsysÚosr,   r\   r   r~   Úurllib.requestrV   Úurllib.errorÚurllib.parseÚwarningsÚfilterwarningsÚpathÚdirnameÚabspathÚ__file__Ú_HEREÚinsertrF   Úcrawler_libr   r   ÚDOMAINrU   Úgetenvr   r€   r(   r2   r<   rN   rc   rx   r“   Ú__name__Úmax_pÚargvÚargsr„   rŽ   Úargrk   ÚintrD   © r3   r'   ú<module>r®      sŒ  ðñ÷ ^× ]× ]× ]× ]Ø €× Ñ ˜Ô !à
�‰�‰˜Ÿ™Ÿ™¨Ó1Ó2€Ø ‡�‡���5Ô Ø ‡�‡���2—7‘7—<‘<  t¨YÓ7Ô 8å "à-€	Ø	€Ø%€ØˆB�I‰I�kÐ#4Ó5€	à€	ò4òlòð. (0ó ó 6ò(9óvA\ðF ˆzÒØ€EØ�8‰8�A�Bˆ<€DÙ˜D“/ò ‰ˆˆ3Ø�)Ó  A¡©¨D«	Ó 1ðÙ˜D  Q¡™KÓ(‘ðð €}Øò 	ˆCðÙ˜CŸJ™J s›OÓ,�Ùð	ñ �%Öð! øðÙûðÙús   Ä8E5ÅE<Å5E9Å<F 