Ë
    ¸¬uj  ã                   óx  — 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Z	dZ
dZedz   Zd	d
iZddlZ ej                  «       Zej#                  dedd¬«       ej#                  ddd¬«       ej'                  «       Zej*                  dkD  rej*                  ndZd„ Zd„ Zd„ Zd„ Zg Z e«       Z ed«        ededz   «      D ]‰  Z ee«      Z e € n} ee «      \  Z!Z"e!sedkD  r ni ede› d�«       Œ0dZ#e!D ]4  Z$e$d   ev rŒejK                  e$d   «       ejM                  e$«       e#dz  Z#Œ6  ede› de#› d e'e«      › d�«       e#dk(  sŒ‰ n  e(d e'e«      › d �«       es e(d!«        ejR                  d«       ejT                  jW                  dejT                  jY                  ejT                  j[                  e.«      «      «       	 dd"l/m0Z0m1Z1  e(d% e'e«      › d&�«       g Z4 e5e«      D ]²  \  Z6Z$ ed'e6dz   › d( e'e«      › d)e$d   d*d › d+�«        ee$d   «      \  Z7Z8Z9e$d,   Z:dZ;e:r.	  ejx                  e:dd- d.«      Z= ee=j}                  d/«      «      Z;d0e8v r ee8d1«      j                  d2¬3«      ne8dd4 Z@e4jM                  e7e$d   e8e:e;e@e$d   e9e$d   d5œ	«       Œ´  e(d6 e'e4«      › d7�«        e0e4e
«      \  ZAZB e(d8eA› d9eB› �«        e1«       ZCeCj‰                  d:e
f«      j‹                  «       d   ZFeCj�                  «         e(d;e
› d<eF› d �«       y# e2$ r ddl3Z3d#„ Z0d$„ Z1Y �ŒZw xY w#  Y ŒÙxY w)=u©   
é¾™å�—ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº - è¡Œæ”¿å®¡æ‰¹å…¬ç¤ºå…¬å‘Š
URL: https://lnjkq.ganzhou.gov.cn/lnjkq/xzspgsgg/list.shtml
CMS: TRS with createPageHTML, detail: div.TRS_Editor
é    N)ÚBeautifulSoup)Údatetimez/root/search.dbu(   é¾™å�—ç»�å¼€åŒº-è¡Œæ”¿å®¡æ‰¹å…¬ç¤ºå…¬å‘Šzhttps://lnjkq.ganzhou.gov.cnz/lnjkq/xzspgsgg/list.shtmlz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z--pageszPages to crawl (0 = all))ÚtypeÚdefaultÚhelpz	--verbosez-vÚ
store_true)Úactionéc   c                 óŠ   — t         j                  r3t        dt        j                  «       j                  d«      › d| › �«       y y )Nú[z%H:%M:%Sú] )ÚargsÚverboseÚprintr   ÚnowÚstrftime)Úmsgs    ú)/root/gov_crawler/crawl_lnjkq_xzspgsgg.pyÚlogr      s5   € Ü‡|‚|Ü�”(—,‘,“.×)Ñ)¨*Ó5Ð6°b¸¸Ð>Õ?ð ó    c                 ó6  — | dk(  rt         }nt        › d| › d�}	 t        j                  |t        d¬«      }d|_        |j                  dk7  rt        d| › d	|j                  › �«       y |j                  S # t        $ r}t        d
| › d|› �«       Y d }~y d }~ww xY w)Né   z/lnjkq/xzspgsgg/list_z.shtmlé   ©ÚheadersÚtimeoutúutf-8éÈ   zPage z
 returned zError page ú: )
ÚLIST_URLÚBASE_URLÚrequestsÚgetÚHEADERSÚencodingÚstatus_coder   ÚtextÚ	Exception)Úpage_numÚurlÚrÚes       r   Ú
fetch_pager-   !   s˜   € Ø�1‚}Ü‰ä�
Ð/°¨z¸Ð@ˆð	Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒÜ�%˜�z ¨A¯M©M¨?Ð;Ô<ØØ�v‰vˆøÜò Üˆk˜(˜ 2 a SÐ)Ô*Üûðús   šAA4 Á(A4 Á4	BÁ=BÂBc                 óˆ  — t        | d«      }|j                  dd¬«      }|sg dfS g }|j                  d«      D ]„  }|j                  d«      }|sŒ|j                  dd	«      }|rd
|vrŒ0|j	                  d«      r	t
        |z   }|j                  d«      }|r|j                  d¬«      nd	}|j                  ||dœ«       Œ† |dfS )zNParse list page, return list of {title_from_detail will be filled, href, date}úhtml.parserÚulÚlist_newsrl©Úclass_r   ÚliÚaÚhrefÚ Úxzspgsggú/ÚspanT©Ústrip)r6   Údate)r   ÚfindÚfind_allr#   Ú
startswithr!   Úget_textÚappend)	ÚhtmlÚsoupr0   Úitemsr4   r5   r6   r:   r=   s	            r   Ú
parse_listrF   1   sË   € ä˜˜}Ó-€DØ	�‰�4 ˆÓ	.€BÙØ�1ˆuˆØ€EØ�k‰k˜$Óò 3ˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆÙ�z¨Ñ-ØØ�?‰?˜3ÔÜ˜d‘?ˆDØ�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜d¨DÑ1Õ2ð3ð �!ˆ8€Or   c                 óˆ  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry	 t        |j                  d«      }|j                  ddd	i¬
«      }|r|d   j                  «       nd}d}|j                  dd¬«      }|rÚg }|j                  D ]·  }t        |d«      sŒ|j                  dk(  r|j                  t        |«      «       Œ:|j                  dv r6|j                  d¬«      }	|	sŒ]t        |	«      dkD  sŒl|j                  |	«       Œ~|j                  dk(  sŒŽ|j                  dd«      }
|
sŒ£|j                  d|
› d�«       Œ¹ dj!                  |«      }n(|j                  dd¬«      }|r|j                  dd¬«      }t#        j$                  dd|«      j                  «       }g }|j'                  dd¬«      D ]Õ  }|d    }t(        j*                  j-                  |«      d!   j/                  «       }|d"v sŒ=|j1                  d#«      r
t2        |z   }n,|j1                  d$«      st2        d#z   |j5                  d#«      z   }|j                  d¬«      xs t(        j*                  j7                  |«      }|j                  ||d%œ«       |d&|› d'|› �z  }Œ× ||t9        j:                  |d(¬)«      fS #  Y yxY w)*Né   r   r   r   )Nr7   r7   r/   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr7   ÚdivÚ
TRS_Editorr2   Útable)ÚprN   Tr;   é   ÚimgÚsrcz	![image](ú)z

ú
)Ú	separatorr<   z[ \t]+ú r5   )r6   r6   r   )z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarr9   Úhttp)rJ   r*   u
   
[é™„ä»¶] r   F)Úensure_ascii)r"   r#   r$   r%   r&   r   r'   r>   r<   ÚchildrenÚhasattrrJ   rB   ÚstrrA   ÚlenÚjoinÚreÚsubr?   ÚosÚpathÚsplitextÚlowerr@   r!   ÚlstripÚbasenameÚjsonÚdumps)r*   r+   rD   rI   ÚtitlerM   ÚeditorÚpartsÚchildÚtxtrT   ÚcdivÚattachmentsÚa_tagÚhÚextrJ   s                    r   Úfetch_detailrt   G   s�  € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØð  ô
 ˜Ÿ™ Ó/€Dð �9‰9�V F¨NÐ#;ˆ9Ó<€DÙ'+ˆD�‰O×!Ñ!Ô#°€Eð €GØ�Y‰Y�u \ˆYÓ2€FÙØˆØ—_‘_ò 	5ˆEÜ˜5 &Ô)ØØ�z‰z˜WÒ$Ø—‘œS ›ZÕ(Ø—‘˜|Ñ+Ø—n‘n¨4�nÓ0�Úœ3˜s›8 a›<Ø—L‘L Õ%Ø—‘˜uÓ$Ø—i‘i  rÓ*�ÚØ—L‘L 9¨S¨E°Ð!3Õ4ð	5ð —+‘+˜eÓ$‰ð �y‰y˜ yˆyÓ1ˆÙØ—m‘m¨d¸$�mÓ?ˆGä�f‰f�Y  WÓ-×3Ñ3Ó5€Gð €KØ—‘˜s¨�Ó.ò 
1ˆØ�&‰MˆÜ�g‰g×Ñ˜qÓ! !Ñ$×*Ñ*Ó,ˆØÐLÒLØ�|‰|˜CÔ Ü˜q‘L‘Ø—\‘\ &Ô)Ü˜s‘N Q§X¡X¨c£]Ñ2�Ø—>‘>¨�>Ó-ÒD´·±×1AÑ1AÀ!Ó1DˆDØ×Ñ¨°QÑ7Ô8Ø˜ T F¨"¨Q¨CÐ0Ñ0‰Gð
1ð �'œ4Ÿ:™: kÀÔFÐFÐFøðeÙús   ‚2J= Ê=KzFetching list pages...r   z  Page z: empty, skippingr6   z: +z	 (total: rU   u   
åˆ—è¡¨å�ˆè®¡: u    æ�¡zNo items to process.)Úpush_to_searchdbÚget_connectionc                 ó–  — t        j                  t        d¬«      }|j                  d«       |j                  d«       |j	                  «       }dx}}| D ]Ä  }	 |j                  d||j                  dd«      |j                  dd«      |j                  d	d«      |j                  d
d«      |j                  dd«      |j                  dd«      |j                  dd«      |j                  dd«      f	«       |j                  r|j                  dkD  r|dz  }n|dz  }ŒÆ |j                  «        |j                  «        ||fS #  |dz  }Y ŒôxY w)Nr   ©r   úPRAGMA journal_mode=WALúPRAGMA busy_timeout=30000r   zÂINSERT OR IGNORE INTO gov_raw 
                    (site_name, source_url, page_url, title, publish_date, date_rank, summary, content, attachments)
                    VALUES (?,?,?,?,?,?,?,?,?)r*   r7   rj   Úpub_dateÚ	date_rankÚsummaryrM   rp   z[]r   )	Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorr#   Ú	lastrowidÚcommitÚclose)rE   Ú	site_nameÚconnÚcÚnewÚskipÚitems          r   ru   ru   §   s/  € Ü�‰œw°Ô3ˆØ�‰Ð.Ô/Ø�‰Ð0Ô1Ø�K‰K‹MˆØˆˆˆdØò 	ˆDðØ—	‘	ð2ð  §¡¨¨rÓ 2°D·H±H¸UÀ2Ó4FØ—X‘X˜g bÓ)¨4¯8©8°J¸rÓ+BØ—X‘X˜k¨!Ó,¨d¯h©h°yÀÓ.DØ—X‘X˜i¨Ó+¨T¯X©X°mÀDÓ-IðKô	ð —;’; 1§;¡;°¢?Ø˜1‘H‘Cà˜A‘I�Døð	ð" 	�‰ŒØ�
‰
ŒØ�DˆyÐøð	Ø˜‘	’ús   ÁCD?Ä?Ec                  ó€   — t        j                  t        d¬«      } | j                  d«       | j                  d«       | S )Nr   rx   ry   rz   )r~   r   r€   r�   )r‡   s    r   rv   rv   Á   s1   € Ü�‰œw°Ô3ˆØ�‰Ð.Ô/Ø�‰Ð0Ô1Øˆr   u   å…± u    æ�¡ï¼Œå¼€å§‹æŠ“å�–è¯¦æƒ…...z  [r9   r   iØÿÿÿz...r=   é
   z%Y-%m-%dz%Y%m%dú<r/   Tr;   iô  )	rj   r*   rM   r{   r|   r}   Ú
source_urlrp   Úpage_urlu   
å…¥åº“ä¸­ (u    æ�¡)...u   å…¥åº“å®Œæˆ�: new=z, skip=z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?u   DBä¸­ u    å…± )HÚ__doc__r"   r`   Úsysrb   rh   Úbs4r   r   r€   Ú	SITE_NAMEr!   r    r$   ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsr   ÚpagesÚ	MAX_PAGESr   r-   rF   rt   Ú	all_itemsÚsetÚ
seen_hrefsÚranger)   rC   rE   Ú_Ú	new_countr‹   ÚaddrB   r^   r   Úexitrc   ÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libru   rv   ÚImportErrorr~   Úitems_for_dbÚ	enumerateÚidxrj   rM   rp   r{   r|   ÚstrptimeÚdtr   rA   r}   r‰   rŠ   r‡   r�   ÚfetchoneÚcountr…   © r   r   ú<module>r³      sô  ðñ÷ #× "Ó "Ý Ý à
€Ø6€	Ø)€ØÐ2Ñ2€ð ð  Dð€ó Ø	 ˆ×	 Ñ	 Ó	"€Ø × Ñ �I C°Ð9SÐ Ô TØ × Ñ �K ¨lÐ Ô ;Ø×ÑÓ€ØŸ*™* qš.ˆD�JŠJ¨b€	ò@ò
ò ò,8Gðv €	Ù‹U€
á ÐÔ Ù�a˜ Q™Ó'ò €HÙ�hÓ€DØ€|ÙÙ˜$Ó�H€Eˆ1ÙØ�aŠ<ÙÙˆg�h�ZÐ0Ð1Ô2ØØ€IØò ˆØ�‰<˜:Ñ%ØØ�‰�t˜F‘|Ô$Ø×Ñ˜ÔØ�Q‰‰	ðñ ˆ'�(�˜3˜y˜k¨±3°y³>Ð2BÀ!ÐDÔEØ�Aƒ~Ùð'ñ* Ð™˜Y›Ð(¨Ð-Ô .áÙ	Ð
 Ô!Ø€C‡H�HˆQ„Kð ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >ð"ß<ñF ˆ‰S�‹^ÐÐ8Ð9Ô :Ø€á˜9Ó%ò �I€CˆÙˆ#ˆc�!‰eˆW�A‘c˜)“nÐ% R¨¨V©°S°TÐ(:Ð';¸3Ð?Ô@Ù".¨t°F©|Ó"<Ñ€Eˆ7�Kà�F‰|€HØ€IÙð	Ø"�×"Ñ" 8¨C¨R =°*Ó=ˆBÙ˜BŸK™K¨Ó1Ó2ˆIð NQÐT[É^‰}˜W mÓ4×=Ñ=ÀDÐ=ÔIÐahÐjnÐknÐo€Gà×ÑØØ�F‰|ØØØØØ˜6‘lØ"Ø˜‘Lñ
õ 
ðñ6 ˆ‘c˜,Ó'Ð(¨Ð1Ô 2Ù˜\¨9Ó5�	€€TÙ Ð˜3˜%˜w t fÐ-Ô .áÓ€Ø�‰ÐEÈ	À|ÓT×]Ñ]Ó_Ð`aÑb€Ø ‡
�
„Ù ˆˆyˆk˜˜u˜g TÐ*Õ +øðO ò  Ûòõ4ð9 ûð^	Ùús   ÇL È3-L5ÌL2Ì1L2Ì5L9