Ë
    ÙŽ~j%  ã            	       óÎ  — 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dlmZmZ ej                  j                  dej                  j!                  ej                  j#                  e«      «      «       ddlmZ dZedz   ZdZd	Zd
ZdZdZ eedz   d¬«      Z e eed¬«      d¬«      ZdZddedz   dddeddœZdZ e edddœZ!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&e'd k(  r e&«        yy)!u|  
æ³°å®‰é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒº - é€šçŸ¥å…¬å‘Š (col47833) çˆ¬è™«
åˆ—è¡¨: http://gxq.taian.gov.cn/col/col47833/index.html
  å¤§æ±‰ç½‘ç»œ (hanweb) ç³»ç»Ÿ, jquery.jpage.js èŒƒå›´å¼�åˆ†é¡µ
  API: POST /module/web/jpage/dataproxy.jsp
    URLå�‚æ•°: startrecord/endrecord/perpage/unitid/webid/path/webname/col/columnid/sourceContentType/permissiontype
    POST body: å�Œ ajaxParam (å¿…é¡», å�¦åˆ™ç©ºå“�åº”)
  totalRecord=2143, perPage=22 => 98 é¡µ
è¯¦æƒ…: /art/YYYY/M/D/art_47833_ID.html
  æ ‡é¢˜: <meta name="ArticleTitle"> (å®Œæ•´æ ‡é¢˜)
  æ­£æ–‡: <div class="bt_content">
ç”¨æ³•: python3 crawl_taian_gxq_tzgg.py [--pages=N] [--limit=N]
é    N)ÚBeautifulSoup)ÚurljoinÚquote)Úpush_to_searchdbzhttp://gxq.taian.gov.cnz/col/col47833/index.htmlu.   æ³°å®‰é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒº-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šéb   é   u!   æ³°å®‰é«˜æ–°æŠ€æœ¯äº§ä¸šå¼€å�‘åŒºú/Ú )Úsafez/module/web/jpage/dataproxy.jspÚ1Ú334Ú47833Ú144798Ú0)ÚcolÚwebidÚpathÚcolumnidÚsourceContentTypeÚunitidÚwebnameÚpermissiontypezoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36ÚXMLHttpRequestzapplication/xml, text/xml, */*)ú
User-AgentÚRefererzX-Requested-WithÚAcceptc                  ó   — d\  } }t         j                  dd  D ]`  }|j                  d«      rt        |j	                  d«      d   «      } Œ2|j                  d«      sŒDt        |j	                  d«      d   «      }Œb | |fS )N)r   r   é   z--pages=ú=z--limit=)ÚsysÚargvÚ
startswithÚintÚsplit)ÚpagesÚlimitÚas      ú)/root/gov_crawler/crawl_taian_gxq_tzgg.pyÚ
parse_argsr)   /   st   € Ø�L€Eˆ5Ü�X‰X�a�bˆ\ò )ˆØ�<‰<˜
Ô#Ü˜Ÿ™ › Q™Ó(‰EØ�\‰\˜*Õ%Ü˜Ÿ™ › Q™Ó(‰Eð	)ð
 �%ˆ<Ðó    c                 óÞ   — t        j                  | xs d«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } | j	                  «       S )Nr
   z[\u200b\u200e\u200f\ufeff\xa0]ú\s+ú u   ^[â€¢Â·\-â€”]\s*)Úhtml_modÚunescapeÚreÚsubÚstrip)Úts    r(   Úclean_titler4   9   sZ   € Ü×Ñ˜!š'˜rÓ"€AÜ
�‰Ð0°"°aÓ8€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰Ð" B¨Ó*€AØ�7‰7‹9Ðr*   c                 óÂ  — ||t         t        d   t        d   t        t        t        d   t        d   t        d   t        d   dœ}t	        d«      D �]Ä  }	 | j                  t        t        z   |t        t        d	¬
«      }|j                  dk7  r7t        d|› d|› d|j                  › d�d¬«       t        j                  d«       Œt|j                  }t        j                  d|«      }|rt!        |j#                  d«      «      nd}g }	t        j$                  d|t        j&                  «      D ]ã  }
t        j                  d|
«      }|st        j                  d|
«      }|sŒ4|j#                  d«      t)        |j#                  d«      «      }}t+        |«      dk  rŒnd}t        j                  d|
«      }|rGd|j#                  d«      t!        |j#                  d«      «      t!        |j#                  d«      «      fz  }|	j-                  |||dœ«       Œå ||	fc S  dg fS # t.        $ r9}t        d|› d|› d|› d|› �d¬«       t        j                  d«       Y d }~�Œ	d }~ww xY w)!u7   POST dataproxy.jsp èŒƒå›´åˆ†é¡µ (startrecord~endrecord)r   r   r   r   r   r   )ÚstartrecordÚ	endrecordÚperpager   r   r   r   r   r   r   r   é   é   )ÚparamsÚdataÚheadersÚtimeoutéÈ   z    [WARN] list ú-z status=z, retryT©Úflushz<totalrecord>(\d+)<r   r   z&<record><!\[CDATA\[(.*?)\]\]></record>z%<a href="([^"]+)"[^>]*title="([^"]*)"z"<a href="([^"]+)"[^>]*>([^<]+)</a>é   é   r
   z(\d{4})/(\d{1,2})/(\d{1,2})ú%s-%02d-%02d)ÚtitleÚhrefÚdatez err z, retry N)ÚPER_PAGEÚ
AJAX_PARAMÚPATH_ENCÚWEBNAME_ENCÚrangeÚpostÚBASE_URLÚAPI_URLÚHEADERSÚstatus_codeÚprintÚtimeÚsleepÚtextr0   Úsearchr#   ÚgroupÚfindallÚSr4   ÚlenÚappendÚ	Exception)ÚsessionÚstartÚendr;   ÚattemptÚrrV   Útotal_mÚtotalÚitemsÚrecÚamrG   rF   rH   ÚdmÚes                    r(   Úfetch_list_rangerj   A   s1  € ð ¨3¼8Ü˜XÑ&´¸GÑ1DÜ¤[Ü˜%Ñ ¬j¸Ñ.DÜ'Ð(;Ñ<ÔPZÐ[kÑPlñ€Fô ˜“8ó ˆð	Ø—‘œX¬Ñ/¸ÄZÔY`Ðjl�ÓmˆAØ�}‰} Ò#ÜÐ(¨¨¨q°°°X¸a¿m¹m¸_ÈGÐTÐ\`ÕaÜ—
‘
˜1”ØØ—6‘6ˆDÜ—i‘iÐ 6¸Ó=ˆGÙ-4”C˜Ÿ™ aÓ(Ô)¸!ˆEØˆEÜ—z‘zÐ"KÈTÔSU×SWÑSWÓXò K�Ü—Y‘YÐGÈÓM�ÙÜŸ™Ð#HÈ#ÓN�BÙØØ Ÿh™h q›k¬;°r·x±xÀ³{Ó+C�e�Ü�u“: ’>ØØ�Ü—Y‘YÐ=¸sÓC�ÙØ)¨R¯X©X°a«[¼#¸b¿h¹hÀq»kÓ:JÌCÐPR×PXÑPXÐYZÓP[ÓL\Ð,]Ñ]�DØ—‘ u°dÀDÑIÕJðKð ˜%�<Òð3ð: ˆbˆ5€Løô ò 	ÜÐ$ U G¨1¨S¨E°°q°c¸À'ÀÐKÐSWÕXÜ�J‰J�q�MŠMûð	ús    ÁA.HÃEHÈ	IÈ%.IÉIc                 óD  — 	 | j                  |t        t        dœd¬«      }d|_        |j                  }d}t        j                  d|«      }|rt        |j                  d«      «      }|s2t        j                  d|«      }|rt        |j                  d«      «      }d}t        j                  d	|«      }|r"|j                  d«      j                  «       d
d }|s_t        j                  d|«      }|rGd|j                  d«      t        |j                  d«      «      t        |j                  d«      «      fz  }d}|j                  d«      }|dk\  �r|j                  d|«      dz   }	d}
|	}|t        |«      k  rE|||dz    dk(  r|
dz  }
|dz  }n |||dz    dk(  r|
dz  }
|dz  }|
dk(  rn|dz  }|t        |«      k  rŒE||	|dz
   }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                  «       }|rt        |«      dk  rd}|||fS # t        $ r}t        d |› d!|› �d"¬#«       Y d
}~y$d
}~ww xY w)%u-   è¯¦æƒ…é¡µ: meta ArticleTitle + div.bt_content)r   r   r:   )r=   r>   zutf-8r
   z+<meta name="ArticleTitle" content="([^"]*)"r   z<h1[^>]*>([^<]+)</h1>z&<meta name="PubDate" content="([^"]*)"Né
   z!(\d{4})[-/](\d{1,2})[-/](\d{1,2})rE   rC   r9   zclass="bt_content"r   ú>rD   z<divé   z</div>z<script[\s\S]*?</script>z<style[\s\S]*?</style>zhref="(/[^"]*)"c                 ó8   — dt         ›| j                  d«      ›d�S )Nzhref="r   ú"©rO   rX   ©Úms    r(   ú<lambda>zfetch_detail.<locals>.<lambda>”   s   � ÍÐRS×RYÑRYÐZ[ÕR\Ð7]€ r*   zsrc="(/[^"]*)"c                 ó8   — dt         ›| j                  d«      ›d�S )Nzsrc="r   rp   rq   rr   s    r(   rt   zfetch_detail.<locals>.<lambda>•   s   � ÅhÐPQ×PWÑPWÐXYÕPZÐ6[€ r*   z\sstyle="[^"]*"zM<span[^>]*>|</span>|<strong[^>]*>|</strong>|<b[^>]*>|</b>|<font[^>]*>|</font>é   z    [ERR] detail ú: TrA   )r
   r
   r
   )ÚgetÚUAÚLIST_URLÚencodingrV   r0   rW   r4   rX   r2   r#   Úfindr[   r1   r]   rS   )r^   Úurlrb   ÚhtmlrF   rs   Úpub_dateÚbodyÚir_   ÚdepthÚjÚrawri   s                 r(   Úfetch_detailr…   j   s�  € ð2Ø�K‰K˜´BÄ8Ñ%LÐVXˆKÓYˆØˆŒ
Ø�v‰vˆØˆÜ�I‰IÐDÀdÓKˆÙÜ §¡¨£
Ó+ˆEÙÜ—	‘	Ð2°DÓ9ˆAÙÜ# A§G¡G¨A£JÓ/�ØˆÜ�I‰IÐ?ÀÓFˆÙØ—w‘w˜q“z×'Ñ'Ó)¨#¨2Ð.ˆHÙÜ—	‘	Ð>ÀÓEˆAÙØ)¨Q¯W©W°Q«Z¼¸Q¿W¹WÀQ»Z»Ì#ÈaÏgÉgÐVWËjË/Ð,ZÑZ�ØˆØ�I‰IÐ*Ó+ˆØ�‹6Ø—I‘I˜c 1Ó%¨Ñ)ˆEØˆEØˆAØ”c˜$“i’-Ø˜˜!˜A™#�; &Ò(Ø˜Q‘J�EØ˜‘F‘AØ˜!˜A˜a™C�[ HÒ,Ø˜Q‘J�EØ˜‘F�AØ ’zØà˜‘F�Að ”c˜$“i“-ð �u˜Q˜q™S�/ˆCÜ—&‘&Ð4°b¸#Ó>ˆCÜ—&‘&Ð2°B¸Ó<ˆCÜ—&‘&Ð+Ñ-]Ð_bÓcˆCÜ—&‘&Ð*Ñ,[Ð]`ÓaˆCÜ—&‘&Ð+¨R°Ó5ˆCÜ—&‘&ÐiÐkmÐorÓsˆCØ—9‘9“;ˆDÙ”s˜4“y 2’~ØˆDØ�h Ð$Ð$øÜò ÜÐ! #  b¨¨Ð,°DÕ9Üûðús   ‚F;I9 Æ>B:I9 É9	JÊJÊJc                  óÌ  — t        «       \  } }| st        } t        dt        › d| › �d¬«       t	        j
                  «       }|j                  j                  dt        i«       	 |j                  t        d¬«       g }t        «       }d}t        d	| d	z   «      D �]  }|d	z
  t        z  d	z   }|t        z  }t        |||«      \  }}	d}
|	D ]Y  }|d
   }|j!                  d«      st#        t$        |«      }d|vrŒ.||v rŒ3|j'                  |«       |j)                  |«       |
d	z  }
Œ[ t        d|› dt+        |	«      › d|
› dt+        |«      › �d¬«       |	st        d|› d�d¬«        nRt+        |«      |k\  st+        |«      dk\  rt        dt+        |«      › d|› �d¬«        nt-        j.                  d«       �Œ t        dt+        |«      › d�d¬«       |rt+        |«      |kD  r|d | }g }t1        |«      D �]‡  \  }}|d
   }|j!                  d«      st#        t$        |«      }t3        ||«      \  }}}|xs |d   }|xs |j                  dd«      }|rt5        j6                  dd|«      n|}t5        j6                  dd|«      j9                  «       d d }g }|rjt5        j:                  d |t4        j<                  «      D ]B  }|j)                  |j?                  d!«      j9                  «       |j?                  d	«      d"œ«       ŒD |j)                  t        ||||||t@        |rtC        jD                  |d#¬$«      ndd%œ	«       |d	z   d&z  dk(  rt        d'|d	z   › d(t+        |«      › �d¬«       t-        j.                  d)«       �ŒŠ t        d*t+        |«      › d+�d¬«       tG        |t        ¬,«       tI        d-„ |D «       «      }t        d.t+        |«      › d/|› �d¬«       y # t        $ r Y �Œhw xY w)0Nz[Taian-GXQ] SITE=z max_pages=TrA   r   r:   )r>   r   r   rG   Úhttpztaian.gov.cnz  Page rw   u   æ�¡(æ–°u   ) ç´¯è®¡z  [END] page z emptyi˜  z  [DONE] reached z	 / total gš™™™™™Ù?u   åˆ—è¡¨å®Œæˆ�: u    æ�¡, æŠ“è¯¦æƒ…...rF   rH   r
   z<[^>]+>r-   r,   i,  zQ<a[^>]*href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar|ofd|wps))"[^>]*>([^<]*)</a>rC   )Únamer}   F)Úensure_ascii)	Ú	site_nameÚ
source_urlr}   rF   r   ÚcontentÚsummaryÚcategoryÚattachmentsrl   z	  detail r	   g333333Ó?z
  pushing z items to searchdb...)Úbatch_labelc              3   óh   K  — | ]*  }|j                  d «      xs dj                  «       rŒ'd–— Œ, y­w)rŒ   r
   r   N)rx   r2   )Ú.0rb   s     r(   ú	<genexpr>zmain.<locals>.<genexpr>ë   s)   è ø€ ÒK�a¨1¯5©5°Ó+;Ò+A¸r×*HÑ*HÕ*J”ÑKùs   ‚(2«2z  DONE. pushed=u    ç©ºæ­£æ–‡=)%r)   Ú	MAX_PAGESrS   Ú	SITE_NAMEÚrequestsÚSessionr=   Úupdatery   rx   rz   r]   ÚsetrM   rI   rj   r"   r   rO   Úaddr\   r[   rT   rU   Ú	enumerater…   r0   r1   r2   ÚfinditerÚIrX   ÚCATEGORYÚjsonÚdumpsr   Úsum)Ú	max_pagesr&   r^   Ú	all_itemsÚseenrd   Úpgr_   r`   re   Ú	new_countÚitrG   Úresultsr�   Ú
detail_urlÚd_titleÚd_dater€   rF   r   r�   Úattsrs   Úemptys                            r(   Úmainr®   ¡   s×  € Ü!“|Ñ€IˆuÙÜˆ	Ü	Ðœi˜[¨°I°;Ð
?ÀtÕLä×ÑÓ €GØ‡O�O×Ñ˜L¬"Ð-Ô.ðØ�‰”H bˆÔ)ð €IÜ‹5€DØ€EÜ�A�y 1‘}Ó%ó ˆØ�a‘œ8Ñ# aÑ'ˆØ”8‰mˆÜ'¨°¸Ó<‰ˆˆuØˆ	Øò 	ˆBØ�f‘:ˆDØ—?‘? 6Ô*Üœx¨Ó.�à TÑ)ØØ�t‰|ØØ�H‰H�TŒNØ×Ñ˜RÔ Ø˜‰N‰Ið	ô 	�˜�t˜2œc %›j˜\¨°°¸8ÄCÈ	ÃNÐCSÐTÐ\`ÕaÙÜ�M "  VÐ,°DÕ9ÙÜˆy‹>˜UÒ"¤c¨)£n¸Ò&<ÜÐ%¤c¨)£nÐ%5°Y¸u¸gÐFÈdÕSÙÜ�
‰
�3Žð1ô4 
ˆNœ3˜y›>Ð*Ð*<Ð
=ÀTÕJÙ”�Y“ %Ò'Ø˜f˜uÐ%ˆ	à€GÜ˜9Ó%ó ‰ˆˆ2Ø˜‘Zˆ
Ø×$Ñ$ VÔ,Ü ¤¨:Ó6ˆJÜ ,¨W°jÓ AÑˆ�˜ØÒ&˜2˜g™;ˆØÒ/˜RŸV™V F¨BÓ/ˆÙ37”"—&‘&˜ S¨$Ô/¸UˆÜ—&‘&˜  gÓ.×4Ñ4Ó6°t¸Ð<ˆØˆÙÜ—[‘[Ð!uÐw{Ô}÷  ~Bñ  ~Bó  Cò M�Ø—‘ Q§W¡W¨Q£Z×%5Ñ%5Ó%7ÀÇÁÈÃ
ÑKÕLðMà�‰Ü"°*ÀZØ¨¸TØ¬HÙCGœ4Ÿ:™: d¸Õ?ÈRñ	
ô 	ð �‰E�R‰<˜1ÒÜ�I˜a ™c˜U !¤C¨	£NÐ#3Ð4¸DÕAÜ�
‰
�3Žð+ô. 
ˆJ”s˜7“|�nÐ$9Ð
:À$ÕGÜ�W¬)Õ4ÜÑK˜7ÔKÓK€EÜ	ˆOœC ›L˜>¨°U°GÐ
<ÀDÖIøô ò Úðús   Á#O Ï	O#Ï"O#Ú__main__)(Ú__doc__Úosr    r0   rT   rŸ   r~   r.   r–   Úbs4r   Úurllib.parser   r   r   ÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   rO   rz   r•   rž   r”   rI   ÚWEBNAMErK   rL   rP   rJ   ry   rQ   r)   r4   rj   r…   r®   Ú__name__© r*   r(   ú<module>r¼      s  ðñ÷ 1× 0× 0Û Ý ß 'à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (à$€ØÐ0Ñ0€Ø<€	Ø€Ø€	Ø€à
-€Ù�˜C‘ bÔ)€Ù‘E˜'¨Ô+°"Ô5€à
+€à˜¨°3©Ø¨c¸XØ¨#ñ€
ð w€Ø¨ÐFVØ5ñ7€òòò&òR4ònKJð\ ˆzÒÙ…Fð r*   