Ë
    àq«j“#  ã                   óp  — 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dZdZd	Zd
ZdZddddœZdZd„ Zdd„Zd„ Zd„ Zd„ Zdefd„Zedk(  radej6                  v ZeZ eej6                  «      D ]1  \  ZZ e jC                  d«      sŒ e"e jG                  d«      d   «      ZŒ3  eee¬«       yy)u4   æ·®åŒ—å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - å…¬ç¤ºå…¬å‘Š (Lonsun CMS)é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu%   æ·®åŒ—å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šu   å®‰å¾½zhttps://sthjj.huaibei.gov.cnz3https://sthjj.huaibei.gov.cn/content/column/4701891é   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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)z
User-AgentÚAcceptzAccept-Languagez·INSERT OR IGNORE INTO gov_raw
    (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)c                 óv  ‡— | s| S | D �cg c]  }t        |t        «      sŒ|‘Œ }}t        |«      t        | «      k7  r| S t        «       g }}| D ])  }||vsŒ|j	                  |«       |j                  |«       Œ+ |D �‡cg c]&  Št        ‰«      dk\  rt        ˆfd„|D «       «      s‰‘Œ( }}|r|S |S c c}w c c}w )u6  å‰”é™¤ã€Œå®¹å™¨æ®µã€�ï¼šfind_all(['p','div']) ä¼šå�Œæ—¶æ”¶ä¸‹å®¹å™¨ <div> ä¸Žå®ƒå†…éƒ¨çš„ <p>ï¼Œ
    å¯¼è‡´å�Œä¸€å†…å®¹é‡�å¤�ï¼ˆå®¹å™¨é‚£ä»½å¸¸è¿˜è¢« get_text(strip=True) æ‹�å¹³ï¼‰ã€‚
    åˆ¤æ�®ï¼šå…ˆæŒ‰å€¼åŽ»é‡�ï¼Œå†�å‰”é™¤è¢«å…¶å®ƒæ®µå®Œå…¨åŒ…å�«çš„æ®µã€‚ä¿�æŠ¤ï¼šå‰”é™¤å�Žä¸ºç©ºåˆ™è¿”å›žåŽ»é‡�ç»“æžœã€‚
    é(   c              3   ó:   •K  — | ]  }|‰uxr |xr |‰v –— Œ y ­w)N© )Ú.0ÚbÚas     €ú%/root/gov_crawler/crawl_huaibei_hb.pyú	<genexpr>z(_drop_container_parts.<locals>.<genexpr>+   s&   øè ø€ Ò(SÈ¨°!¨Ò)D¸Ò)D¸aÀ1¸fÓ)DÑ(Sùs   ƒ)Ú
isinstanceÚstrÚlenÚsetÚaddÚappendÚany)ÚpartsÚpÚpsÚseenÚuniqr   Úkeeps        ` r   Ú_drop_container_partsr      sÅ   ø€ ñ
 ØˆØÖ	1�œj¨¬CÕ0Š!Ð	1€BÐ	1Ü
ˆ2ƒw”#�e“*ÒØˆÜ“˜ˆ$€DØò (ˆØ�DŠ=Ø�H‰H�QŒK˜Ÿ™ Q�ð(ð ÷ V�!Ü˜“F˜b’L¤SÓ(SÈdÔ(SÔ%Sò ð V€Dð Váˆ4Ð!˜TÐ!ùò 
2ùòVs   ŠB1 B1Á>+B6c                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserr   ÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r#   z//zdata:)Úurllib.parser   r   Úfind_allÚgetÚ
startswithÚparser   )ÚtableÚbase_urlÚurllibÚtblr   r!   r&   r'   s           r   Úhtml_table_to_htmlr1   /   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€Oó    c                  ó€   — dd l } | j                  t        d¬«      }|j                  d«       |j                  d«       |S )Nr   é<   )ÚtimeoutzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r6   Úconns     r   Úinit_dbr;   <   s6   € ÛØ�?‰?œ7¨Bˆ?Ó/€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr2   c                 óJ  — t        | d«      }g }|j                  dt        j                  d«      ¬«      }|s|S |j	                  dd¬«      D ]Ô  }|j                  d«      }|sŒ|j                  d	«      xs |j                  d
¬«      xs dj                  «       }|sŒQ|j                  dd«      j                  «       }|sŒt|j                  d«      r|nt        t        |«      }|j                  dd¬«      }	|	r|	j                  d
¬«      nd}
|j                  |||
dœ«       ŒÖ |S )z/Extract (title, url, date) from list page HTML.r    ÚulÚdoc_list©Úclass_ÚliF©Ú	recursiver   ÚtitleT©Ústripr"   r!   r#   ÚspanÚdate)rD   ÚurlrH   )r   ÚfindÚreÚcompiler)   r*   Úget_textrF   r+   r   ÚBASE_URLr   )Ú	html_textÚsoupÚitemsr=   rA   r   rD   r!   Úfull_urlrG   rH   s              r   Úextract_list_itemsrS   D   s  € ä˜ MÓ2€DØ€EØ	�‰�4¤§
¡
¨;Ó 7ˆÓ	8€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò FˆØ�G‰G�C‹LˆÙØØ—‘�w“Ò? 1§:¡:°D :Ó#9Ò?¸R×FÑFÓHˆÙØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆÙØØŸ?™?¨6Ô2‘4¼ÄÈ$Ó8OˆØ�w‰w�v fˆwÓ-ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜u¨X¸tÑDÕEðFð €Lr2   c                 óô  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry	 t        |j                  d	«      }d
}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }d
}|j                  dddi¬«      }|r'|j                  d«      r|d   j                  «       dd }g }	g }
g }|j                  dd¬«      }|�rÊ|j                  ddg«      D ]  }|j                  «        Œ |j                  g d¢d¬«      D ]à  }|j                   dk(  r!t#        || «      }|sŒ!|
j%                  |«       Œ3|j                   dk(  r(|j                  dd¬«      }|sŒX|	j%                  |«       Œj|j                   dk(  sŒz|j                  dd¬«      }|sŒ�t'        |«      dkD  sŒŸ|j                  d«      rŒ±|j)                  «       }t'        |«      dk\  sŒÐ|	j%                  |«       Œâ |j                  d d¬!«      D ]”  }|d"   j                  «       }t+        j,                  d#|t*        j.                  «      sŒ<|j1                  d$«      r|nt3        | |«      }|j%                  |j                  d¬«      xs |j)                  d%«      d&   |d'œ«       Œ– |	s.|	j%                  d(|xs | j)                  d%«      d&   ›d)| ›d*�«       t5        |	«      }	d+j7                  |	«      }|r|dd n|}|||t9        j:                  |d,¬-«      fS # t
        $ r(}t        d|› �t        j                  ¬«       Y d}~yd}~ww xY w).z=Extract title, date, content, attachments from a detail page.é   ©Úheadersr5   úutf-8éÈ   )NNNNz  [ERROR] fetch detail failed: ©ÚfileNr    r"   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1TrE   ÚPubDateé
   Údivzj-fontContentr?   ÚscriptÚstyle)r   r-   rd   rB   r-   r   ú é   r   )r!   r!   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r#   ú/éÿÿÿÿ)r]   rI   ú[ú](ú)z

F)Úensure_ascii)Úrequestsr*   ÚHEADERSÚencodingÚstatus_codeÚ	ExceptionÚprintÚsysÚstderrr   ÚtextrJ   rF   rM   r)   Ú	decomposer]   r1   r   r   ÚsplitrK   ÚsearchÚIr+   r   r   ÚjoinÚjsonÚdumps)rI   ÚrÚerP   rD   Ú
meta_titlera   Úpub_dateÚ	meta_dateÚcontent_partsÚmd_rowsÚattachmentsÚcontent_divÚnoiseÚchildÚtbl_htmlÚtxtÚlinesr   r!   Ú	full_hrefÚcontent_textÚsummarys                          r   Úextract_detailr�   \   s?  € ð&Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ)ð  ô ˜Ÿ™ Ó/€Dð €EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEð €HØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜YÑ'×-Ñ-Ó/°°Ð4ˆð €MØ€GØ€KØ—)‘)˜E¨/�)Ó:€KÚà ×)Ñ)¨8°WÐ*=Ó>ò 	ˆEØ�O‰OÕð	ð !×)Ñ)Ò*?È4Ð)ÓPò 	2ˆEØ�z‰z˜WÒ$Ü-¨e°SÓ9�ÚØ—N‘N 8Õ,Ø—‘˜sÒ"Ø—n‘n S°�nÓ5�ÚØ!×(Ñ(¨Õ-Ø—‘˜uÓ$à—n‘n S°�nÓ5�Úœ3˜s›8 b›=°·±¸GÕ1DàŸI™I›K�EÜ˜5“z Q“Ø%×,Ñ,¨SÕ1ð!	2ð& ×%Ñ% c°Ð%Ó5ò 	ˆAØ�V‘9—?‘?Ó$ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ$(§O¡O°FÔ$;™DÄÈÈdÓAS�	Ø×"Ñ"ØŸJ™J¨T˜JÓ2ÒI°d·j±jÀ³oÀbÑ6IØ$ñ$õ ð		ñ Ø×Ò¨5Ò+F°C·I±I¸c³NÀ2Ñ4FÑ+FÊÐLÔMä)¨-Ó8€MØ—;‘;˜}Ó-€LÙ$0ˆl˜4˜CÑ °e€Gà�(˜L¬$¯*©*°[ÈuÔ*UÐUÐUøôG ò &ÜÐ/°¨sÐ3¼#¿*¹*ÕEÜ%ûð&ús   ‚2M Í	M7ÍM2Í2M7Fc                 óª  — t        «       }|j                  «       }d}d}t        d|dz   «      D �]y  }|dk(  rd}nt        d|z  z   }t	        d|› d|› �t
        j                  ¬«       	 t        j                  |t        d¬	«      }d
|_
        |j                  dk7  r1t	        d|› d|j                  › �t
        j                  ¬«       |dz  }Œ�	 t        |j                  «      }
t	        dt        |
«      › d�t
        j                  ¬«       |
st	        dt
        j                  ¬«        �n‚|
D �]d  }|j!                  d|d   f«       |j#                  «       r%t	        d|d   d d › �t
        j                  ¬«       ŒOt%        |d   «      \  }}}}|€'t	        d|d   › �t
        j                  ¬«       |dz  }Œ‹|xs |d   }|xs |d   }|r|d d n|}| r*t	        d|› d|d d › �t
        j                  ¬«       |dz  }ŒÒ	 |j!                  t&        t(        |d   |d   |j+                  «       ||j+                  «       |xs d|›d|d   ›d�t,        |t.        f
«       |j1                  «        |dz  }t	        d|d d › �t
        j                  ¬«       �Œg t3        j4                  d«       �Œ| |j7                  «        t	        d |› d!|› �t
        j                  ¬«       |S # t        $ r1}	t	        d|› d|	› �t
        j                  ¬«       |dz  }Y d }	~	�Œåd }	~	ww xY w# t        $ r.}	t	        d|	› �t
        j                  ¬«       |dz  }Y d }	~	�Œ"d }	~	ww xY w)"Nr   é   z,https://sthjj.huaibei.gov.cn/gsgg/index.htmlz?pageIndex=%dz[Page z] rZ   rU   rV   rX   rY   z  [ERROR] list page z HTTP z: z  Found z itemsz!  [WARN] No items found, stoppingz)SELECT id FROM gov_raw WHERE page_url = ?rI   z  SKIP (exists): rD   r	   z  [ERROR] detail unreachable: rH   z  [é2   rk   rl   rm   z  OK: z  DB error: z
[DONE] Total: z
, Errors: )r;   ÚcursorÚrangeÚ
COLUMN_URLrt   ru   rv   ro   r*   rp   rq   rr   rs   rS   rw   r   r9   Úfetchoner�   Ú
INSERT_SQLÚ	SITE_NAMErF   ÚCATEGORYÚGROUPÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr:   ÚcurÚtotalÚerrorsÚpnÚlist_urlr   r€   rQ   ÚitemrD   r‚   r`   r†   Úfinal_titleÚ
final_dateÚfinal_summarys                      r   Úcrawlr«   ©   s-  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€Fä�A�y 1‘}Ó%ó >ˆØ�Š7ØE‰Hä! O°bÑ$8Ñ8ˆHä��r�d˜"˜X˜JÐ'¬c¯j©jÕ9ð
	Ü—‘˜X¬wÀÔCˆAØ ˆAŒJØ�}‰} Ò#ÜÐ,¨R¨D°°q·}±}°oÐFÌSÏZÉZÕXØ˜!‘�Øð $ô # 1§6¡6Ó*ˆÜ�œ˜U›˜ FÐ+´#·*±*Õ=áÜÐ5¼S¿Z¹ZÕHÚàó !	ˆDØ�K‰KÐCÀdÈ5ÁkÀ^ÔTØ�|‰|Œ~ÜÐ)¨$¨w©-¸¸Ð*<Ð)=Ð>ÄSÇZÁZÕPØä4BÀ4ÈÁ;Ó4OÑ1ˆE�8˜W kØˆ}ÜÐ6°t¸E±{°mÐDÌ3Ï:É:ÕVØ˜!‘�ØàÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJÙ-4˜G D S™M¸+ˆMáÜ˜˜J˜< r¨+°c°rÐ*:Ð);Ð<Ä3Ç:Á:ÕNØ˜‘
�ØðØ—‘œJÜ˜t E™{¨D°©KØ×%Ñ%Ó'¨Ø!×'Ñ'Ó)¨7Ó+_Â[ÐRVÐW\ÓR]Ð7^Ü˜k¬5ð	)ô ð —‘”Ø˜‘
�Ü˜˜{¨3¨BÐ/Ð0Ð1¼¿
¹
×Cð=!	ôF 	�
‰
�1Žð}>ð@ 	‡J�J„LÜ	Ð˜U˜G :¨f¨XÐ
6¼S¿Z¹ZÕHØ€Løôg ò 	ÜÐ(¨¨¨B¨q¨cÐ2¼¿¹ÕDØ�a‰KˆFÝûð	ûôV ò Ü˜ Q CÐ(¬s¯z©zÕ:Ø˜!‘–ûðús2   Á(A"KÇ>BLË	LË'&LÌLÌ	MÌ$#MÍMÚ__main__z--testz--max-pages=ú=r’   )r    r¡   )r"   )$Ú__doc__r}   rK   ru   r�   ro   Úbs4r   r(   r   r8   r™   rš   r›   rN   r–   Ú	MAX_PAGESÚPER_PAGErp   r˜   r   r1   r;   rS   r�   r«   Ú__name__Úargvr    ÚmpÚ	enumerateÚir   r+   Úintry   r   r2   r   ú<module>r¸      sñ   ðñ ;ß $× $Ó $Ý Ý  à
€Ø3€	Ø€Ø€Ø)€ØB€
Ø€	Ø€ð DØOØ'ñ€ð-€
ò
"ó&òòò0JVðZ  Yó HðV ˆzÒØ˜CŸH™HÐ$€IØ	€BÙ˜#Ÿ(™(Ó#ò &‰ˆˆ1Ø�<‰<˜Õ'Ù�Q—W‘W˜S“\ !‘_Ó%‰Bð&ñ 
�I¨Ö,ð r2   