Ë
    è‡zj+   ã                   óV  — 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Zddlm	Z	 ddl
mZ ej                  j                  dd«       ddlmZ ddlZdZd„ Zd	Zd
ZddddœZdZ ej.                  «       Zej2                  j5                  e«       d„ Zd„ Zd„ Zd„ Zd„ Ze dk(  r e«        yy)uÓ   æ²³åŒ—ç”Ÿæ€�ä¿¡æ�¯ç½‘-å…¬ç¤ºå…¬å‘Šçˆ¬è™«

Laravel CMS
åˆ—è¡¨: /article/list?id=3&page=N (~41é¡µ, ~652æ�¡, 2022~2026)
è¯¦æƒ…: /article/detail?id=N
å†…å®¹: div.public_content > p
æ—¥æœŸ: æ›´æ–°æ—¶é—´ï¼šYYYY-MM-DD
é    N)ÚBeautifulSoup)Úurljoinz/root/gov_crawler)Úpush_to_searchdbz/root/search.dbc                  óÊ   — 	 t        j                  t        d¬«      } | j                  d«       | j                  d«       | S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   ©ÚtimeoutzPRAGMA busy_timeout=30000zPRAGMA journal_mode=WALz  WARN DB connect: )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚ	ExceptionÚprint)ÚconnÚes     ú%/root/gov_crawler/crawl_hbstxxw_gg.pyÚget_db_connectionr      sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttps://www.hbstxxw.comz/article/list?id=3zoMozilla/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.8)z
User-AgentÚAcceptzAccept-Languageõ"   æ²³åŒ—ç”Ÿæ€�ä¿¡æ�¯ç½‘-å…¬ç¤ºå…¬å‘Šc                 óV   — t         j                  | d¬«      }d|_        |j                  S )Né   r   zutf-8)ÚsessÚgetÚencodingÚtext)ÚurlÚresps     r   Ú
fetch_pager   6   s%   € Ü�8‰8�C ˆ8Ó$€DØ€D„MØ�9‰9Ðó    c                 óÔ  — t        | d«      }g }|j                  d«      D ]Å  }|j                  dd«      }|sŒ|j                  d«      }|r|j	                  d¬«      n|j	                  d¬«      }|sŒR|j                  d«      r|nt        t        |«      }|j                  d	«      }d}	|r'|j                  d
d¬«      }
|
r|
j	                  d¬«      }	|j                  |||	dœ«       ŒÇ |S )u   è§£æž�åˆ—è¡¨é¡µúhtml.parserz0ul.search_list li a[href*="/article/detail?id="]ÚhrefÚ ÚspanT©ÚstripÚhttpÚliÚiÚdate©Úclass_)Útitler   Úpub_date)
r   Úselectr   ÚfindÚget_textÚ
startswithr   ÚBASE_URLÚfind_parentÚappend)ÚhtmlÚsoupÚitemsÚar"   r$   r-   Ú
detail_urlr(   Údate_strÚi_tags              r   Ú
parse_listr=   <   sï   € ä˜˜}Ó-€DØ€Eð �[‰[ÐKÓLò ˆØ�u‰u�V˜RÓ ˆÙØð �v‰v�f‹~ˆÙ-1�—‘ D�Ô)°q·z±zÈ°zÓ7MˆÙØà!Ÿ_™_¨VÔ4‘T¼'Ä(ÈDÓ:Qˆ
ð �]‰]˜4Ó ˆØˆÙØ—G‘G˜C¨�GÓ/ˆEÙØ Ÿ>™>°˜>Ó5�à�‰ØØØ ñ
õ 	ð+ð6 €Lr   c                 ó  — | d   }	 t        |«      }t	        |d«      }|j                  d	«      }|r|j                  d
¬«      n| d   }| j                  dd«      }|j                  dd¬«      }|rN|j                  d«      }	|	r;|	j                  d
¬«      }
t        j                  d|
«      }|r|j                  d«      }|j                  dd¬«      }d}g }|�rqg }|j                  g d¢d
¬«      D �]E  }|j                  dk(  �rª|j                  d«      rŒ&d}
|j                  D �]J  }t        |t        «      r|j                  «       }|sŒ'|
|dz   z  }
Œ0|j                  dk(  r|
dz  }
ŒE|j                  dk(  r@|j                  dd«      }|j                  dd«      }|sŒ{t!        ||«      }|
d|› d|› d�z  }
Œ”|j                  dk(  r|j                  d d«      }|j                  d
¬«      }|sŒÊ|sŒÍt!        ||«      }|
d!|› d|› d�z  }
t        j                  d"|t        j"                  «      s�Œ|j%                  ||d#œ«       �Œ"|j                  d$v s�Œ2|
|j                  dd
¬«      dz   z  }
�ŒM t        j&                  d%d|
«      j                  «       }
|
s�Œ«|j%                  |
«       �Œ¾|j                  d&k(  r|j%                  t        |«      «       �Œé|j                  dk(  s�Œú|j                  dd«      }|j                  dd«      }|s�Œ"t!        ||«      }|j%                  d|› d|› d'�«       �ŒH d(j)                  |«      }||||fS # t        $ r4}t        d|› d|› �«       | d   | j                  dd«      dg fcY d}~S d}~ww xY w))u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r-   r.   r#   Nr!   Úh1Tr%   ÚdivÚpublic_Subtitler+   r$   z(\d{4}-\d{2}-\d{2})é   Úpublic_content)ÚpÚtableÚimg)Ú	recursiverD   ú Úbrú
rF   ÚsrcÚaltz![z](z) r9   r"   ú[z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$)Únamer   )r$   ÚstrongÚbÚemz[ \t]+rE   ú)z

)r   r   r   r   r   r0   r1   ÚreÚsearchÚgroupÚfind_allrN   ÚchildrenÚ
isinstanceÚstrr&   r   ÚIr5   ÚsubÚjoin)Úitemr   r6   r   r7   r?   r-   r.   Úsubtitler$   ÚtxtÚmÚcontent_divÚcontentÚattachmentsÚpartsÚelemÚchildÚtrK   rL   Úfull_srcÚa_hrefÚa_textÚ	full_hrefs                            r   Úfetch_detailrl   `   sq  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð 
�‰�4‹€BÙ')ˆB�K‰K˜dˆKÔ#¨t°G©}€Eð �x‰x˜
 BÓ'€HØ�y‰y˜Ð'8ˆyÓ9€HÙØ�}‰}˜VÓ$ˆÙØ—-‘- d�-Ó+ˆCÜ—	‘	Ð0°#Ó6ˆAÙØŸ7™7 1›:�ð —)‘)˜EÐ*:�)Ó;€KØ€GØ€KâØˆØ×(Ñ(Ò)>È$Ð(ÓOó &	:ˆDØ�y‰y˜CÓØ—9‘9˜S”>ØØ�Ø!Ÿ]™]ó E�EÜ! %¬Ô-Ø!ŸK™K›M˜ÚØ 1 s¡7™N™CØŸ™ tÒ+Ø˜t™™ØŸ™ uÒ,Ø#Ÿi™i¨¨rÓ2˜Ø#Ÿi™i¨¨rÓ2˜ÚÜ'.¨s°CÓ'8˜HØ R¨ u¨B¨x¨j¸Ð#;Ñ;™CØŸ™ sÒ*Ø!&§¡¨6°2Ó!6˜Ø!&§¡°d Ó!;˜Ú!¢fÜ(/°°VÓ(<˜IØ Q v h¨b°°¸2Ð#>Ñ>˜CÜ!Ÿy™yÐ)NÐPVÔXZ×X\ÑX\Ö]Ø +× 2Ñ 2¸FÈ9Ñ3UÖ VØŸ™Ð'DÓDØ˜uŸ~™~¨c¸˜~Ó>ÀÑDÑDšð-Eô. —f‘f˜Y¨¨SÓ1×7Ñ7Ó9�ÛØ—L‘L Ö%Ø—‘˜gÒ%Ø—‘œS ›YÖ'Ø—‘˜eÔ#Ø—h‘h˜u bÓ)�Ø—h‘h˜u bÓ)�ÛÜ& s¨CÓ0�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Ö9ðM&	:ðN —+‘+˜eÓ$ˆà�(˜G [Ð0Ð0øôK ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡M Í	NÍ)NÎ NÎNc                 óì   — t        | d«      }|j                  d«      }d}|D ]O  }|j                  dd«      }t        j                  d|«      }|sŒ.t        |j                  d«      «      }||kD  sŒN|}ŒQ |S )u   ä»Žåˆ†é¡µèŽ·å�–æ€»é¡µæ•°r!   zul.page li.pageItem a[href]r   r"   r#   z
page=(\d+)rB   )r   r/   r   rS   rT   ÚintrU   )r6   r7   Ú
page_linksÚmax_pager9   r"   r`   rD   s           r   Úget_last_page_numrq   ®   sx   € ä˜˜}Ó-€DØ—‘Ð:Ó;€JØ€HØò ˆØ�u‰u�V˜RÓ ˆÜ�I‰I�m TÓ*ˆÚÜ�A—G‘G˜A“J“ˆAØ�8‹|Ø‘ðð €Or   c                  ó”  — t        j                  d¬«      } | j                  dt        dd¬«       | j	                  «       }t        d«       t        t        t        z   «      }t        |«      }t        dt        |«      › d	�«       |j                  }|dk(  rt        |«      }t        d
|› d�«       t        d|dz   «      D ]†  }t        › t        › d|› �}t        d|› d�«       	 t        |«      }t        |«      }|st        d«        n@t        dt        |«      › d	�«       |j                  |«       t!        j"                  d«       Œˆ t        dt        |«      › d	�«       g }	t%        |«      D ]Å  \  }
}t        d|
dz   › dt        |«      › d|d   d d › d�«       t'        |«      \  }}}}|s|d   }t)        j*                  dd|«      j-                  «       }|r|d d nd}|d   |d   ||||t.        |rt1        j2                  |d ¬!«      ndd"œ}|	j5                  |«       t!        j"                  d#«       ŒÇ t        d$t        |	«      › d%�«       t7        |	t.        «       t9        «       }|rw	 |j;                  d&t.        f«      }|j=                  «       d   }|j;                  d't.        f«      }|j=                  «       d   }t        d(|› d)|› d*�«       |j?                  «        t        d,«       y # t        $ r}t        d|› �«       Y d }~ �ŒÂd }~ww xY w# t        $ r}t        d+|› �«       Y d }~Œ^d }~ww xY w# |j?                  «        w xY w)-Nr   )Údescriptionz--pagesr   u   é¡µæ•°ï¼Œ0=è‡ªåŠ¨æ£€æµ‹å…¨é‡�)ÚtypeÚdefaultÚhelpzFetching page 1...z  Found z itemsz  Auto detected z pagesé   rB   z&page=zPage z...z  empty, stopz  found z  WARN: g333333Ó?z
Total list: z  [ú/z] r-   é(   z\s+rH   iô  r#   r   F)Úensure_ascii)r   Ú
source_urlr-   rb   Úsummaryr.   Ú	site_namerc   gš™™™™™É?z
Inserting z records...z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?zDB: z rows (FTS: z rows)z  WARN DB query: ÚDONE) ÚargparseÚArgumentParserÚadd_argumentrn   Ú
parse_argsr   r   r3   ÚLIST_URLr=   ÚlenÚpagesrq   ÚrangeÚextendr   ÚtimeÚsleepÚ	enumeraterl   rS   r[   r&   Ú	SITE_NAMEÚjsonÚdumpsr5   r   r   r   ÚfetchoneÚclose)ÚparserÚargsr6   r8   Ú	max_pagesÚpager   Ú
page_itemsr   Úrecordsr)   r]   r-   r.   rb   rc   r|   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                         r   Úmainrš   ½   s5  € Ü×$Ñ$Ð1UÔV€FØ
×Ñ˜	¬°QÐ=\ÐÔ]Ø×ÑÓ€Dô 
Ð
ÔÜ”h¤Ñ)Ó*€DÜ�tÓ€EÜ	ˆH”S˜“Z�L Ð
'Ô(à—
‘
€IØ�A‚~Ü% dÓ+ˆ	ÜÐ   ¨6Ð2Ô3ä�a˜ Q™Ó'ò ˆÜ�
œ8˜* F¨4¨&Ð1ˆÜ��d�V˜3ÐÔ ð
	Ü˜c“?ˆDÜ# DÓ)ˆJÙÜ˜Ô'ÙÜ�HœS ›_Ð-¨VÐ4Ô5Ø�L‰L˜Ô$ô 	�
‰
�3�ðô  
ˆNœ3˜u›:˜, fÐ
-Ô.ð €GÜ˜UÓ#ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜e›*˜ R¨¨W©°c°rÐ(:Ð';¸3Ð?Ô@Ü0<¸TÓ0BÑ-ˆˆx˜ +áØ˜‘MˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆá#*�'˜$˜3‘-°ˆð ˜‘;Ø˜u™+ØØØØ Ü"ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ˆð 	�‰�vÔÜ�
‰
�3�ð+ô0 
ˆLœ˜W›˜ kÐ
2Ô3Ü�WœiÔ(ô Ó€DÙð	Ø—\‘\Ø@Ä9À,óˆFð Ÿ™Ó)¨!Ñ,ˆIØ—\‘\ØCÄiÀ\óˆFð Ÿ™Ó)¨!Ñ,ˆIÜ�D˜˜ <°	¨{¸&ÐAÔBð �J‰JŒLä	ˆ&…Møôm ò 	Ü�H˜Q˜C�.Ô!Þûð	ûôb ò 	+ÜÐ% a SÐ)×*Ñ*ûð	+ûð �J‰J�LúsI   Ã"#K+Ä)K+É)A&L Ë+	LË4L	Ì	LÌ	L2ÌL-Ì(L5 Ì-L2Ì2L5 Ì5MÚ__main__)!Ú__doc__ÚrequestsrS   ÚsysrŒ   rˆ   Úosr   Úbs4r   Úurllib.parser   ÚpathÚinsertÚcrawler_libr   r
   r   r   r3   rƒ   ÚHEADERSr‹   ÚSessionr   ÚheadersÚupdater   r=   rl   rq   rš   Ú__name__© r   r   ú<module>r«      sÄ   ðñó Û 	Û 
Û Û Û 	Û Ý Ý  à ‡�‡��Ð&Ô 'Ý (Û à
€òð %€Ø€ð DØOØ0ñ€ð 1€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òò!òHK1ò\òQðh ˆzÒÙ…Fð r   