Ë
    †É…j"  ã                   óš   — d Z ddlZddlmZ ddlZddlZddlZddlZddlm	Z	 dZ
dZdZdZd	d
iZdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uv   
å®�å›½å¸‚åŸºå±‚æ”¿åŠ¡å…¬å¼€ - ç”Ÿæ€�çŽ¯å¢ƒ çˆ¬è™«
https://www.ningguo.gov.cn/Jczwgk/showList/0/111000000/page_1.html
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.ningguo.gov.cnz;https://www.ningguo.gov.cn/Jczwgk/showList/0/111000000/pageu   å®�å›½å¸‚ç”Ÿæ€�çŽ¯å¢ƒé   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 óÊ  — 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Úparser   )ÚtableÚbase_urlÚurllibÚtblr   r	   r   r   s           ú'/root/gov_crawler/crawl_ningguo_hjbh.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                  | t        d¬«      }dd l}|j	                  |j
                  «      d   xs d|_        |j                  S # t        $ r}t        d| › d|› �«       Y d }~y d }~ww xY w)Né   )ÚheadersÚtimeoutr   Úencodingzutf-8z  [ERROR] fetch failed: z - )
Úrequestsr   ÚHEADERSÚchardetÚdetectÚcontentr!   ÚtextÚ	ExceptionÚprint)ÚurlÚrr$   Úes       r   Úfetchr-      sl   € ðÜ�L‰L˜¤g°rÔ:ˆÛØ—^‘^ A§I¡IÓ.¨zÑ:ÒE¸gˆŒ
Ø�v‰vˆøÜò ÜÐ(¨¨¨S°°Ð4Ô5Üûðús   ‚AA Á	A9ÁA4Á4A9c                 óÀ  — t        | d«      }g }|j                  dd¬«      D ]¹  }|d   }d|v sŒ|j                  d«      sŒt        t        |«      }|j                  d«      }|r|j                  d¬	«      n|j                  d¬	«      }|j                  d¬	«      }t        j                  d
|«      }	|	r|	j                  d«      nd}
|sŒ¦|j                  |||
f«       Œ» |S )z*Extract (url, title, date) from list page.r   r   T©r	   r	   z/Jczwgk/show/ú.htmlÚli©Ústripz(\d{4}-\d{2}-\d{2})\s*é   r
   )r   r   Úendswithr   ÚBASE_URLÚfind_parentÚget_textÚreÚmatchÚgroupÚappend)ÚhtmlÚsoupÚitemsr   r	   Úfull_urlr1   Úli_textÚtitleÚ
date_matchÚdates              r   Úextract_list_itemsrE   (   sÖ   € ä˜˜}Ó-€DØ€EØ�]‰]˜3 Tˆ]Ó*ò 6ˆØ�‰yˆØ˜dÒ" t§}¡}°WÕ'=Üœx¨Ó.ˆHà—‘˜tÓ$ˆBÙ13�b—k‘k¨�kÔ-¸¿¹È$¸Ó9OˆGØ—J‘J T�JÓ*ˆEäŸ™Ð";¸WÓEˆJÙ*4�:×#Ñ# AÔ&¸"ˆDÚØ—‘˜h¨¨tÐ4Õ5ð6ð €Lr   c           
      ó$  ‡— t        | d«      }|j                  dd¬«      }|r|j                  d¬«      }nU|j                  d«      }|r|j                  d¬«      nd}t        j                  d	d|«      }t        j                  d
d|«      }d}|j                  dd¬«      }|r]t        j
                  d|j                  «       «      }|r7|j                  d«      › d|j                  d«      › d|j                  d«      › �}g }	g }
|j                  dd¬«      }|�rŸ|j                  dd¬«      D ]“  }|d   Št        ˆfd„dD «       «      sŒt        |‰«      }|j                  d¬«      xs ‰j                  d«      d   }|dvr|
j                  ||dœ«       Œj‰j                  d«      sd‰v sŒ€|
j                  ||dœ«       Œ• |dd }|j                  g d ¢«      D ]Û  }|j                  d!k(  rA|j                  d"«      rŒ$|j                  d¬«      }|sŒ9|r||k(  rŒA|	j                  |«       ŒS|j                  d"k(  r!t        ||«      }|sŒq|	j                  |«       Œƒ|j                  d#k(  sŒ“|j!                  d$d«      }|j!                  d%d«      }|sŒº|	j                  d&|› d't        ||«      › d(�«       ŒÝ d)j#                  |	«      }|sÁ|r¿|j                  d¬«      }|r«|}|j                  dd¬«      D ]“  }|d   Št        ˆfd*„d+D «       «      sŒt        |‰«      }|j                  d¬«      xs ‰j                  d«      d   }|dvr|
j                  ||dœ«       Œj‰j                  d«      sd‰v sŒ€|
j                  ||dœ«       Œ• |||
|fS ),z5Extract title, content, attachments from detail page.r   Úh1zu-lgtit)Úclass_Tr2   rB   r
   u1   \s*[-â€“â€”]\s*æ ‡å‡†åŒ–è§„èŒƒåŒ–å·¥ä½œä¸“é¢˜\s*$u(   \s*[-â€“â€”]\s*å®�å›½å¸‚äººæ°‘æ”¿åºœ\s*$Údivzu-wzinfoz(\d{4})-(\d{2})-(\d{2})r4   ú-é   é   zj-fontContentr   r/   r	   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w©N©Úlower©Ú.0Úkwr	   s     €r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>Z   s   øè ø€ Òw¨"�2˜Ÿ™›Ô%Ñwùó   ƒ)Údownloadú.pdfú.docú.docxú.xlsz.xlsxz.rarz.zipú/éÿÿÿÿ)u   æ–‡æœ¬ä¸‹è½½)Únamer*   z/upload_xc/rV   NéP   )Úpr   r   r_   r   r   r   Úaltz![z](ú)z

c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wrN   rO   rQ   s     €r   rT   z!extract_detail.<locals>.<genexpr>‚   s   øè ø€ Òb¨b�r˜TŸZ™Z›\Ô)ÑbùrU   )rV   rW   rX   rY   rZ   )r   Úfindr8   r9   ÚsubÚsearchr;   r   Úanyr   Úsplitr<   r   r]   r7   r   r   Újoin)r=   Úpage_urlr>   Útitle_elrB   Ú	title_tagrD   ÚwzinforC   Úcontent_partsÚattachmentsÚzoomr   r@   Úattach_nameÚ
title_skipÚelÚtxtÚtbl_htmlr   r`   r&   Úrawr	   s                          @r   Úextract_detailrv   ;   s�  ø€ ä˜˜}Ó-€Dð �y‰y˜ iˆyÓ0€HÙØ×!Ñ!¨Ð!Ó-‰à—I‘I˜gÓ&ˆ	Ù2;�	×"Ñ"¨Ð"Ô.ÀˆÜ—‘ÐKÈRÐQVÓWˆÜ—‘ÐBÀBÈÓNˆð €DØ�Y‰Y�u ZˆYÓ0€FÙÜ—Y‘YÐ9¸6¿?¹?Ó;LÓMˆ
ÙØ ×&Ñ& qÓ)Ð*¨!¨J×,<Ñ,<¸QÓ,?Ð+@ÀÀ*×BRÑBRÐSTÓBUÐAVÐWˆDð €MØ€Kà�9‰9�U ?ˆ9Ó3€DÚà—‘˜s¨�Ó.ò 		OˆAØ�V‘9ˆDÜÓwÐ0vÔwÕwÜ" 8¨TÓ2�ØŸj™j¨t˜jÓ4ÒK¸¿
¹
À3»ÈÑ8K�ØÐ&6Ñ6Ø×&Ñ&°ÀHÑ'MÕNØ—_‘_ ]Ô3°zÀTÒ7Ià×&Ñ&°ÀHÑ'MÕNð		Oð ˜3˜B�Zˆ
Ø—-‘-Ò 5Ó6ò 	PˆBØ�w‰w˜#Š~Ø—>‘> 'Ô*ØØ—k‘k¨�kÓ-�ÚÙ! c¨U¢lØ Ø!×(Ñ(¨Õ-Ø—‘˜GÒ#Ü-¨b°(Ó;�ÚØ!×(Ñ(¨Õ2Ø—‘˜EÓ!Ø—f‘f˜U BÓ'�Ø—f‘f˜U BÓ'�ÚØ!×(Ñ(¨2¨c¨U°"´W¸XÀsÓ5KÐ4LÈAÐ)NÕOð#	Pð& �k‰k˜-Ó(€Gñ ‘tØ�m‰m $ˆmÓ'ˆÙØˆGà—]‘] 3¨T�]Ó2ò S�Ø˜‘y�ÜÓbÐ4aÔbÕbÜ& x°Ó6�HØ"#§*¡*°4 *Ó"8Ò"O¸D¿J¹JÀs»OÈBÑ<O�KØ"Ð*:Ñ:Ø#×*Ñ*°KÈÑ+QÕRØŸ™¨Ô7¸:ÈÒ;MØ#×*Ñ*°KÈÑ+QÕRðSð �'˜;¨Ð,Ð,r   c                  ó´  — g } t        dt        dz   «      D ]…  }t        › d|› d�}t        d|› d|› �«       t	        |«      }|st        d|› d�«       Œ=t        |«      }t        dt        |«      › d	�«       | j                  |«       t        j                  d
«       Œ‡ t        dt        | «      › �«       g }t        | «      D ]Ã  \  }\  }}}	t        d|dz   › dt        | «      › d|d d › d�«       t	        |«      }|s|j                  |d|g |	dœ«       ŒSt        ||«      \  }
}}}|
s|}
|s|	}|j                  |
||||dœ«       t        d|
d d › d|› dt        |«      › dt        |«      › �«       t        j                  d«       ŒÅ t        j                  dd«      }	 dd l}|j!                  |d¬«      }|j#                  «       }d}|D ]d  }|d   r|d   d d nd}|d   rt%        |d   «      nd}d |d   v rdnd}|j'                  d!|d"   |d   |d#   |d#   t(        |d$   |||f	«       |dz  }Œf |j+                  «        |j-                  «        t        d%|› d&�«       t        d(d)› �«       t        d*t(        › �«       t        d+t        › �«       t        d,t        |«      › �«       t        d)› «       y # t.        $ r}t        d'|› �«       Y d }~Œrd }~ww xY w)-Nr4   Ú_r0   zFetching list page z: z  [SKIP] Page z failedz  Found z itemsg333333Ó?z
Total items to process: ú[r[   z] é2   z...r
   )rB   r&   ri   rn   rD   z  -> z | date=z
 | attach=z | content_len=gš™™™™™É?Ú	SEARCH_DBz/root/search.dbr   é<   )r    r&   éÈ   rn   z| --- |uã   INSERT OR REPLACE INTO gov_raw 
                   (title, content, page_url, source_url, site_name, publish_date, summary, attachments, has_table, category)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'çŽ¯è¯„å®¡æ‰¹')rB   ri   rD   u   
âœ… Pushed z records to search DBz
[ERROR] DB push failed: ú
z2==================================================u   ç«™ç‚¹: u   é‡‡é›†é¡µæ•°: u   é‡‡é›†æ�¡æ•°: )ÚrangeÚ	MAX_PAGESÚ	LIST_BASEr)   r-   rE   ÚlenÚextendÚtimeÚsleepÚ	enumerater<   rv   ÚosÚgetenvÚsqlite3ÚconnectÚcursorr   ÚexecuteÚ	SITE_NAMEÚcommitÚcloser(   )Ú	items_allÚpager*   r=   r?   ÚresultsÚiri   Ú
list_titleÚ	list_daterB   r&   rn   rD   r{   r‰   ÚconnÚcÚinsertedr+   ÚsummaryÚattachments_jsonÚ	has_tabler,   s                           r   Úmainrœ   Œ   s3  € Ø€Iô �aœ Q™Ó'ò ˆÜ�˜1˜T˜F %Ð(ˆÜÐ# D 6¨¨C¨5Ð1Ô2Ü�S‹zˆÙÜ�N 4 &¨Ð0Ô1Øä" 4Ó(ˆÜ�œ˜U›˜ FÐ+Ô,Ø×Ñ˜ÔÜ�
‰
�3�ðô 
Ð&¤s¨9£~Ð&6Ð
7Ô8ð €GÜ09¸)Ó0Dò Ñ,ˆÑ,ˆH�j )Ü��!�A‘#��aœ˜I›Ð' r¨*°S°b¨/Ð):¸#Ð>Ô?ä�X‹ˆÙØ�N‰NØ#°ÀØ!¨9ñô ð ä,:¸4ÀÓ,JÑ)ˆˆw˜ TÙØˆEÙØˆDà�‰Ø w¸HØ&°ñ
ô 	ô
 	��e˜C˜R�j�\ ¨$¨¨z¼#¸kÓ:JÐ9KÈ?Ô[^Ð_fÓ[gÐZhÐiÔjÜ�
‰
�3�ð/ô4 —	‘	˜+Ð'8Ó9€Ið0ÛØ�‰˜y°"ˆÓ5ˆØ�K‰K‹MˆàˆØò 	ˆAØ,-¨iªL�a˜	‘l 4 CÑ(¸bˆGØ89¸-Ò8Hœs 1 ]Ñ#3Ô4ÈbÐØ&¨!¨I©,Ñ6™¸AˆIØ�I‰IðIð �7‘˜Q˜y™\¨1¨Z©=¸!¸J¹-ÌØ�6‘˜GÐ%5°yðBô	ð ˜‰M‰Hð	ð 	�‰ŒØ�
‰
ŒÜ�˜h˜ZÐ'<Ð=Ô>ô
 
ˆBˆvˆhˆ-ÔÜ	ˆH”Y�KÐ
 Ô!Ü	ˆNœ9˜+Ð
&Ô'Ü	ˆNœ3˜w›<˜.Ð
)Ô*Ü	ˆVˆHÕøô ò 0ÜÐ*¨1¨#Ð.×/Ñ/ûð0ús   ÆCJ6 Ê6	KÊ?KËKÚ__main__)r
   )Ú__doc__r"   Úbs4r   r9   r‡   Úsysr„   r   r   r6   r�   r�   r€   r#   r   r-   rE   rv   rœ   Ú__name__© r   r   ú<module>r£      sk   ðñó Ý ß × Ý  à'€ØI€	Ø#€	Ø€	ØÐWÐ
X€óòòò&O-òbOðb ˆzÒÙ…Fð r   