Ë
    ¸¬uj,  ã                   óî   — 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ej                  j                  j                  «        dZddiZd	Zd
Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u'   çŽ¯åŽ¿-é‡�å¤§é¡¹ç›® çˆ¬è™« (Hanweb CMS)é    N)ÚBeautifulSoup)ÚurljoinFzhttps://www.huanxian.gov.cnz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36z/root/search.dbu   çŽ¯åŽ¿_é‡�å¤§é¡¹ç›®c                 ó.   — | sy| j                  dd¬«      S )NÚ ú T)Ú	separatorÚstrip)Úget_text)Úsoups    ú#/root/gov_crawler/crawl_huanxian.pyÚget_text_safer      s   € Ù˜Ø�=‰= 3¨dˆ=Ó3Ð3ó    c                 ó¶  — t        | d«      }|j                  dd¬«      }|sdg fS g }|j                  dd¬«      D ]L  }|d	   }t        j                  d
|t        j
                  «      sŒ.|j                  t        t        |«      «       ŒN g }|j                  d«      D ](  }|j                  d¬«      }|sŒ|j                  |«       Œ* dj                  |«      |fS )Núhtml.parserÚdivÚconTxt©Úclass_r   ÚaT)Úhrefr   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$Úp)r	   z

)r   ÚfindÚfind_allÚreÚsearchÚIÚappendr   ÚBASEr
   Újoin)	Úhtmlr   ÚconÚattachmentsr   ÚhÚ
paragraphsr   Útxts	            r   Úextract_contentr&      sÖ   € Ü˜˜}Ó-€DØ
�)‰)�E (ˆ)Ó
+€CÙØ�2ˆvˆØ€KØ�\‰\˜# Dˆ\Ó)ò 1ˆØˆf‰IˆÜ�9‰9Ð:¸A¼r¿t¹tÕDØ×Ñœw¤t¨QÓ/Õ0ð1ð €JØ�\‰\˜#Óò #ˆØ�j‰j˜tˆjÓ$ˆÚØ×Ñ˜cÕ"ð#ð �;‰;�zÓ" KÐ/Ð/r   c                 ó4  — 	 t        j                  | t        t        d¬«      }d|_        t        |j                  d«      }|j                  d	d
¬«      }|sg S g }|j                  dd¬«      D ]~  }|j                  d«      }|r|j                  d«      sŒ(t        |«      }|sŒ6t        t        |d   «      }	|j                  dd¬«      }
|
rt        |
«      nd}|j                  ||	|f«       Œ€ |S # t
        $ r}t        d| › d|› �d¬«       g cY d }~S d }~ww xY w)Né   ©ÚheadersÚverifyÚtimeoutúutf-8z[ERROR] Fetch z: T©Úflushr   ÚulÚinfoListr   ÚliF)Ú	recursiver   r   ÚspanÚdater   )ÚrequestsÚgetÚHEADERSÚVERIFYÚencodingÚ	ExceptionÚprintr   Útextr   r   r   r   r   r   )ÚurlÚrÚer   r0   Úitemsr2   r   Útitler   Ú	date_spanr5   s               r   Úparse_list_pagerD   #   s  € ðÜ�L‰L˜¤g´fÀbÔIˆØˆŒ
ô ˜Ÿ™ Ó/€DØ	�‰�4 
ˆÓ	+€BÙØˆ	Ø€EØ�k‰k˜$¨%ˆkÓ0ò 
*ˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØÜ˜aÓ ˆÙØÜ”t˜Q˜v™YÓ'ˆØ—G‘G˜F¨6�GÓ2ˆ	Ù+4Œ}˜YÔ'¸"ˆØ�‰�e˜T 4Ð(Õ)ð
*ð €Løô' ò Ü�˜s˜e 2 a SÐ)°Õ6Ø�	ûðús   ‚(C/ Ã/	DÃ8DÄDÄDc                  óì   — t        j                  t        «      } | j                  «       }t	        «       }|j                  dt        f«      D ]  }|j                  |d   «       Œ | j                  «        |S )Nz.SELECT page_url FROM gov_raw WHERE site_name=?r   )	Úsqlite3ÚconnectÚDBÚcursorÚsetÚexecuteÚ	SITE_NAMEÚaddÚclose)ÚconnÚcÚurlsÚrows       r   Úget_existing_urlsrS   <   s]   € Ü�?‰?œ2Ó€DØ�‰‹€AÜ‹5€DØ�y‰yÐIÌIÈ<ÓXò ˆØ�‰��Q‘Õðà‡J�J„LØ€Kr   c           
      ó¢  — | syt        j                  t        «      }|j                  «       }d}| D ]U  }	 |j	                  d|d   |d   |d   |d   d d |d   t
        f«       |j                  dkD  r|j                  «        |dz  }ŒW |j                  «        |S # t        $ r*}t        d	|› �d
¬«       |j                  «        Y d }~Œ˜d }~ww xY w)Nr   zoINSERT OR IGNORE INTO gov_raw (title, page_url, content, summary, publish_date, site_name) VALUES (?,?,?,?,?,?)rB   r>   Úcontentiô  Úpub_dateé   z[DB ERROR] Tr.   )rF   rG   rH   rI   rK   rL   ÚrowcountÚcommitr;   r<   ÚrollbackrN   )rA   rO   rP   ÚsavedÚitemr@   s         r   Ú
save_batchr]   E   sÙ   € ÙØÜ�?‰?œ2Ó€DØ�‰‹€AØ€EØò ˆð
	Ø�I‰Ið BØ�g‘  U¡¨T°)©_¸dÀ9¹oÈdÈsÐ>SÐUYÐZdÑUeÔgpÐqôð �z‰z˜AŠ~Ø—‘”Ø˜‘
�øðð 	‡J�J„LØ€Løô	 ò 	Ü�K ˜sÐ#¨4Õ0Ø�M‰M�O‰Oûð	ús   µABÂ	CÂ$ C	Ã	Cc                  ó`  — t        «       } t        dt        | «      › d�d¬«       d}g }d}t        d|dz   «      D �]Œ  }|dk(  r
t        › d�}nt        › d	|› �}t        d
|› d|› d�d¬«       t        |«      }|st        d|› d�d¬«        �n=t        dt        |«      › d�d¬«       t        |d«      D ]Ø  \  }\  }}	}
|	| v rŒ	 t        j                  |	t        t        d¬«      }d|_        t        |j                  «      \  }}|st        d|d d › �d¬«       Œf|j                  ||	|
||rdj!                  |«      nddœ«       t        |«      dk\  r&t#        |«      }||z  }t        d|› d|› d�d¬«       g }t%        j&                  d«       ŒÚ |rt#        |«      }||z  }g }t        d|› �d¬«       t%        j&                  d «       �Œ� |rt#        |«      }||z  }t        t        «       «      }t        d!|› d"|› �d¬«       y # t        $ r!}t        d|d d › d|› �d¬«       Y d }~�Œud }~ww xY w)#Nz[START] Already have z items in DBTr.   é;   r   rW   z/zwgk/fdzdgknr/zdxmz/zwgk/fdzdgknr/zdxm_z[PAGE ú/ú]z  Empty page z
, stoppingz  z items on pager(   r)   r-   z	  [SKIP] é(   z - z  [SKIP] No content: ú
r   )rB   r>   rV   rU   r"   z  >> Saved z (cumulative: ú)gš™™™™™É?z  [PAGE DONE] Cumulative new: g      à?z[DONE] New this run: z, Total in DB: )rS   r<   ÚlenÚranger   rD   Ú	enumerater6   r7   r8   r9   r:   r;   r&   r=   r   r   r]   ÚtimeÚsleep)Úexisting_urlsÚtotal_pagesÚbatchÚ	total_newÚpager>   rA   ÚirB   Ú
detail_urlr5   r?   r@   rU   r"   r[   Úfinal_counts                    r   Úmainrr   Z   so  € Ü%Ó'€MÜ	Ð!¤# mÓ"4Ð!5°\Ð
BÈ$ÕOà€KØ€EØ€Iä�a˜ q™Ó)ó 5ˆØ�1Š9Ü�FÐ-Ð.‰Cä�FÐ.¨t¨fÐ5ˆCä��t�f˜A˜k˜]¨!Ð,°DÕ9Ü Ó$ˆÙÜ�M $  zÐ2¸$Õ?Úä�”3�u“:�,˜nÐ-°TÕ:ä,5°e¸QÓ,?ò 	Ñ(ˆAÑ(��z 4Ø˜]Ñ*ØðÜ—L‘L ´WÄVÐUWÔX�Ø$�”
ô
 $3°1·6±6Ó#:Ñ ˆG�[ÙÜÐ-¨e°C°R¨j¨\Ð:À$ÕGØà�L‰LØØ!Ø Ø"Ù9D˜tŸy™y¨Ô5È"ñô ô �5‹z˜RÒÜ" 5Ó)�Ø˜UÑ"�	Ü˜ E 7¨.¸¸À1ÐEÈTÕRØ�ä�J‰J�s�Oð=	ñB Ü˜uÓ%ˆEØ˜ÑˆIØˆEäÐ.¨y¨kÐ:À$ÕGÜ�
‰
�3Žðk5ñn Ü˜5Ó!ˆØ�UÑˆ	äÔ'Ó)Ó*€KÜ	Ð! ) ¨O¸K¸=Ð
IÐQUÖVøôO ò Ü˜	 %¨¨ * ¨S°°Ð4¸DÕAÝûðús   Ã(HÈ	H-ÈH(È(H-Ú__main__)Ú__doc__r6   r   rF   ÚsysÚosrh   Úbs4r   Úurllib.parser   r9   ÚpackagesÚurllib3Údisable_warningsr   r8   rH   rL   r   r&   rD   rS   r]   rr   Ú__name__© r   r   ú<module>r~      s‰   ðá -ß +× +× +Ý Ý  à	€Ø × Ñ × Ñ × *Ñ *Ô ,Ø$€Øð  Kð  L€Ø€Ø!€	ò4ò0ò"ò2òò*DWðL ˆzÒÙ…Fð r   