Ë
    G«£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Z	dZ
e
dz   ZdZdZdZd	Zd
diZ ej"                  «       Zej&                  j)                  e«       dd„Zd„ Zdd„Zd„ Zd„ Zdd„Zedk(  rbddlZ ej:                  «       Zej?                  de d¬«       ejC                  «       Z" ee"jF                  ¬«      \  Z$Z% e&de› de$› de%› d�«       yy)u{   
crawl_linqing_bmdt.py - ä¸´æ¸…å¸‚äººæ°‘æ”¿åºœ-éƒ¨é—¨åŠ¨æ€�(çŽ¯è¯„å…¬ç¤º)
ä¸´æ¸…å¸‚æ”¿åºœé—¨æˆ·ç½‘ç«™ - ç»„ä»¶åŒ–CMSç³»ç»Ÿ
é    N©ÚBeautifulSoupzhttp://www.linqing.gov.cnz/channel_t_269_15189/z120.224.28.134z/root/search.dbu"   ä¸´æ¸…å¸‚äººæ°‘æ”¿åºœ-éƒ¨é—¨åŠ¨æ€�g      à?z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 óÄ   — | j                  dt        «      }ddi}	 t        j                  |||d¬«      }d|_        |S # t
        $ r}t        d|› �«       Y d }~y d }~ww xY w)Nzwww.linqing.gov.cnÚHosté   )ÚheadersÚparamsÚtimeoutzutf-8z  [NET ERR] )ÚreplaceÚCDN_IPÚsessionÚgetÚencodingÚ	ExceptionÚprint)Úurlr	   Úreal_urlr   ÚrespÚes         úcrawl_linqing_bmdt.pyÚget_pager      sg   € Ø�{‰{Ð/´Ó8€HØÐ+Ð,€GðÜ�{‰{˜8¨W¸VÈRˆ{ÓPˆØˆŒØˆøÜò Ü�˜Q˜CÐ Ô!Üûðús   œ!> ¾	AÁAÁAc                 óè  — g }t        j                  d| «      D ]Ö  }|j                  d«      j                  «       }|j                  d«      }| |j	                  «       |j	                  «       dz    }t        j
                  d|«      }|r|j                  d«      nd}|j                  d«      r
t        |z   }n%|j                  d«      rd	|vrŒ³|}nt        dz   |z   }|j                  |||d
œ«       ŒØ |S )NzB<a[^>]*title="([^"]*)"[^>]*href="([^"]*doc_[a-f0-9]+\.html)"[^>]*>é   é   iô  u%   å�‘å¸ƒæ—¶é—´[ï¼š:](\d{4}-\d{2}-\d{2})Ú ú/Úhttpúlinqing.gov.cn)Útitler   Údate)	ÚreÚfinditerÚgroupÚstripÚstartÚsearchÚ
startswithÚBASE_URLÚappend)	ÚhtmlÚitemsÚmr   ÚhrefÚctxÚdate_mÚdate_strr   s	            r   Ú
parse_listr1   )   sã   € Ø€EÜ�[‰[ØMØóò Eˆð —‘˜“
× Ñ Ó"ˆØ�w‰w�q‹zˆØ�1—7‘7“9˜qŸw™w›y¨3™Ð/ˆÜ—‘ÐCÀSÓIˆÙ&,�6—<‘< ”?°"ˆØ�?‰?˜3ÔÜ˜T‘/‰CØ�_‰_˜VÔ$Ø tÑ+ØØ‰Cä˜S‘. 4Ñ'ˆCØ�‰˜u¨S¸(ÑCÕDð#Eð$ €Ló    c                 óØ  — 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   zhtml.parserÚar-   r   )r   Ú
javascriptú#ÚimgÚsrc)r   z//zdata:)	Úbs4r   ÚstrÚfind_allr   r'   ÚurllibÚparseÚurljoin)ÚtableÚbase_urlr   Útblr4   r-   r7   r8   s           r   Úhtml_table_to_htmlrB   @   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€Or2   c                 ó   — ddddœ}t        j                  d| «      }|r"|j                  d«      j                  «       |d<   t        j                  d| «      }|rJ|j                  d«      j                  «       }t        j                  d|«      }|r|j                  «       |d<   t        j                  d	| t         j                  «      }|s|S |j                  d«      }g }d
}	|	t        |«      k  �r<t        j                  d||	d  t         j                  «      }
|
r²t        j                  dd|
j                  d«      «      j                  «       }t        j                  dd|«      j                  «       }|j                  dd«      j                  dd«      j                  dd«      }|r|j                  |«       |	|
j                  «       z  }	Œët        j                  d||	d  t         j                  «      }|rU|j                  d«      }|j                  d«      s	t        |z   }|j                  d|› d�«       |	|j                  «       z  }	�Œjt        j                  d||	d  t         j                  «      }|rBt        |j                  d
«      «      }|r|j                  |«       |	|j                  «       z  }	�ŒÖt        j                  d||	d  «      }|r|	|j                  «       z  }	�Œt        j                  d||	d  «      }|r|	|j                  «       z  }	�Œ6|	dz  }	|	t        |«      k  r�Œ<dj                  |«      j                  «       |d<   |S )Nr   )r   r    Úcontentz/<meta\s+name="ArticleTitle"\s+content="([^"]*)"r   r   z*<meta\s+name="PubDate"\s+content="([^"]*)"z\d{4}-\d{2}-\d{2}r    z/<div\s+class="Details_content"[^>]*>(.*?)</div>r   z<p[^>]*>(.*?)</p>z<[^>]+>z\s+ú z&nbsp;z&mdash;u   â€”z&amp;ú&z<img[^>]*src="([^"]+)"[^>]*>r   u
   ![å›¾ç‰‡](ú)z<table[^>]*>(.*?)</table>z

rD   )r!   r&   r#   r$   ÚDOTALLÚlenÚmatchÚsubr   r)   Úendr'   r(   rB   Újoin)r*   ÚresultÚm_titleÚm_dateÚrawÚdmÚ	m_contentÚcontent_htmlÚpartsÚposÚp_matchÚp_textÚ	img_matchr8   Útable_matchÚmd_tableÚ	tag_matchÚws_matchs                     r   Úparse_detailr^   O   sã  € Ø 2°"Ñ5€FÜ�i‰iÐJÈDÓQ€GÙØ!Ÿ-™-¨Ó*×0Ñ0Ó2ˆˆw‰Ü�Y‰YÐDÀdÓK€FÙØ�l‰l˜1‹o×#Ñ#Ó%ˆÜ�Y‰YÐ+¨SÓ1ˆÙØŸX™X›ZˆF�6‰NÜ—	‘	Ø:¸DÄ"Ç)Á)ó€Iñ ØˆØ—?‘? 1Ó%€LØ€EØ
€CØ
”�LÓ!Ó
!Ü—(‘(Ð/°¸c¸dÐ1CÄRÇYÁYÓOˆÙÜ—V‘V˜J¨¨G¯M©M¸!Ó,<Ó=×CÑCÓEˆFÜ—V‘V˜F C¨Ó0×6Ñ6Ó8ˆFØ—^‘^ H¨cÓ2×:Ñ:¸9ÀeÓL×TÑTÐU\Ð^aÓbˆFÙØ—‘˜VÔ$Ø�7—;‘;“=Ñ ˆCØÜ—H‘HÐ<¸lÈ3È4Ð>PÔRT×R[ÑR[Ó\ˆ	ÙØ—/‘/ !Ó$ˆCØ—>‘> &Ô)Ü ‘n�Ø�L‰L˜: c U¨!Ð,Ô-Ø�9—=‘=“?Ñ"ˆCÙÜ—h‘hØ(¨,°s°tÐ*<¼b¿i¹ió
ˆñ Ü)¨+×*;Ñ*;¸AÓ*>Ó?ˆHÙØ—‘˜XÔ&Ø�;—?‘?Ó$Ñ$ˆCÙÜ—H‘H˜Z¨°c°dÐ);Ó<ˆ	ÙØ�9—=‘=“?Ñ"ˆCÙÜ—8‘8˜F L°°Ð$6Ó7ˆÙØ�8—<‘<“>Ñ!ˆCÙØˆq‰ˆðG ”�LÓ!Ô
!ðH Ÿ™ EÓ*×0Ñ0Ó2€Fˆ9ÑØ€Mr2   c                 ó¶  — t        j                  t        «      }|j                  «       }	 |j	                  d| t
        f«       |j                  «       r|j                  «        y|d d }d|v rdnd}|j	                  d| ||t
        |d||f«       |j                  «        |j                  «        y	# t        $ r}|j                  «        d
|› �cY d }~S d }~ww xY w)Nz7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?ÚskipéÈ   z| ---r   r   z«INSERT OR REPLACE INTO gov_raw
            (page_url, title, publish_date, site_name, content, attachments, summary, has_table)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)r   Únewzerror:)
Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚfetchoneÚcloseÚcommitr   )	r   r   r    rD   ÚconnÚcÚsummaryÚ	has_tabler   s	            r   Ú
save_to_dbrp   Š   sÊ   € Ü�?‰?œ7Ó#€DØ�‰‹€AðØ	�	‰	ØEØ”)Ðô	
ð �:‰:Œ<Ø�J‰JŒLØØ˜$˜3�-ˆØ  GÑ+‘A°ˆ	Ø	�	‰	ð/ð �%˜œy¨'°2°wÀ	ÐJô		
ð 	�‰ŒØ�
‰
ŒØøÜò Ø�
‰
ŒØ˜�sˆ|Õûðús$   «8B0 Á$AB0 Â0	CÂ9CÃCÃCr   c                 ój  — d}d}t        d«       t        t        «      }|�|j                  dk7  rt        d«       ||fS t	        |j
                  «      }t        dt        |«      › d�«       |D �]?  }d|d   vrŒt        |d   «      }|�|j                  dk7  rt        d	|d
   d d › �«       |dz  }ŒEt        |j
                  «      }|j                  dd«      }|st        d|d
   d d › �«       |dz  }Œˆ|j                  d
«      xs |d
   }	|j                  d«      xs |j                  dd«      }
t        |d   |	|
|«      }|dk(  r|dz  }t        d|	d d › �«       n5|dk(  r|dz  }t        d|	d d › �«       n|dz  }t        d|	d d › d|› �«       t        j                  t        «       �ŒB ||fS )Nr   z[LIST] Fetching page...ra   z[WARN] List page failedz[LIST] z items foundr   r   z  [FAIL] HTTP ?: r   é2   r   rD   r   z
  [EMPTY] r    rb   z  [OK] é<   r`   z	  [SKIP] z  [ERR] z - )r   r   ÚLIST_URLÚstatus_coder1   ÚtextrI   r^   r   rp   ÚtimeÚsleepÚSLEEP)ÚpagesÚ	total_newÚ
total_skipr   r+   ÚitemÚresp2ÚdetailrD   r   r    rN   s               r   Úcrawlr€   ¥   sç  € Ø€IØ€JÜ	Ð#Ô%Ü”HÓ€DØ€|�t×'Ñ'¨3Ò.ÜÐ'Ô)Ø˜*Ð$Ð$Ü�t—y‘yÓ!€EÜ	ˆG”C˜“J�<˜|Ð
,Ô-Øó ˆØ 4¨¡;Ñ.ØÜ˜˜e™Ó%ˆØˆ=˜E×-Ñ-°Ò4ÜÐ% d¨7¡m°C°RÐ&8Ð%9Ð:Ô;Ø˜!‰OˆJØÜ˜eŸj™jÓ)ˆØ—*‘*˜Y¨Ó+ˆÙÜ�J˜t G™}¨S¨bÐ1Ð2Ð3Ô4Ø˜!‰OˆJØØ—
‘
˜7Ó#Ò4 t¨G¡}ˆØ�z‰z˜&Ó!Ò9 T§X¡X¨f°bÓ%9ˆÜ˜D ™K¨°°gÓ>ˆØ�UŠ?Ø˜‰NˆIÜ�G˜E # 2˜J˜<Ð(Õ)Ø�vÒØ˜!‰OˆJÜ�I˜e C R˜j˜\Ð*Õ+à˜!‰OˆJÜ�H˜U 3 B˜Z˜L¨¨F¨8Ð4Ô5Ü�
‰
”5Öð5ð6 �jÐ Ð r2   Ú__main__z--pages)ÚtypeÚdefault)rz   z

[RESULT] z: z new, z skip)N)r   )r   )'Ú__doc__Úrequestsr9   r   r!   rc   Úsysrw   Úurllib.parser<   r(   rt   r   re   rh   ry   ÚHEADERSÚSessionr   r   Úupdater   r1   rB   r^   rp   r€   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsrz   rb   r`   r   © r2   r   ú<module>r”      s  ðñó Ý Û 	Û Û 
Û Û à&€ØÐ-Ñ-€Ø	€Ø
€Ø0€	Ø€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ó	òó.ò8òvó6%!ðP ˆzÒÛØ$ˆX×$Ñ$Ó&€FØ
×Ñ˜	¨°QÐÔ7Ø×ÑÓ€DÙ˜DŸJ™JÔ'�I€CˆÙ	ˆK˜	�{ " S E¨°¨v°UÐ
;Õ<ð r2   