Ë
    Í«£j1  ã                   ó„  — 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	Z	dZ
dZdZdZej                  j                  dd«      Zd	d
ddœZdZ eej(                  «      D ]=  \  ZZedk(  sŒedz    eej(                  «      k  sŒ% eej(                  edz      «      Z n dd„Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)ÚBeautifulSoupzhttps://www.xw.gov.cnz1https://www.xw.gov.cn/gov/public/special/shx.htmlu   å®£å¨�å¸‚-å…¬ç¤ºå…¬å‘Šu   å®£å¨�å¸‚äººæ°‘æ”¿åºœÚ	SEARCH_DBz/root/search.dbzMozilla/5.0zhttps://www.xw.gov.cn/ztext/html,application/xhtml+xml)z
User-AgentÚRefererÚAcceptz--pagesé   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ÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr
   r   r   r   s           úcrawl_xw_shx.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                 óÆ   — t         j                  j                  | t        ¬«      }t         j                  j	                  |d¬«      j                  «       j                  «       S )N)Úheadersé   )Útimeout)r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecode)ÚurlÚreqs     r   Úfetchr,   %   sG   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CÜ�>‰>×!Ñ! #¨rÐ!Ó2×7Ñ7Ó9×@Ñ@ÓBÐBr   c                 óè  — t        | d«      }g }|j                  d«      }|s|S |j                  dd¬«      D ]¸  }|j                  dd¬«      }|sŒ|d	   j	                  «       }|j                  d¬
«      }|sŒA|j                  dd¬
«      }d}	|rL|j                  |d«      }
t        |
«      dkD  r,t        j                  d|
d   «      }|r|j                  d«      }	|j                  |||	dœ«       Œº |S )Nr	   z	ul.p-listÚliF©Ú	recursiver
   T©r   r   ©Ústripú r   r   ú(\d{4}-\d{2}-\d{2}))Útitler*   Údate)r   Ú
select_oner   Úfindr3   Úget_textÚsplitÚlenÚreÚsearchÚgroupÚappend)ÚhtmlÚsoupÚitemsÚulr.   r
   r   r6   ÚafterÚ	date_textÚpartsÚms               r   Ú
parse_listrI   )   sù   € Ü˜˜}Ó-€DØ€EØ	�‰˜Ó	%€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò GˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆØ—
‘
 �
Ó&ˆÙØØ—‘˜C t�Ó,ˆØˆ	ÙØ—K‘K  qÓ)ˆEÜ�5‹z˜AŠ~Ü—I‘IÐ4°e¸A±hÓ?�ÙØ !§¡¨£
�IØ�‰˜u¨T¸9ÑEÕFð!Gð" €Lr   c                 óö   — t        | d«      }|j                  d«      }|sy d}|j                  dd¬«      D ]@  }t        j                  d|d   «      }|sŒt        |j                  d«      «      }||kD  sŒ?|}ŒB |S )	Nr	   zdiv.pager   r
   Tr1   z
page=(\d+)r   )r   r8   r   r=   r>   Úintr?   )rA   rB   Úpage_divÚmax_pr
   rH   Úps          r   Úget_total_pagesrO   B   s�   € Ü˜˜}Ó-€DØ�‰˜zÓ*€HÙØØ€EØ×Ñ˜s¨ÐÓ.ò ˆÜ�I‰I�m Q v¡YÓ/ˆÚÜ�A—G‘G˜A“J“ˆAØ�5‹yØ‘ðð €Lr   c                 ó„  ‡— t        | d«      }|j                  d«      }|r|j                  d¬«      nd}d}|j                  d«      }|r7t        j                  d|j                  «       «      }|r|j                  d«      }|j                  d	«      }|s||dg d
œS g }	g }
|j                  g d¢d¬«      D �]r  }|j                  dk(  r¼|j                  d«      rŒ%|j                  dd¬«      }|j                  dd¬«      }|rm|d   Št        ˆfd„dD «       «      rT‰j                  d«      r	t        ‰z   Š|
j                  |j                  d¬«      xs ‰j                  d«      d   ‰dœ«       |sŒ½|	j                  |«       ŒÏ|j                  dk(  r!t        ||«      }|sŒí|	j                  |«       Œÿ|j                  dk(  s�Œ|j!                  dd«      }|j!                  dd«      }|s�Œ8|j                  d«      r	t        |z   }|	j                  d|xs dz   dz   |z   dz   «       �Œu dj#                  |	«      }||||
d
œS ) Nr	   zh3.public_web_titleTr2   r   zli.timer5   r   zdiv.public_web_con.des)r6   r7   ÚcontentÚattachments)rN   r   r   r/   rN   r   r4   r
   r1   r   c              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)ÚlowerÚendswith)Ú.0ÚextÚahrefs     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>g   s"   øè ø€ Òy°s�u—{‘{“}×-Ñ-¨c×2Ñyùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarú/éÿÿÿÿ)Únamer*   r   r   Úaltz![Úimagez](ú)z

)r   r8   r:   r=   r>   r?   r   r\   Úfind_parentr9   Úanyr   ÚBASE_URLr@   r;   r   r   Újoin)rA   r*   rB   Ú	title_tagr6   rF   Údate_lirH   Úcontent_divrG   rR   ÚchildÚtextÚa_tagÚtbl_htmlr   r]   rQ   rX   s                     @r   Úparse_detailrk   P   s)  ø€ Ü˜˜}Ó-€DØ—‘Ð 5Ó6€IÙ.7ˆI×Ñ TÐÔ*¸R€EØ€IØ�o‰o˜iÓ(€GÙÜ�I‰IÐ,¨g×.>Ñ.>Ó.@ÓAˆÙØŸ™ ›
ˆIØ—/‘/Ð":Ó;€KÙØ¨	¸bÐQSÑTÐTØ€EØ€KØ×%Ñ%Ò&;ÀtÐ%ÓLó IˆØ�:‰:˜ÒØ× Ñ  Ô)ØØ—>‘> #¨T�>Ó2ˆDØ—J‘J˜s¨�JÓ.ˆEÙØ˜f™�ÜÓyÐ>xÔyÔyØ×'Ñ'¨Ô,Ü (¨5Ñ 0˜Ø×&Ñ&°·±ÀT°Ó0JÒ0bÈeÏkÉkÐZ]ÓN^Ð_aÑNbÐkpÑ'qÔrÚØ—‘˜TÕ"Ø�Z‰Z˜7Ò"Ü)¨%°Ó5ˆHÚØ—‘˜XÕ&Ø�Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ—>‘> #Ô&Ü" S™.�CØ—‘˜T S¢^¨GÑ4°tÑ;¸cÑAÀCÑGÖHð1Ið2 �k‰k˜%Ó €GØ I¸'ÐR]Ñ^Ð^r   c                  óÞ  — t        j                  t        «      } | j                  «       }t	        t
        «      }t        |«      }|sd}t        rt        |t        «      n|}t        d|d|«       t        «       }|j                  dt        f«      D ]  }|j                  |d   «       Œ t        dt        |«      «       g }t        d|dz   «      D ][  }	 |dk(  r|nt	        t
        dz   t!        |«      z   «      }	t#        |	«      }
t        d	|d
t        |
«      «       |j%                  |
«       Œ] t        dt        |«      «       d}d}d}|D �]  }|d   }||v r|dz  }Œ	 t	        |«      }t)        ||«      }|d   xs |d   }|d   xs |d   }|d   }|d   }|s|dz  }|rt+        j,                  |d¬«      nd}t/        j0                  dd|«      }t/        j0                  dd|«      }t/        j0                  dd|«      }|d d xs |j3                  «       }|j                  d|t        ||||||f«       | j5                  «        |dz  }t        d|d d d|«       �Œ t        d «       t        t6        d!t        d"«       t        d#|d$|d%|d&|«       | j9                  «        y # t&        $ r}t        d	|d|«       Y d }~�Œîd }~ww xY w# t&        $ r}t        d|d   d d d|«       Y d }~�Œžd }~ww xY w)'NéY   zTotal pages:zFetch:z.SELECT page_url FROM gov_raw WHERE site_name=?r   z	Existing:r   z?page=z  Pageú:zerror:zTotal items:r*   r6   r7   rQ   rR   F)Úensure_asciiz[]z\s+r4   z!\[.*?\]\(.*?\)r   z\|.*?\|éÈ   zŒINSERT OR REPLACE INTO gov_raw (title, site_name, page_url, publish_date, content, summary, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?)z  OKr"   ú|z  ERRz)
========================================ú(r_   zNew:zSkip:zEmpty:zPages:)Úsqlite3ÚconnectÚDBÚcursorr,   ÚLIST_URLrO   Ú_MAX_PGÚminÚprintÚsetÚexecuteÚ	SITE_NAMEÚaddr<   Úranger   rI   ÚextendÚ	Exceptionrk   ÚjsonÚdumpsr=   Úsubr3   ÚcommitÚSITE_DISPLAYÚclose)ÚconnÚcrA   Útotal_pagesÚpages_to_fetchÚexistingÚrowÚ	all_itemsÚpgÚpg_htmlrC   ÚeÚ	new_countÚ
skip_countÚempty_countÚitemr*   Údetailr6   rF   rQ   rR   Úattachments_jsonÚ	text_onlyÚsummarys                            r   Úmainrš   {   sì  € Ü�?‰?œ2Ó€DØ�‰‹€AÜ”‹?€DÜ! $Ó'€KÙØˆÝ29”S˜¤gÔ.¸{€NÜ	ˆ.˜+ x°Ô@Ü‹u€HØ�y‰yÐIÌIÈ<ÓXò ˆØ�‰�S˜‘VÕðä	ˆ+”s˜8“}Ô%Ø€IÜ�A�~¨Ñ)Ó*ò -ˆð	-Ø  Ašg‘d¬5´¸HÑ1DÄsÈ2ÃwÑ1NÓ+OˆGÜ˜wÓ'ˆEÜ�(˜B ¤S¨£ZÔ0Ø×Ñ˜UÕ#ð-ô 
ˆ.œ#˜i›.Ô)Ø€IØ€JØ€KØó 7ˆØ�5‰kˆØ�(‰?Ø˜!‰OˆJØð	7Ü˜“:ˆDÜ! $¨Ó,ˆFØ˜7‘OÒ4 t¨G¡}ˆEØ˜v™Ò6¨$¨v©,ˆIØ˜YÑ'ˆGØ  Ñ/ˆKÙØ˜qÑ �ÙNYœtŸz™z¨+ÀEÕJÐ_cÐÜŸ™˜v s¨GÓ4ˆIÜŸ™Ð1°2°yÓAˆIÜŸ™˜z¨2¨yÓ9ˆIØ   #�Ò/¨%×6Ñ6Ó8ˆGØ�I‰Ið  eØœ	 3¨	°7¸GÐEUÐW`Ðaôcà�K‰KŒMØ˜‰NˆIÜ�&˜%  ˜* c¨9Ö5ð/7ô4 
ˆ/ÔÜ	Œ,˜œY¨Ô,Ü	ˆ&�)˜W j°(¸KÈÐSaÔbØ‡J�J…LøôG ò 	-Ü�(˜B ¨!×,Ò,ûð	-ûô< ò 	7Ü�'˜4 ™=¨¨"Ð-¨s°A×6Ò6ûð	7ús2   ÃAJÅC;KÊ	KÊ(J<Ê<KË	K,ËK'Ë'K,Ú__main__)r   ) r=   ÚsysÚosr‚   Úurllib.requestr   Úurllib.errorÚbs4r   rs   rb   rw   r}   r†   Úenvironr   ru   r&   rx   Ú	enumerateÚargvÚir
   r<   rK   r   r,   rI   rO   rk   rš   Ú__name__© r   r   ú<module>r§      sÙ   ðç × ß #Ý Û à"€Ø>€Ø9€	Ø;€Ø‡Z�Z‡^�^�KÐ!2Ó3€àØ'Ø/ñ€ð €Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó
òCòò2ò)_òV7ðr ˆzÒÙ…Fð r   