Ë
    €Ûµ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mZ ddlm	Z	 ddlZ
dZdZdZdZd	Zd
dddœZ ej"                  «       Zej                   j'                  e«       dd„Zdd„Zd„ Zd„ Zefd„Zd„ Zd„ Zedk(  r e«        yy)u°   
panzhihua.gov.cn - æ”€æž�èŠ±å¸‚äººæ°‘æ”¿åºœ / å…¬å‘Šå…¬ç¤º
ç«™ç‚¹: www.panzhihua.gov.cn/zwgk/gzdt/gggs/
CMS: è‡ªå»ºï¼Œdiv#Zoom æ­£æ–‡ï¼Œdiv.boxPzh15_con åˆ—è¡¨
åˆ†ç»„: å››å·�
é    N©ÚBeautifulSoup)Úurljoinz+http://www.panzhihua.gov.cn/zwgk/gzdt/gggs/u   æ”€æž�èŠ±å¸‚äººæ°‘æ”¿åºœu   å››å·�é   z/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   úhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)	Úbs4r   ÚstrÚfind_allÚgetÚ
startswithÚurllibÚparser   )ÚtableÚbase_urlr   Útblr
   r   r   r   s           ú#/root/gov_crawler/crawl_pzh_gggs.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        |«      D ]$  }	 t        j                  | d¬«      }d|_        |c S  y # t        $ r*}||dz
  k  rdd l}|j                  d«       n|‚Y d }~ŒVd }~ww xY w)Né   ©Útimeoutzutf-8é   r   é   )ÚrangeÚsessionr   ÚencodingÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚattemptÚrÚer)   s         r   Ú
fetch_pager0   3   ss   € Ü˜“>ò 
ˆð		Ü—‘˜C¨�Ó,ˆAØ ˆAŒJØŠHð	
ð øô ò 	Ø˜ 1™Ò$ÛØ—
‘
˜1•à�ô ûð	ús   �4´	A'½ A"Á"A'c                 óâ  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  dd¬«      D ]³  }|j                  dd¬	«      D ]›  }|j                  d
«      }|j                  dd¬«      }|r|j                  d«      sŒ;|d   }	|j                  dd«      xs |j	                  d¬«      }
|r|j	                  d¬«      nd}t        ||	«      }|j                  |
||f«       Œ� Œµ |S )Nr	   ÚdivÚboxPzh15_con©Úclass_ÚulÚ	List_listÚliF)Ú	recursiver
   ÚspanÚgrey999r   Útitler   T©Ústrip)r   Úfindr   r   Úget_textr   Úappend)ÚhtmlÚlist_urlÚsoupÚitemsÚbpcr6   r8   r
   r:   r   r<   Údate_strÚ
detail_urls                r   Úparse_list_itemsrI   B   s÷   € Ü˜˜}Ó-€DØ€EØ
�)‰)�E .ˆ)Ó
1€CÙØˆà�l‰l˜4¨ˆlÓ4ò 8ˆØ—+‘+˜d¨e�+Ó4ò 	8ˆBØ—‘˜“ˆAØ—7‘7˜6¨)�7Ó4ˆDÙ˜AŸE™E &œMØà�V‘9ˆDØ—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEÙ48�t—}‘}¨4�}Ô0¸bˆHä  ¨4Ó0ˆJØ�L‰L˜% ¨XÐ6Õ7ñ	8ð8ð €Lr   c                 ó  ‡‡— t        | «      }|syt        |j                  d«      }d}|j                  d«      }|r|j	                  d¬«      }|s)|j                  ddd	i¬
«      }|r|j                  dd«      }d}|j                  dddi¬
«      }|rK|j                  dd«      }t        j                  d|«      }	|	r!|	j                  d«      j                  dd«      }|s^|j                  dd¬«      }
|
rI|
j	                  «       }t        j                  d|«      }	|	r!|	j                  d«      j                  dd«      }|j                  dd¬«      }g }g }|rò|j                  D ]8  }|j                  dk(  sŒ|j	                  d¬«      }|sŒ(|j                  |«       Œ: |j                  d«      D ]  }|j                  t        || «      «       Œ |j                  dd¬«      D ]d  }|d   Št        ˆfd„dD «       «      sŒ|j	                  d¬«      xs ‰j!                  d«      d   }t#        | ‰«      Š|j                  |‰dœ«       Œf |j                  dd¬«      D ]y  }|d   Št        ˆfd „dD «       «      sŒ|j	                  d¬«      xs ‰j!                  d«      d   }t#        | ‰«      Št        ˆfd!„|D «       «      rŒf|j                  |‰dœ«       Œ{ d"j%                  |«      }|t'        j(                  |d#¬$«      ||fS )%N)Nú[]r   r   r	   r   Úh1Tr=   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}[-/]\d{1,2}[-/]\d{1,2})r#   ú/ú-ÚpÚexplainr4   u2   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})r2   ÚZoom)Úidr   r
   )r   r   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w©N©Úlower©Ú.0Úextr   s     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>�   s   øè ø€ Òm¨3�3˜$Ÿ*™*›,Ô&Ñmùó   ƒ)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.raréÿÿÿÿ)rN   r+   c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wrZ   r[   r]   s     €r   r`   zparse_detail.<locals>.<genexpr>•   s   øè ø€ Òi sˆs�d—j‘j“lÔ"Ñiùra   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r+   N© )r^   r
   Úfull_urls     €r   r`   zparse_detail.<locals>.<genexpr>˜   s   øè ø€ ÒA°�q˜‘x 8Õ+ÑAùs   ƒú

F)Úensure_ascii)r0   r   Útextr?   r@   r   ÚreÚsearchÚgroupÚreplaceÚchildrenrN   rA   r   r   ÚanyÚsplitr   ÚjoinÚjsonÚdumps)rH   r.   rD   r<   rL   Úmeta_trG   Úmeta_dÚrawÚmrV   ÚtxtÚzoomÚ
body_partsÚattachmentsÚchildr   ÚatagÚfnameÚbodyrf   r   s                       @@r   Úparse_detailr€   Y   sè  ù€ Ü�:Ó€AÙØ!ä˜Ÿ™ Ó/€Dð €EØ	�‰�4‹€BÙ	Ø—‘ $�Ó'ˆÙØ—‘˜6¨&°.Ð)A�ÓBˆÙØ—J‘J˜y¨"Ó-ˆEð €HØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙØ�j‰j˜ BÓ'ˆÜ�I‰IÐ6¸Ó<ˆÙØ—w‘w˜q“z×)Ñ)¨#¨sÓ3ˆHÙØ—)‘)˜C¨	�)Ó2ˆÙØ×"Ñ"Ó$ˆCÜ—	‘	ÐOÐQTÓUˆAÙØŸ7™7 1›:×-Ñ-¨c°3Ó7�ð �9‰9�U˜vˆ9Ó&€DØ€JØ€KáØ—]‘]ò 	+ˆEØ�z‰z˜SÓ Ø—n‘n¨4�nÓ0�ÚØ×%Ñ% cÕ*ð		+ð —]‘] 7Ó+ò 	EˆEØ×ÑÔ0°¸
ÓCÕDð	Eð —M‘M #¨D�MÓ1ò 	EˆDØ˜‘<ˆDÜÓmÐ2lÔmÕmØŸ™¨D˜Ó1ÒH°T·Z±ZÀ³_ÀRÑ5H�Ü" :¨tÓ4�Ø×"Ñ"¨E¸(Ñ#CÕDð	Eð —‘˜c¨�Ó-ò EˆØ�F‰|ˆÜÓiÐ.hÔiÕiØ—M‘M¨�MÓ-ÒD°·±¸C³ÀÑ1DˆEÜ˜z¨4Ó0ˆHÜÓA°[ÔAÕAØ×"Ñ"¨E¸(Ñ#CÕDðEð �;‰;�zÓ"€DØ”—‘˜K°eÔ<¸hÈÐMÐMr   c                 ó”  — g }t        | «      D �]6  }|dk(  r
t        dz   }nt        › d|dz   › d�}t        d|dz   › d| › d|› �d	¬
«       t        |«      }|st        dd	¬
«       ŒVt	        |j
                  |«      }|st        dd	¬
«       Œ|t        dt        |«      › d�d	¬
«       |D ]œ  \  }}}t        |«      \  }	}
}}|xs |}|xs |}|	xs d}t        |«      dkD  }|rt        |j                  d«      «      nd}|j                  ||||	|
t        t        ||dœ	«       t        d|d d d›d|d›d|› d|
dk7  rdnd› �d	¬
«       Œž �Œ9 |S )Nr   zindex.shtmlÚindex_r#   z.shtmlz  [rS   z] T©Úflushz    FAILED to fetchz    No items foundz
    Found z itemsr   rg   )	r<   Úpage_urlÚdater   r{   Ú	site_namerl   Ú_has_contentÚ
_seg_countz    é(   Ú40sz | Ú12sz | seg=z
 | attach=rK   ÚYESÚno)r%   ÚBASE_URLÚprintr0   rI   ri   Úlenr€   rp   rA   Ú	SITE_NAMEÚGROUP)Ú	max_pagesÚ	all_itemsÚpage_idxr+   r.   rE   r<   rH   Ú	list_dater   Úattachments_jsonÚdetail_dateÚdetail_titleÚ	use_titleÚuse_dateÚbody_for_checkÚhas_contentÚ	seg_counts                     r   Úcrawlr    Ÿ   s±  € Ø€Iä˜)Ó$ó 'UˆØ�qŠ=Ü˜]Ñ*‰Cä�J˜f X°¡\ N°&Ð9ˆCä��H˜q‘L�>  9 +¨R°¨uÐ5¸TÕBÜ�s‹OˆÙÜÐ'°Õ5Øä  §¡¨Ó-ˆÙÜÐ&¨tÕ4ØÜ�
œ3˜u›:˜, fÐ-°TÕ:à,1ò 	UÑ(ˆE�:˜yÜ@LÈZÓ@XÑ=ˆDÐ" K°Ø$Ò-¨ˆIØ"Ò/ iˆHà!šZ RˆNÜ˜nÓ-°Ñ1ˆKÙ=Kœ˜N×0Ñ0°Ó8Ô9ÐQRˆIà×ÑØ"Ø&Ø ØØ/Ü&ÜØ +Ø'ñ
ô 
ô �D˜ 3 B˜¨Ð,¨C°¸¨~¸WÀYÀKÈzÐcsÐw{Òc{ÑZ_ð  BFð  ZGð  Hð  PTö  Uò+	Uð%'UðR Ðr   c                 ó6  — dd l }|j                  t        d¬«      }|j                  d«       |j	                  «       }d}| D ]5  }|j                  d|d   |d   |d   |d	   |d
   |d   |d   f«       |dz  }Œ7 |j                  «        |j                  «        |S )Nr   é<   r!   zPRAGMA busy_timeout=60000zÎ
            INSERT OR REPLACE INTO gov_raw (title, page_url, site_name, publish_date, content, attachments, date_rank, group_name, script_name) VALUES (?, ?, ?, ?, ?, ?, 0, ?, 'crawl_pzh_gggs.py')
        r<   r…   r‡   r†   r   r{   rl   r#   )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚcommitÚclose)rE   r£   ÚconnÚcÚcountÚitems         r   Úimport_to_dbr®   Î   sµ   € ÛØ�?‰?œ7¨Bˆ?Ó/€DØ‡L�LÐ,Ô-Ø�‰‹€Að
 €EØò ˆØ	�	‰	ð ð �‰MØ�ÑØ�ÑØ�‰LØ�‰LØ�ÑØ�‰Mð
ô
	ð 	�‰
‰ðð 	‡K�K„MØ‡J�J„LØ€Lr   c                  ó  — dd l } | j                  «       }t        }t        t        j                  «      dkD  r2t        j                  d   dk(  rt        t        j                  d   «      }t        dd¬«       t        d|› �d¬«       t        |¬	«      }|st        d
d¬«       y t        |«      }t        d„ |D «       «      }|rt        d„ |D «       «      |z  nd}t        d„ |D «       «      }t        dd¬«       t        d|› �d¬«       t        d|› d||z  dz  d›d�d¬«       t        d|d›�d¬«       t        d|› �d¬«       t        |«      }t        d|› �d¬«       | j                  «       |z
  }	t        d|	d›d�d¬«       y )Nr   r#   z--pagesr$   u2   === panzhihua.gov.cn æ”€æž�èŠ±å¸‚ å…¬å‘Šå…¬ç¤º ===Trƒ   zPages: )r”   zNo items collected!c              3   ó,   K  — | ]  }|d    sŒ	d–— Œ y­w)rˆ   r#   Nre   ©r^   Úis     r   r`   zmain.<locals>.<genexpr>ý   s   è ø€ Ò:˜!¨¨.Ó(9”AÑ:ùs   ‚
�c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r‰   Nre   r±   s     r   r`   zmain.<locals>.<genexpr>þ   s   è ø€ Ò1 a�!�L•/Ñ1ùs   ‚c              3   ó2   K  — | ]  }|d    dk7  sŒd–— Œ y­w)r{   rK   r#   Nre   r±   s     r   r`   zmain.<locals>.<genexpr>ÿ   s   è ø€ ÒC˜A¨!¨MÑ*:¸dÓ*B”aÑCùs   ‚�z
=== Results ===zTotal: zWith body: z (éd   z.1fz%)zAvg segments: zWith attachments: z
Imported: z	Elapsed: Ús)
r)   Ú	MAX_PAGESr‘   ÚsysÚargvÚintr�   r    Úsumr®   )
r)   ÚstartÚmax_prE   ÚtotalÚ	with_bodyÚavg_segÚwith_attachÚimportedÚelapseds
             r   ÚmainrÄ   ë   sf  € ÛØ�I‰I‹K€Eä€EÜ
Œ3�8‰8ƒ}�qÒœSŸX™X a™[¨IÒ5Ü”C—H‘H˜Q‘KÓ ˆä	Ð>ÀtÕLÜ	ˆG�E�7Ð
 4Õ(ä˜EÔ"€EáÜÐ#¨4Õ0Øä�‹J€EÜÑ:˜uÔ:Ó:€IÙ=BŒcÑ1¨5Ô1Ó1°EÒ9È€GÜÑC ÔCÓC€Kä	Ð dÕ+Ü	ˆG�E�7Ð
 4Õ(Ü	ˆK˜	�{ " Y°Ñ%6¸Ñ%<¸SÐ$AÀÐ
DÈDÕQÜ	ˆN˜7 3˜-Ð
(°Õ5Ü	Ð˜{˜mÐ
,°DÕ9ä˜EÓ"€HÜ	ˆJ�x�jÐ
!¨Õ.à�i‰i‹k˜EÑ!€GÜ	ˆI�g˜c�] !Ð
$¨DÖ1r   Ú__main__)r   )r   )Ú__doc__Úrequestsrj   rr   r¸   Úosr   r   Úurllib.parser   r   r�   r’   r“   r·   r¥   ÚheadersÚSessionr&   Úupdater   r0   rI   r€   r    r®   rÄ   Ú__name__re   r   r   ú<module>rÎ      sµ   ðñó Û 	Û Û 
Û 	Ý Ý  Û à8€Ø&€	Ø€Ø€	à
€ðGàOØ0ñ	€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ óóòò.CNðL ó ,ò^ò: 2ðF ˆzÒÙ…Fð r   