Ë
    ¸¬ujN  ã                   ó®   — d 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d	d
ddœZdZdZddddddddœZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u–   
å®�æ³¢å¸‚åŒ—ä»‘åŒº - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·ä¿¡æ�¯å…¬ç¤º
CMS: Hanweb JPAAS
åˆ—è¡¨: JPAAS API -> pageNoå�‚æ•°
è¯¦æƒ…: div.bt-content-news#zoom
é    N)Údatetime)ÚBeautifulSoupzhttps://www.bl.gov.cnzLhttps://www.bl.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitz/root/search.dbzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.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.8z2https://www.bl.gov.cn/col/col1229893313/index.html)z
User-AgentÚAcceptzAccept-LanguageÚRefereru!   å®�æ³¢åŒ—ä»‘åŒºçŽ¯è¯„ä¿¡æ�¯å…¬ç¤ºg      à?ÚbulidstaticÚ3499ÚiIEzq5wa84hjU6xuCoM3qÚcolumnu   æ”¿åŠ¡å…¬å¼€ä¿¡æ�¯åˆ—è¡¨ÚnullÚ
1229893313)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdc                 óú   — t         j                  «       }d| z  }||d<   	 t        j                  t        |t
        dd¬«      }d|_        |j                  «       S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Nz{"pageNo":%d,"pageSize":15}Ú	paramJsoné   F)ÚparamsÚheadersÚtimeoutÚverifyúutf-8z  [ERROR] API failed: )
Ú
API_PARAMSÚcopyÚrequestsÚgetÚAPI_URLÚHEADERSÚencodingÚjsonÚ	ExceptionÚprint)Úpager   Ú
param_jsonÚrÚes        ú/root/gov_crawler/crawl_bl.pyÚget_list_apir+   '   ss   € Ü�_‰_Ó€FØ.°Ñ5€JØ$€Fˆ;ÑðÜ�L‰Lœ¨¼È"ÐUZÔ[ˆØˆŒ
Ø�v‰v‹xˆøÜò ÜÐ& q cÐ*Ô+Üûðús    8A Á	A:Á"A5Á5A:c           	      ó˜  — g }| j                  di «      j                  dd«      }|s|S d}t        j                  ||t        j                  «      }|D ]õ  \  }}}|j	                  d«      s|dv rŒ|s&t        j
                  dd|«      j                  «       }n|j                  «       }|sŒX|j	                  d«      r
t        |z   }	n |j	                  d	«      r|}	nt        dz   |z   }	t        j                  d
||j                  |«      |j                  |«      dz    «      }
|
r|
j                  d«      nd}|j                  ||	|f«       Œ÷ |S )NÚdataÚhtmlÚ z8<a[^>]+href="([^"]+)"[^>]+title="([^"]*)"[^>]*>(.*?)</a>ú#)u   é¦–é¡µu   ä¸Šé¡µu   ä¸‹é¡µu   å°¾é¡µú<[^>]+>ú/Úhttpz)<span[^>]*>\[(\d{4}-\d{2}-\d{2})\]</span>iô  é   )r   ÚreÚfindallÚDOTALLÚ
startswithÚsubÚstripÚBASE_URLÚsearchÚfindÚgroupÚappend)r-   Úitemsr.   ÚpatternÚmatchesÚhrefÚtitle_in_attrÚ	link_textÚtitleÚurlÚ
date_matchÚdate_strs               r*   Úparse_list_from_apirJ   3   s@  € Ø€EØ�8‰8�F˜BÓ×#Ñ# F¨BÓ/€DÙØˆàI€GÜ�j‰j˜ $¬¯	©	Ó2€GØ*1ò -Ñ&ˆˆm˜Yà�?‰?˜3Ô =Ð4\Ñ#\ØÙÜ—F‘F˜: r¨9Ó5×;Ñ;Ó=‰Eà!×'Ñ'Ó)ˆEÙØà�?‰?˜3ÔÜ˜T‘/‰CØ�_‰_˜VÔ$Ø‰Cä˜S‘. 4Ñ'ˆCä—Y‘YÐKÈTÐRV×R[ÑR[Ð\`ÓRaÐbf×bkÑbkÐlpÓbqÐruÑbuÐMvÓwˆ
Ù*4�:×#Ñ# AÔ&¸"ˆØ�‰�e˜S (Ð+Õ,ð)-ð* €Ló    c                 ó¬   — d}| j                  ddd¬«      }|rt        |«      }|s | j                  dd¬«      }|rt        |«      }|j                  «       S )Nr/   Údivzbt-content-newsÚzoom)Úclass_Úid)rP   )r=   Ústrr:   )ÚsoupÚcontentrN   Úzoom2s       r*   Úparse_detailrU   R   sU   € Ø€GØ�9‰9�UÐ#4¸ˆ9Ó@€DÙÜ�d“)ˆÙØ—	‘	˜% F�	Ó+ˆÙÜ˜%“jˆGØ�=‰=‹?ÐrK   c                 óŒ  — d}| j                  dd¬«      }|r|j                  d¬«      }d}| j                  dd¬«      }|rU|j                  d«      }|D ]?  }|j                  d¬«      }t        j                  d	|«      }|sŒ.|j                  d
«      } n d}	| j                  dddi¬«      }
|
r|
j                  dd«      }	|||	fS )Nr/   rM   zbt-news-detail-title)rO   T)r:   ÚcontipÚspanz(\d{4}-\d{1,2}-\d{1,2})r4   ÚmetaÚnameÚContentSource)ÚattrsrS   )r=   Úget_textÚfind_allr5   r<   r>   r   )rR   rF   ÚtrI   rW   ÚspansrX   ÚtxtÚmÚsourceÚmeta_srcs              r*   Úget_metare   ]   sÖ   € Ø€EØ�	‰	�%Ð 6ˆ	Ó7€AÙØ—
‘
 �
Ó&ˆØ€HØ�Y‰Y�u XˆYÓ.€FÙØ—‘ Ó'ˆØò 	ˆDØ—-‘- d�-Ó+ˆCÜ—	‘	Ð4°cÓ:ˆAÚØŸ7™7 1›:�Ùð	ð €FØ�y‰y˜¨°Ð'@ˆyÓA€HÙØ—‘˜i¨Ó,ˆØ�(˜FÐ"Ð"rK   c                  ó,  — t        dt        › d�«       t        j                  t        «      } | j                  «       }d}d}d}dD �]¾  }t        d|› d�«       t        |«      }|s|dz  }Œ&t        |«      }t        dt        |«      › �«       |s �nu|D �]l  \  }}	}
|j                  d	|	f«       |j                  «       r|dz  }Œ1t        j                  t        «       	 t        j                  |	t         d
d¬«      }d|_        t%        |j&                  d«      }t+        |«      }t        t-        j.                  dd|«      j1                  «       «      }|dk  rt        d|› d|d d › �«       |dz  }ŒÝt3        |«      \  }}}|xs |}|s|
}t-        j.                  dd|«      j1                  «       }|d d }	 |j                  dt        |||	||d d |f«       | j5                  «        |dz  }t        d|d d › d|d d › �«       �Œo �ŒÁ | j9                  «        t        d«       t        d|› d|› d|› �«       y # t(        $ r}t        d|› �«       |dz  }Y d }~�ŒÅd }~ww xY w# t(        $ r)}t        d|› �«       | j7                  «        Y d }~�Œúd }~ww xY w) Nú[u   ] å¼€å§‹çˆ¬å�–...r   )r4   u   
--- ç¬¬u   é¡µ ---r4   u     åˆ—è¡¨é¡¹: z)SELECT id FROM gov_raw WHERE page_url = ?r   F)r   r   r   r   zhtml.parserz  [ERROR] Fetch detail: r1   r/   é2   u     è·³è¿‡(æ­£æ–‡å¤ªçŸ­z): é(   éÈ   zÓ
                    INSERT INTO gov_raw (site_name, title, content, page_url, source_url, publish_date, summary, status, date_rank)
                    VALUES (?, ?, ?, ?, ?, ?, ?, 'active', 1)
                é
   z  +1 [z] z  [ERROR] DB insert: u   
=== å®Œæˆ� ===u   æ–°å¢ž: u
   , è·³è¿‡: u
   , é”™è¯¯: )r%   Ú	SITE_NAMEÚsqlite3ÚconnectÚDB_PATHÚcursorr+   rJ   ÚlenÚexecuteÚfetchoneÚtimeÚsleepÚDELAYr   r   r!   r"   r   Útextr$   rU   r5   r9   r:   re   ÚcommitÚrollbackÚclose)ÚconnÚcÚ	total_newÚ
total_skipÚtotal_errorr&   r-   r@   rF   Úpage_urlÚ	list_dater(   Údetail_soupr)   rS   Útext_lenÚdetail_titleÚpub_daterc   Úfinal_titleÚ
clean_textÚsummarys                         r*   Úmainr‰   r   s°  € Ü	ˆAŒiˆ[Ð)Ð
*Ô+Ü�?‰?œ7Ó#€DØ�‰‹€AØ€IØ€JØ€Kð ó 4 ˆÜ�	˜$˜˜wÐ'Ô(Ü˜DÓ!ˆÙØ˜1ÑˆKØÜ# DÓ)ˆÜ�œc %›j˜\Ð*Ô+ÙÚà*/ó )	 Ñ&ˆE�8˜YØ�I‰IÐAÀHÀ;ÔOØ�z‰zŒ|Ø˜a‘�
Øä�J‰J”uÔðÜ—L‘L ´7ÀBÈuÔU�Ø$�”
Ü+¨A¯F©F°MÓB�ô # ;Ó/ˆGÜœ2Ÿ6™6 *¨b°'Ó:×@Ñ@ÓBÓCˆHØ˜"Š}ÜÐ-¨h¨Z°s¸5ÀÀ"¸:¸,ÐGÔHØ˜a‘�
Øä-5°kÓ-BÑ*ˆL˜( FØ&Ò/¨%ˆKÙØ$�äŸ™ 
¨B°Ó8×>Ñ>Ó@ˆJØ   #Ð&ˆGð
 Ø—	‘	ð ô   ¨g°xÀÈÐRUÐSUÈÐX_Ð`ôbð —‘”Ø˜Q‘�	Ü˜˜x¨¨˜}˜o¨R°¸C¸RÐ0@Ð/AÐBÖCòM)	 ð4 ðl 	‡J�J„LÜ	ÐÔÜ	ˆH�Y�K˜z¨*¨°ZÀ¸}Ð
MÕNøôE ò ÜÐ0°°Ð4Ô5Ø˜qÑ �Ýûðûô8 ò  ÜÐ-¨a¨SÐ1Ô2Ø—‘—’ûð ús1   Ã:H7Æ5AI!È7	IÉ IÉIÉ!	JÉ*JÊJÚ__main__)Ú__doc__r   rm   r5   rt   r   Úbs4r   r;   r    ro   r!   rl   rv   r   r+   rJ   rU   re   r‰   Ú__name__© rK   r*   ú<module>r�      s�   ðñó Û Û 	Û Ý Ý à"€Ø
X€Ø
€ð DØOØ0ØCñ	€ð 0€	Ø€ð ØØ'ØØ'ØØñ€
ò
òò>	ò#ò*AOðF ˆzÒÙ…Fð rK   