Ë
    9JŠ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mZ ddl	m
Z
 dZdZdZdZd	Zd
ZdZdddœZg d¢Ze› e› d�e› e› d�e› e› d�e› e› d�e› e› d�gZd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy) uÇ   
æ´‹åŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
CMS: è‡ªå®šä¹‰PHP
List: /yxzf/yxzwgk/tzgg/gk_list.shtml (P1), gk_list_{N-1}.shtml (PN)
      14-15æ�¡/é¡µ
Detail: /yxzf/yxzwgk/tzgg/YYYYMM/32char_hash.shtml
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu   æ´‹åŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šu   é€šçŸ¥å…¬å‘Šu   é™•è¥¿zhttp://www.yangxian.gov.cnz/yxzf/yxzwgk/tzggé   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zzh-CN,zh;q=0.9)z
User-AgentzAccept-Language)
u   ã€�æ‰“å�°æœ¬é¡µã€‘u   ã€�å…³é—­çª—å�£ã€‘u   æ‰“å�°æœ¬é¡µu   å…³é—­çª—å�£u   è½¬è½½åˆ†äº«ï¼šu   æµ�è§ˆé‡�ï¼šu   ç›¸å…³é™„ä»¶ï¼šu   ç›¸å…³ç¨¿ä»¶ï¼šu   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€u	   é™„ä»¶ï¼šz/gk_list.shtmlz/gk_list_1.shtmlz/gk_list_2.shtmlz/gk_list_3.shtmlz/gk_list_4.shtmlc                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      ú#/root/gov_crawler/crawl_yangxian.pyÚtable_to_mdr   +   s   € äˆu‹:Ðó    c                 óä  — g }| j                   D �]Î  }t        |t        «      r%|j                  «       }|sŒ'|j	                  |«       Œ9|j
                  dk(  rƒ|j                  dd«      j                  «       }|j                  d¬«      }|r:|r8|j                  d«      st        ||«      n|}|j	                  d|› d|› d	�«       Œ¶|sŒ¹|j	                  |«       ŒË|j
                  d
k(  re|j                  dd«      }|sŒï|j                  dd«      }	|j                  d«      st        ||«      n|}
|j	                  |	rd|
› d�nd|
› d�«       �Œ?|j
                  dv r*|j                  dd¬«      }|s�Œd|j	                  |«       �Œw|j
                  dk(  r|j	                  d«       �Œ™t        |d«      s�Œ§|j                  dd¬«      }|s�Œ¾|j	                  |«       �ŒÑ dj                  |«      S )NÚaÚhrefÚ T©ÚstripÚhttpú<p><a href="ú">ú</a></p>ÚimgÚsrcÚaltõ   ">æŸ¥çœ‹å›¾ç‰‡</a></p>)ÚbÚstrongÚspanÚfontÚemú Úbrú
Úget_text)ÚcontentsÚ
isinstancer   r   ÚappendÚnameÚgetr$   Ú
startswithr   ÚhasattrÚjoin)Úp_tagÚ
detail_urlÚpartsÚelemÚtr   ÚtextÚfullr   r   Úfull_srcs              r   Úrender_paragraphr5   /   s¶  € Ø€EØ—‘ó  ˆÜ�dœCÔ Ø—
‘
“ˆAÚØ—‘˜Q•Ø�Y‰Y˜#ÒØ—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,ˆDÙ™Ø8<¿¹ÈÔ8O”w˜z¨4Ô0ÐUY�Ø—‘˜|¨D¨6°°D°6¸ÐBÕCÚØ—‘˜TÕ"Ø�Y‰Y˜%ÒØ—(‘(˜5 "Ó%ˆCÚØ—h‘h˜u bÓ)�Ø;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘ÑPS˜|¨H¨:Ð5KÑLÐ[gÐhpÐgqð  rHð  ZIö  JØ�Y‰YÐ?Ñ?Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–Ø�Y‰Y˜$ÒØ�L‰L˜ÖÜ�T˜:Ö&Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–ð9 ð: �8‰8�E‹?Ðr   c                 óz  ‡— g }t        «       }| j                  D �]Ä  }|j                  €Œ|j                  j                  «       }|dk(  r!t	        ||«      }|sŒ?|j                  |«       ŒQ|dk(  rA|j                  d¬«      }t        |«      dk  rŒwt        |«      }|sŒ…|j                  |«       Œ—|dk(  r�|j                  dd«      }	|	sŒ±t        |«      |vsŒ¿|j                  t        |«      «       |j                  d	d«      }
|	j                  d
«      st        ||	«      n|	}|j                  |
rd|› d�nd|› d�«       �Œ)|dv �rO|j                  g d¢d¬«      D �]4  }t        |«      |v rŒ|j                  t        |«      «       |j                  dk(  r7|j                  dd¬«      }|sŒQt	        ||«      }|sŒ`|j                  |«       Œr|j                  dk(  rA|j                  d¬«      }t        |«      dk  rŒ¢t        |«      }|sŒ°|j                  |«       ŒÂ|j                  dk(  sŒÒ|j                  dd«      }	|	sŒç|j                  d	d«      }
|	j                  d
«      st        ||	«      n|	}|j                  |
rd|› d�nd|› d�«       �Œ7 �Œ}|dv s�Œƒ|j                  dd¬«      D ],  }|j                  dd¬«      }|sŒ|j                  d|z   «       Œ. �ŒÇ g }|D ]C  Št        ˆfd„t         D «       «      rŒt#        j$                  d‰«      rŒ3|j                  ‰«       ŒE dj'                  |«      S )NÚpr   Tr   é   r   r   r   r   r   r   r   )ÚdivÚsectionÚarticle)r7   r   r   )Ú	recursiver!   )ÚulÚolÚliFz- c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0Úskr7   s     €r   ú	<genexpr>z"extract_content.<locals>.<genexpr>‘   s   øè ø€ Ò,˜2ˆr�QŒwÑ,ùs   ƒu   ^(æ�¥æº�|å�‘å¸ƒæ—¥æœŸ)[ï¼š:]z

)ÚsetÚchildrenr(   Úlowerr5   r'   r$   Úlenr   r)   ÚidÚaddr*   r   Úfind_allÚanyÚ
SKIP_TEXTSÚreÚmatchr,   )Úcontent_divr.   r/   Ú	processedÚchildÚtnÚtxtÚall_textÚmdr   r   r4   ÚsubÚrenderedr?   Úfilteredr7   s                   @r   Úextract_contentrZ   Q   s  ø€ Ø€EÜ“€Ià×%Ñ%ó 8-ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆà�Š9Ü" 5¨*Ó5ˆCÚØ—‘˜SÕ!à�7Š]Ø—~‘~¨D�~Ó1ˆHÜ�8‹}˜rÒ!ØÜ˜UÓ#ˆBÚØ—‘˜RÕ à�5Š[Ø—)‘)˜E 2Ó&ˆCÚ”r˜%“y¨	Ò1Ø—‘œb ›iÔ(Ø—i‘i  rÓ*�Ø;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘ÑPS˜|¨H¨:Ð5KÑLÐ[gÐhpÐgqð  rHð  ZIö  JàÐ0Ò0Ø—~‘~Ò&;Àt�~ÓLó R�Ü�c“7˜iÑ'ØØ—‘œb ›gÔ&Ø—8‘8˜s’?ØŸ,™, s°$˜,Ó7�CÙØ Ü/°°ZÓ@�HÚØŸ™ XÕ.Ø—X‘X Ò(Ø"Ÿ|™|°$˜|Ó7�HÜ˜8“} rÒ)Ø Ü$ SÓ)�BÚØŸ™ RÕ(Ø—X‘X Ó&ØŸ'™' %¨Ó,�CÚØ!Ÿg™g e¨RÓ0˜ØCFÇ>Á>ÐRXÔCY¤7¨:°sÔ#;Ð_b˜ØŸ™ÑX[ |°H°:Ð=SÑ%TÐcoÐpxÐoyð  zPð  bQö  Rò/Rð2 �<ÓØ—n‘n T°U�nÓ;ò -�Ø—k‘k #¨T�kÓ2�ÚØ—L‘L ¨¡Õ,ò-ðk8-ðt €HØò ˆÜÓ,¤Ô,Ô,ØÜ�8‰8Ð3°QÔ7ØØ�‰˜Õðð �;‰;�xÓ Ð r   c                 óú  — g }t        «       }| j                  dd¬«      D ]Ø  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  d¬«      xs& |j                  d«      d	   j                  d
«      d   }||vsŒ´|j                  |«       |j                  ||dœ«       ŒÚ |S )Nr   T©r   r   z&\.(pdf|doc|docx|xls|xlsx|rar|zip|txt)$ú/r   r   éÿÿÿÿú?r   )r(   Úurl)rE   rK   rN   ÚsearchÚIr*   ÚBASE_URLÚlstripr$   ÚsplitrJ   r'   )ÚsoupÚattsÚseenr   r   r(   s         r   Úextract_attachmentsri   š   sÝ   € Ø€DÜ‹5€DØ�]‰]˜3 Tˆ]Ó*ò 
9ˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKØ�‰˜sÔ#Ü $‘‘Ø—_‘_ VÔ,Ü #‘~¨¯©°CÓ(8Ñ8�Ø—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ˜4ÒØ—‘˜”Ø—‘ T°$Ñ7Õ8ð
9ð €Kr   c           
      ó<  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        |d«      }d}|j                  dddi¬	«      }|r$|j                  d
«      r|d
   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }|s|}d}	|j                  dddi¬	«      }
|
r'|
j                  d
«      r|
d
   j                  «       d d }	|	sgt        j                  d|«      D ]N  }|j                  d«      › dt        |j                  d«      «      d›dt        |j                  d«      «      d›�}	 n |j                  dd¬«      }|s|j                  dd¬«      }|s|j                  dd
¬«      }|s|j                  dd¬«      }t        |«      }|rt        || «      }nd}t!        |j                  «       «      dk  r$d| › d|› d�}|r|D ]  }|d|d   › d|d    › d!�z  }Œ ||	||fS # t
        $ r}d d d g fcY d }~S d }~ww xY w)"Né   ©ÚheadersÚtimeoutúutf-8úhtml.parserr   Úmetar(   ÚArticleTitle)ÚattrsÚcontentÚh1Tr   ÚPubDateé
   u*   (\d{4})[å¹´-](\d{1,2})[æœˆ-](\d{1,2})[æ—¥]é   ú-é   Ú02dé   r9   zm-txt-article)Úclass_r;   )rI   r   r   r   u   

é™„ä»¶ï¼š[z](r`   ú))Úrequestsr)   ÚHEADERSÚencodingr2   Ú	Exceptionr   Úfindr   r$   rN   ÚfinditerÚgroupÚintri   rZ   rH   )r`   Ú
list_titleÚrÚhtmlÚerf   ÚtitleÚmtru   Údate_strrV   ÚmrP   Úattachmentsrt   r   s                   r   Úfetch_detailr�   «   sB  € ð$Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆô ˜˜}Ó-€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEÙØˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆÙä—‘ÐJÈDÓQò 	ˆAØŸ'™' !›*˜ Q¤s¨1¯7©7°1«:£°sÐ&;¸1¼SÀÇÁÈÃ»_ÈSÐ<QÐRˆHÙð	ð
 —)‘)˜E¨/�)Ó:€KÙØ—i‘i ¨)�iÓ4ˆÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i ¨i�iÓ8ˆä% dÓ+€KáÜ! +¨sÓ3‰àˆä
ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆÙØ ò E�Ø˜^¨A¨f©I¨;°b¸¸5¹¸
À!ÐDÑD‘ðEð �(˜G [Ð0Ð0øôe ò $Ø�T˜4 Ð#Õ#ûð$ús   ‚/H È	HÈHÈHÈHc                 ór  — 	 t        j                  | t        d¬«      }d|_        t        |j                  d«      }g }|j                  dd¬	«      D ]»  }|d
   }|rd|v s|j                  d«      rŒ t        j                  d|«      sŒ7|j                  dd«      xs |j                  d¬«      }|rt        |«      dk  rŒn|j                  d«      r
t        |z   }n |j                  d«      r|}nt        | |«      }|j!                  ||f«       Œ½ |S # t        $ r}t        d| › d|› �«       g cY d }~S d }~ww xY w)Nrk   rl   ro   z  Error fetching ú: rp   r   Tr\   r   Ú
javascriptú#z$/yxzf/yxzwgk/tzgg/\d{6}/[0-9a-f]{32}r‹   r   r   r   r]   r   )r   r)   r€   r�   r‚   Úprintr   r2   rK   r*   rN   ra   r$   rH   rc   r   r'   )	Úlist_urlrˆ   rŠ   rf   Úarticlesr   r   r‹   Úfull_urls	            r   Úextract_list_pager™   å   s-  € ðÜ�L‰L˜¬7¸BÔ?ˆØˆŒ
ô
 ˜Ÿ™ Ó/€Dà€Hà�]‰]˜3 Tˆ]Ó*ò +ˆØ�‰yˆÙ�| tÑ+¨t¯©¸sÔ/CØä�y‰yÐ@À$ÔGØà—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆÙœ˜E›
 QšØà�?‰?˜3ÔÜ $‘‰HØ�_‰_˜VÔ$Ø‰Hä˜x¨Ó.ˆHà�‰˜ Ð)Õ*ð'+ð* €Oøô; ò ÜÐ! ( ¨2¨a¨SÐ1Ô2Ø�	ûðús   ‚#D Ä	D6ÄD1Ä+D6Ä1D6c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r   Úinit_dbr    	  s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó:  — |r|d d n|}t        j                  dd|«      j                  «       }|rt        j                  |d¬«      nd}t        d«      D ]Y  }	 | j                  dt        |||j                  «       |||t        |t        f
«      }	| j                  «        |	j                  d	kD  c S  y# t        j                  $ rU}
d
t        |
«      v r|dk  rt        j                   d«       Y d }
~
Œœt#        d|
› �t$        j&                  ¬«       Y d }
~
 yd }
~
ww xY w)NéÈ   z\s+r!   F)Úensure_asciiz[]r|   zÕINSERT OR IGNORE INTO gov_raw
                   (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   Úlockedrz   z  DB error: )Úfile)rN   rW   r   ÚjsonÚdumpsÚrangerž   Ú	SITE_NAMEÚCATEGORYÚGROUPÚcommitÚrowcountr›   ÚOperationalErrorr   ÚtimeÚsleepr•   ÚsysÚstderr)rŸ   r‹   Úpage_urlÚpublish_datert   r�   ÚsummaryÚatt_jsonÚattemptÚcurrŠ   s              r   Úsave_articler¹     sý   € Ù&ˆg�d�s‰m¨E€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€GÙ>IŒt�z‰z˜+°EÕ:Èt€HÜ˜“8ò ˆð	Ø—,‘,ð<ô ˜H h°·±³¸|Ø˜'¤8¨X´uð>ó	ˆCð �K‰KŒMØ—<‘< !Ñ#Ò#ðð" øô ×'Ñ'ò 	Øœ3˜q›6Ñ! g°¢kÜ—
‘
˜1”ÜÜ�L  Ð$¬3¯:©:Õ6Ýûð	ús   ÁAB2Â2DÃ'DÃ1DÄDc            
      ó<  — t         } t        t        j                  «      dkD  r	 t	        t        j                  d   «      } t        dt        › d| › �«       t        «       }d}d}t        d| dz   «      D �]  }|t        t        «      k  rt        |dz
     }nt        › t        › d|dz
  › d�}t        |«      }|st        d	|› d
�«       ŒU|t        |«      z  }|D ]ƒ  \  }}|j                  d|f«      }	|	j                  «       rŒ*t!        ||«      \  }
}}}|
xs |}|xs d}|xs	 d|› d|› d�}|xs g }t#        ||||||«      r|dz  }t%        j&                  d«       Œ… t        d	|› dt        |«      › d|› d�«       �Œ |j)                  «        |j+                  «        t        d|› d|› �«       y # t
        $ rb t        j                  d   dv rIt        t        j                  «      dkD  r-	 t	        t        j                  d   «      } n# t
        $ r Y nw xY wY �ŒÚw xY w)Nrx   )z--max-pagesrz   z	Scraping z, max pages: r   z	/gk_list_z.shtmlz  Page z: 0 articles (end)z)SELECT id FROM gov_raw WHERE page_url = ?r   r   r   r   g333333Ó?r’   z found, z new so farz
Done! Total found: z, New: )Ú	MAX_PAGESrH   r±   Úargvr†   Ú
ValueErrorr•   r©   r    r¨   Ú	LIST_URLSrc   Ú	LIST_PATHr™   rž   Úfetchoner�   r¹   r¯   r°   r¬   Úclose)Ú	max_pagesrŸ   Ú	total_newÚtotal_foundÚpnr–   r—   r‹   r³   r¸   Ú	det_titleÚdet_dateÚdet_contentÚdet_attsÚfinal_titleÚ
final_dateÚfinal_contentÚ
final_attss                     r   ÚmainrÎ   (  s$  € Ü€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
ˆI”i�[ ¨i¨[Ð
9Ô:ä‹9€DØ€IØ€Kä�A�y 1‘}Ó%ó MˆØ””Y“ÒÜ   a¡Ñ(‰Hä"˜¤I ;¨i¸¸Q¹°x¸vÐFˆHä$ XÓ.ˆÙÜ�G˜B˜4Ð1Ð2Ô3Øà”s˜8“}Ñ$ˆà'ò 	‰OˆE�8Ø—,‘,ÐJÈXÈKÓXˆCØ�|‰|Œ~Øä9EÀhÐPUÓ9VÑ6ˆI�x ¨hØ#Ò, uˆKØ!š RˆJØ'Ò[¨\¸(¸À2ÀkÀ]ÐRZÐ+[ˆMØ!š RˆJä˜D +¨x¸À]ÐT^Ô_Ø˜Q‘�	ä�J‰J�s�Oð	ô  	�˜�t˜2œc (›m˜_¨H°Y°K¸{ÐKÖLð;Mð> 	‡K�K„MØ‡J�J„LÜ	Ð! + ¨g°i°[Ð
AÕBøô_ ò 	Ü�x‰x˜‰{Ð.Ñ.Ü”s—x‘x“= 1Ò$ðÜ$'¬¯©°©Ó$4™	øÜ%ò Ùðýð	ús5   ¤F0 Æ0:HÇ+HÈHÈ	HÈHÈHÈHÈHÚ__main__)r   )Ú__doc__r   rN   r¦   r›   r¯   r±   Úbs4r   Úurllib.parser   r�   r©   rª   r«   rc   r¿   r»   r€   rM   r¾   r   r5   rZ   ri   r�   r™   r    r¹   rÎ   Ú__name__rA   r   r   ú<module>rÔ      sð   ðñ÷ .× -× -Ý Ý  à
€Ø-€	Ø€Ø€Ø'€Ø€	Ø€	ð DØ'ñ€ò
€
ð €j��˜>Ð*Ø€j��Ð+Ð,Ø€j��Ð+Ð,Ø€j��Ð+Ð,Ø€j��Ð+Ð,ð€	òòòDF!òRó"71òt!òHòò04Cðn ˆzÒÙ…Fð r   