Ë
    Í«£jê  ã                   ón  — 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Zddd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)u@   æ»�å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯è¯„ä¸€æ¬¡äºŒæ¬¡å…¬ç¤º (Lonsun CMS)é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu   æ»�å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€u   å®‰å¾½zhttps://sthjj.chuzhou.gov.cnz/gzfw/hpycecgs/z3https://sthjj.chuzhou.gov.cn/content/column/8131147é   é   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                 óÊ  — 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.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparser   )ÚtableÚbase_urlÚurllibÚtblr
   r   r   r   s           úcrawl_sthjj_chuzhou.pyÚhtml_table_to_htmlr      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        «      }|j                  d«       |j                  d«       |S )Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r    Úconns     r   Úinit_dbr%   *   s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 óF  — 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«      }	|	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)r.   ÚurlÚdate)r   ÚfindÚreÚcompiler   r   Úget_textr0   r   r   ÚBASE_URLÚappend)Ú	html_textÚsoupÚitemsr'   r+   r
   r.   r   Úfull_urlr1   r3   s              r   Úextract_list_itemsr>   2   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‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜u¨X¸tÑDÕEðFð €Lr   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 }
|j                  dd¬«      xs |j                  dd¬«      }|�rS|j                  ddg«      D ]  }|j                  «        Œ |j                  ddgd¬«      D ]i  }|j                   dk(  r!t#        || «      }|sŒ!|	j%                  |«       Œ3|j                   dk(  sŒC|j                  dd¬«      }|sŒY|	j%                  |«       Œk |j                  dd¬ «      D ]”  }|d!   j                  «       }t'        j(                  d"|t&        j*                  «      sŒ<|j-                  d#«      r|nt/        | |«      }|
j%                  |j                  d¬«      xs |j1                  d$«      d%   |d&œ«       Œ– |	s.|	j%                  d'|xs | j1                  d$«      d%   ›d(| ›d)�«       d*j3                  |	«      }|r|dd n|}|||t5        j6                  |
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.é   ©ÚheadersÚtimeoutúutf-8éÈ   )NNNNz  [ERROR] fetch detail failed: ©ÚfileNr	   r   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1Tr/   ÚPubDateé
   ÚdivÚnewscontnetr)   zj-fontContentÚscriptÚstyleÚpr   r,   ú r
   )r   r   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r   ú/éÿÿÿÿ)rI   r2   ú[ú](ú)z

F)Úensure_ascii)Úrequestsr   ÚHEADERSÚencodingÚstatus_codeÚ	ExceptionÚprintÚsysÚstderrr   Útextr4   r0   r7   r   Ú	decomposerI   r   r9   r5   ÚsearchÚIr   r   ÚsplitÚjoinÚjsonÚdumps)r2   ÚrÚer;   r.   Ú
meta_titlerM   Úpub_dateÚ	meta_dateÚcontent_partsÚattachmentsÚcontent_divÚnoiseÚchildÚtbl_htmlÚtxtr
   r   Ú	full_hrefÚcontent_textÚsummarys                        r   Úextract_detailr{   J   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Ø€KØ—)‘)˜E¨-�)Ó8Òd¸D¿I¹IÀeÐTc¸IÓ<d€KÚà ×)Ñ)¨8°WÐ*=Ó>ò 	ˆEØ�O‰OÕð	ð !×)Ñ)¨3°¨.ÀDÐ)ÓIò 	.ˆEØ�z‰z˜WÒ$Ü-¨e°SÓ9�ÚØ!×(Ñ(¨Õ2Ø—‘˜sÓ"Ø—n‘n S°�nÓ5�ÚØ!×(Ñ(¨Õ-ð	.ð ×%Ñ% 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à—;‘;˜}Ó-€LÙ$0ˆl˜4˜CÑ °e€Gà�(˜L¬$¯*©*°[ÈuÔ*UÐUÐUøôs ò &ÜÐ/°¨sÐ3¼#¿*¹*ÕEÜ%ûð&ús   ‚2K Ë	LË LÌLFc                 óÆ  — t        «       }|j                  «       }d}d}t        d|dz   «      D �]‡  }|dk(  rt        t        z   dz   }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�t0        |t2        f
«       |j5                  «        |dz  }t        d|d d › �t        j                  ¬«       �Œg t7        j8                  d«       �ŒŠ |j;                  «        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
index.htmlz?pageIndex=%dz[Page z] rF   r@   rA   rD   rE   z  [ERROR] list page z HTTP z: z  Found z itemsz!  [WARN] No items found, stoppingz)SELECT id FROM gov_raw WHERE page_url = ?r2   z  SKIP (exists): r.   é(   z  [ERROR] detail unreachable: r3   z  [é2   rX   rY   rZ   z  OK: z  DB error: z
[DONE] Total: z
, Errors: )r%   ÚcursorÚranger8   Ú	LIST_PATHÚ
COLUMN_URLra   rb   rc   r\   r   r]   r^   r_   r`   r>   rd   Úlenr#   Úfetchoner{   Ú
INSERT_SQLÚ	SITE_NAMEr0   ÚCATEGORYÚGROUPÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr$   ÚcurÚtotalÚerrorsÚpnÚlist_urlrl   rm   r<   Úitemr.   ro   rL   rr   Úfinal_titleÚ
final_dateÚfinal_summarys                      r   Úcrawlr™   �   s7  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€Fä�A�y 1‘}Ó%ó ?ˆØ�Š7Ü¤)Ñ+¨lÑ:‰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ð?"	ôH 	�
‰
�1Žð?ðB 	‡J�J„LÜ	Ð˜U˜G :¨f¨XÐ
6¼S¿Z¹ZÕHØ€Løôi ò 	ÜÐ(¨¨¨B¨q¨cÐ2¼¿¹ÕDØ�a‰KˆFÝûð	ûôX ò Ü˜ Q CÐ(¬s¯z©zÕ:Ø˜!‘–ûðús2   Á6A"K,ÈBL)Ë,	L&Ë5&L!Ì!L&Ì)	M Ì2#MÍM Ú__main__z--testz--max-pages=ú=r}   )rŽ   r�   )r   )$Ú__doc__rj   r5   rb   r‹   r\   Úbs4r   r   r   r"   r‡   rˆ   r‰   r8   r‚   rƒ   Ú	MAX_PAGESÚPER_PAGEr]   r†   r   r%   r>   r{   r™   Ú__name__ÚargvrŽ   ÚmpÚ	enumerateÚir
   r   Úintrh   © r   r   ú<module>r§      sò   ðñ Gß $× $Ó $Ý Ý  à
€Ø&€	Ø€Ø€Ø)€Ø€	ØB€
Ø€	Ø€ð DØOØ'ñ€ð-€
ó
òòò0@VðF  Yó IðX ˆzÒØ˜CŸH™HÐ$€IØ	€BÙ˜#Ÿ(™(Ó#ò &‰ˆˆ1Ø�<‰<˜Õ'Ù�Q—W‘W˜S“\ !‘_Ó%‰Bð&ñ 
�I¨Ö,ð r   