Ë
    V_Šj?  ã                   ó¶  — 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ddddœZdZddddddddœZdZd„ Zd'd„Zd„ Zd„ Zd„ Zd„ Zdefd „Zed!k(  rxd"ej8                  v Zerd#neZd$ej8                  v rKej8                  j?                  d$«      Z e d%z    e!ej8                  «      k  r e"ej8                  e d%z      «      Z eee¬&«       yy)(u€   
é’Ÿç¥¥å¸‚äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š
http://www.zhongxiang.gov.cn/col/col6653/index.html
TRS/Hanweb CMS - POST AJAX pagination
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu   é’Ÿç¥¥å¸‚-é€šçŸ¥å…¬å‘Šu   è�†é—¨z3http://www.zhongxiang.gov.cn/col/col6653/index.htmlé   é   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,en;q=0.8)z
User-AgentÚAcceptzAccept-LanguageÚRefererz›INSERT OR IGNORE INTO gov_raw 
    (site_name, page_url, title, publish_date, summary, content, category, attachments)
    VALUES (?, ?, ?, ?, '', ?, ?, ?)Ú1Ú33ú/Ú6653Ú62610u   é’Ÿç¥¥å¸‚äººæ°‘æ”¿åºœÚ0)ÚpageÚwebidÚpathÚcolumnidÚunitidÚwebnameÚpermissiontypez;http://www.zhongxiang.gov.cn/module/web/jpage/dataproxy.jspc                  ó|   — 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     ú%/root/gov_crawler/crawl_zhongxiang.pyÚinit_dbr   #   s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 óL   — t        j                  | t        |¬«      }d|_        |S )N)ÚheadersÚtimeoutúutf-8)ÚrequestsÚgetÚHEADERSÚencoding)Úurlr!   Úrs      r   Úfetchr)   +   s    € Ü�‰�S¤'°7Ô;€AØ€A„JØ€Hr   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_markdownr/   1   s   € äˆu‹:Ðr   c                 óà  — t        | d«      }g }t        |j                  «      D �]·  }|j                  €Œ|j                  j	                  «       }|dk(  r(|j                  dd¬«      }|sŒF|j                  |«       ŒX|dk(  r t        |«      }|sŒk|j                  |«       Œ}|dv rÁg }|j                  ddgd¬	«      D ]h  }|j                  dk(  r(|j                  dd¬«      }|sŒ(|j                  |«       Œ:|j                  dk(  sŒJt        |«      }|sŒX|j                  |«       Œj |r|j                  |«       �Œ|j                  dd¬«      }|s�Œ/|j                  |«       �ŒB|d
v r�ŒH|dv rD|j                  dd¬	«      D ],  }	|	j                  dd¬«      }|sŒ|j                  d|z   «       Œ. �Œ�|j                  dd¬«      }|s�Œ§|j                  |«       �Œº dj                  |«      S )z6Parse article HTML content (between ContentStart/End).úhtml.parserÚpú T©Ústripr,   )ÚdivÚcenterÚsectionF)Ú	recursive)ÚscriptÚstyleÚmetaÚbr)ÚulÚolÚliz- z

)r   ÚlistÚchildrenÚnameÚlowerÚget_textÚappendr/   Úfind_allÚextendÚjoin)
ÚtextÚsoupÚpartsÚchildÚtnÚtxtÚmdÚ	sub_partsÚsubÚli_tags
             r   Úextract_contentrT   5   sÔ  € ä˜˜}Ó-€DØ€EÜ�d—m‘mÓ$ó +"ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆØ�Š9Ø—.‘. ¨D�.Ó1ˆCÚØ—‘˜SÕ!Ø�7Š]Ü" 5Ó)ˆBÚØ—‘˜RÕ ØÐ/Ñ/àˆIØ—~‘~ s¨G nÀ�~ÓFò -�Ø—8‘8˜s’?ØŸ,™, s°$˜,Ó7�CÚØ!×(Ñ(¨Õ-Ø—X‘X Ó(Ü*¨3Ó/�BÚØ!×(Ñ(¨Õ,ð-ñ Ø—‘˜YÖ'ð —n‘n S°�nÓ5�ÛØ—L‘L Ö%ØÐ4Ñ4ÙØ�<ÑØŸ.™.¨¸˜.Ó?ò -�Ø—o‘o c°�oÓ6�ÚØ—L‘L ¨¡Õ,ò-ð
 —.‘. ¨D�.Ó1ˆCÛØ—‘˜SÖ!ðW+"ðX �;‰;�uÓÐr   c                  ó   — 	 t        j                  t        t        t        d¬«      } d| _        | j                  dk7  rt        d	| j                  › �d¬«       g S t        j                  d
| j                  t        j                  «      }g }|D ]—  }t        j                  d|«      }|sŒ|j                  d«      }|j                  d«      j                  «       }t!        d|«      }t        j                  d|«      }	|	r|	j                  d«      nd}
|j#                  |||
dœ«       Œ™ |S # t        $ r}t        d|› �d¬«       g cY d}~S d}~ww xY w)z$Get list items from proxy POST call.é   )Údatar    r!   r"   z  [ERROR] Proxy: T©ÚflushNéÈ   z  [ERROR] Proxy HTTP z&<record><!\[CDATA\[(.*?)\]\]></record>z,<a\s+[^>]*href="([^"]*)"[^>]*title="([^"]*)"é   é   zhttp://www.zhongxiang.gov.cn/z\[(\d{4}-\d{2}-\d{2})\]Ú )Útitler'   Údate)r#   ÚpostÚ	PROXY_URLÚ
PROXY_DATAr%   r&   Ú	ExceptionÚprintÚstatus_codeÚreÚfindallrJ   ÚDOTALLÚsearchÚgroupr5   r   rF   )r(   ÚeÚrecordsÚitemsÚrecÚa_matchÚhrefr^   Úfull_urlÚdate_mÚdate_strs              r   Úget_all_itemsrt   h   s*  € ðÜ�M‰Mœ)¬*¼gÈrÔRˆØˆŒ
ð 	‡}�}˜ÒÜÐ% a§m¡m _Ð5¸TÕBØˆ	Ü�j‰jÐBÀAÇFÁFÌBÏIÉIÓV€GØ€EØò 	JˆÜ—)‘)ÐKÈSÓQˆÙØØ�}‰}˜QÓˆØ—‘˜aÓ ×&Ñ&Ó(ˆÜÐ:¸DÓAˆÜ—‘Ð5°sÓ;ˆÙ&,�6—<‘< ”?°"ˆØ�‰˜u¨X¸xÑHÕIð	Jð €Løô% ò ÜÐ! ! Ð%¨TÕ2Ø�	ûðús   ‚,D( Ä(	EÄ1EÅEÅEc                 ó8  — 	 t        | «      }|j                  dk7  ryt	        |j
                  d«      }|j
                  }d}|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }d}|j                  d	d
di¬«      }|r$|j                  d«      r|d   j                  «       }d}	|j                  d«      }
|j                  d«      }|
dkD  r*|dkD  r%|j                  d|
«      }||dz   | }t        |«      }	g }|j                  d«      }|r‹|j                  dd¬«      D ]u  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d¬«      xs |j!                  d«      d   }t#        | |«      }|j%                  ||dœ«       Œw t'        |	j                  «       «      dk  r	d| › d|› d �}	||	||rt)        j*                  |d!¬"«      d#œS dd#œS # t        $ r}t        d| › d|› �d¬«       Y d}~yd}~ww xY w)$z&Fetch detail page and extract content.z
  [ERROR] z: TrX   NrZ   r1   r]   r<   rC   ÚArticleTitle)ÚattrsÚcontentÚPubDateÚContentStartÚ
ContentEndr   ú>r[   zdiv.art_conÚa)rp   rp   z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$r4   r   éÿÿÿÿ)rC   r'   é   z<p><a href="z">u!   </a></p>
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰F)Úensure_ascii)r^   rx   Úpub_dateÚattachments)r)   rc   rd   re   r   rJ   Úfindr$   r5   rT   Ú
select_onerG   rf   ri   Ú
IGNORECASErE   Úsplitr   rF   ÚlenÚjsonÚdumps)r'   r(   rk   rK   Úhtmlr^   Úmtr�   rP   Úcontent_textÚcsÚceÚafterÚrawÚattachments_listÚart_conÚa_tagÚhÚatÚfus                       r   Úextract_detailr—   ‚   s9  € ðÜ�#‹Jˆð 	‡}�}˜ÒØä˜Ÿ™ Ó/€DØ�6‰6€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(ˆð €LØ	�‰�>Ó	"€BØ	�‰�<Ó	 €BØ	ˆA‚v�"�q’&Ø—	‘	˜#˜rÓ"ˆØ�5˜1‘9˜RÐ ˆÜ& sÓ+ˆð ÐØ�o‰o˜mÓ,€GÙØ×%Ñ% c°Ð%Ó5ò 	AˆEØ�f‘ˆAÜ�y‰yÐ>ÀÄ2Ç=Á=ÕQØ—^‘^¨$�^Ó/ÒC°1·7±7¸3³<ÀÑ3C�Ü˜S !“_�Ø ×'Ñ'°¸BÑ(?Õ@ð	Aô ˆ<×ÑÓÓ  2Ò%Ø% c U¨"¨U¨GÐ3UÐVˆð ØØÙK[”t—z‘zÐ"2ÀÔGñ	ð ð bdñ	ð øôY ò Ü�
˜3˜%˜r ! Ð%¨TÕ2Üûðús   ‚G3 Ç3	HÇ<HÈHFc                 ó^  — t        dt        › d|› �d¬«       t        «       }|j                  «       }t	        «       }t        dt        |«      › �d¬«       |st        dd¬«       |j                  «        y|t        z  }|d | }t        dt        |«      › d	|› d
�d¬«       dx}}|D ]Ê  }	|	d   |	d   |	d   }}}
|j                  d|f«       |j                  «       r|dz  }Œ;t        |«      }|€|dz  }ŒN|d   rt        |d   «      t        |
«      kD  r|d   }
|d   }|d   }|j                  t        t        ||
|xs |d   |t        |f«       |dz  }| r|dk\  r nt        j                  d«       ŒÌ |j                  «        |j                  «        t        dt        › d|› d|› �d¬«       |S )Nú[z] Starting, max_pages=TrX   z  Total items from proxy: z  [ERROR] No items foundr   z  Taking first z items (z pages)r^   r'   r_   z)SELECT id FROM gov_raw WHERE page_url = ?r[   rx   r‚   r�   é
   g333333Ó?z] Done. Inserted=z
, Skipped=)rd   Ú	SITE_NAMEr   Úcursorrt   r‡   ÚcloseÚPER_PAGEr   Úfetchoner—   Ú
INSERT_SQLÚCATEGORYÚtimeÚsleepÚcommit)Ú	test_modeÚ	max_pagesr   ÚcurÚ	all_itemsÚ	max_itemsrm   Útotal_insertedÚtotal_skippedÚitemr^   r'   r_   Údetailrx   r‚   s                   r   Úcrawlr®   º   sÏ  € Ü	ˆAŒiˆ[Ð.¨y¨kÐ
:À$ÕGÜ‹9€DØ
�+‰+‹-€Cä“€IÜ	Ð&¤s¨9£~Ð&6Ð
7¸tÕDÙÜÐ(°Õ5Ø�
‰
ŒØàœHÑ$€IØ�j�yÐ!€EÜ	ˆOœC ›J˜< x°	¨{¸'Ð
BÈ$ÕOà%&Ð&€N�]Øò ˆØ ™=¨$¨u©+°t¸F±|�DˆsˆØ�‰Ð?À#ÀÔHØ�<‰<Œ>Ø˜QÑˆMØÜ Ó$ˆØˆ>Ø˜QÑˆMØØ�'Š?œs 6¨'¡?Ó3´c¸%³jÒ@Ø˜7‘OˆEØ˜Ñ#ˆØ˜]Ñ+ˆØ�‰”JÜ�s˜E 4Ò#=¨6°*Ñ+=Ø”X˜{ð!
ô 	ð 	˜!ÑˆÙ˜¨2Ò-ÙÜ�
‰
�3�ð+ð. 	‡K�K„MØ‡J�J„LÜ	ˆAŒiˆ[Ð)¨.Ð)9¸ÀMÀ?Ð
SÐ[_Õ`ØÐr   Ú__main__z--testé   z--max-pagesr[   )r¥   r¦   )rV   )#Ú__doc__rˆ   rf   Úsysr¢   r#   Úbs4r   Úurllib.parser   r   r›   r¡   ÚBASE_URLÚ	MAX_PAGESrž   r%   r    rb   ra   r   r)   r/   rT   rt   r—   r®   Ú__name__Úargvr¥   ÚmpÚindexÚidxr‡   Úint© r   r   ú<module>r¾      s  ðñ÷
 %× $Ó $Ý Ý  à
€Ø$€	Ø€Ø@€Ø€	Ø€ð DØOØ0ØDñ	€ð(€
ð
 ˜$¨¸ØÐ"9ÈSñ€
ð J€	òóòò0òfò45ðp  Yó +ð\ ˆzÒØ˜CŸH™HÐ$€IÙ‰˜Y€BØ˜Ÿ™Ñ Ø�h‰h�n‰n˜]Ó+ˆØ�‰7‘S˜Ÿ™“]Ò"Ù�S—X‘X˜c A™gÑ&Ó'ˆBÙ	�I¨Ö,ð r   