Ë
    }�j¾  ã                   óh  — 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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j2                  v ZeZ eej2                  «      D ]1  \  ZZej?                  d«      sŒ e ejC                  d«      d   «      ZŒ3  eee¬«       yy)u1   é‡‘å¯¨åŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š (Lonsun CMS)é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu"   é‡‘å¯¨åŽ¿äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šu   å®‰å¾½zhttps://www.ahjinzhai.gov.cnz3https://www.ahjinzhai.gov.cn/content/column/6787861é   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.9zgzip, deflate)z
User-AgentÚAcceptzAccept-LanguagezAccept-Encodingz·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           ú"/root/gov_crawler/crawl_jinzhai.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                 ó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)r-   Úurlr1   )r   ÚfindÚreÚcompiler   r   Úget_textr/   r   r   ÚBASE_URLÚappend)Ú	html_textÚsoupÚitemsr&   r*   r	   r-   r
   Úfull_urlr0   r1   s              r   Úextract_list_itemsr=   1   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ð €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 }
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   ú/éÿÿÿÿ)rH   r2   ú[ú](ú)z

F)Úensure_ascii)Úrequestsr   ÚHEADERSÚencodingÚstatus_codeÚ	ExceptionÚprintÚsysÚstderrr   Útextr3   r/   r6   r   Ú	decomposerH   r   r8   r4   ÚsearchÚIr   r   ÚsplitÚjoinÚjsonÚdumps)r2   ÚrÚer:   r-   Ú
meta_titlerL   Úpub_dateÚ	meta_dateÚcontent_partsÚmd_rowsÚattachmentsÚcontent_divÚnoiseÚchildÚtbl_htmlÚtxtr	   r
   Ú	full_hrefÚcontent_textÚsummarys                         r   Úextract_detailr{   I   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¨-�)Ó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�ÚØ—N‘N 8Õ,Ø—‘˜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 �]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   é   z1https://www.ahjinzhai.gov.cn/zwzx/gsgg/index.htmlz?pageIndex=%dz[Page z] rE   r?   r@   rC   rD   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: r1   z  [é2   rW   rX   rY   z  OK: z  DB error: z
[DONE] Total: z
, Errors: )r$   ÚcursorÚrangeÚ
COLUMN_URLr`   ra   rb   r[   r   r\   r]   r^   r_   r=   rc   Úlenr"   Úfetchoner{   Ú
INSERT_SQLÚ	SITE_NAMEr/   ÚCATEGORYÚGROUPÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr#   ÚcurÚtotalÚerrorsÚpnÚlist_urlrk   rl   r;   Úitemr-   rn   rK   rr   Úfinal_titleÚ
final_dateÚfinal_summarys                      r   Úcrawlr˜   Œ   s-  € Ü‹9€DØ
�+‰+‹-€CØ€EØ€Fä�A�y 1‘}Ó%ó >ˆØ�Š7ØJ‰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__ri   r4   ra   rŠ   r[   Úbs4r   r   r   r!   r†   r‡   rˆ   r7   r‚   Ú	MAX_PAGESr\   r…   r   r$   r=   r{   r˜   Ú__name__Úargvr�   ÚmpÚ	enumerateÚir	   r   Úintrg   © r   r   ú<module>r¥      sê   ðñ 8ß $× $Ó $Ý Ý  à
€Ø0€	Ø€Ø€Ø)€ØB€
Ø€	ð DØOØ'Ø&ñ	€ð-€
ó
òòò0@VðF  Yó HðV ˆzÒØ˜CŸH™HÐ$€IØ	€BÙ˜#Ÿ(™(Ó#ò &‰ˆˆ1Ø�<‰<˜Õ'Ù�Q—W‘W˜S“\ !‘_Ó%‰Bð&ñ 
�I¨Ö,ð r   