Ë
    ��vj  ã                   ó¸   — 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Z	dZ
e
› d�ZdZdde
› d	�d
œZdZdZeez   dz
  ez  Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u|   
æŽ‡åˆ€åŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (crawl_duodao_tzgg.py)
TRS jPage (dataproxy.jsp AJAX)
æ€»è®¡1407æ�¡, 94é¡µ(15æ�¡/é¡µ)
é    NÚduodao_tzggzhttps://www.duodao.gov.cnz/module/web/jpage/dataproxy.jspz/root/search.dbz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z!application/x-www-form-urlencodedz/col/col7563/index.html)ú
User-AgentzContent-TypeÚRefereri  é   é   c                 óP  — t         j                  j                  | |t        ddddddœ«      j	                  d«      }t         j
                  j                  t        |t        ¬«      }t         j
                  j                  |d	¬
«      }|j                  «       j                  dd¬«      S )z!Fetch one page from dataproxy APIÚ72809Ú39ú/Ú7563u   æŽ‡åˆ€åŒºäººæ°‘æ”¿åºœ)ÚstartrecordÚ	endrecordÚperpageÚunitidÚwebidÚpathÚcolumnidÚwebnameúutf-8)ÚdataÚheadersé   ©ÚtimeoutÚreplace©Úerrors)ÚurllibÚparseÚ	urlencodeÚPER_PAGEÚencodeÚrequestÚRequestÚ	PROXY_URLÚHEADERSÚurlopenÚreadÚdecode)r   r   ÚparamsÚreqÚresps        ú&/root/gov_crawler/crawl_duodao_tzgg.pyÚ
fetch_listr.      s�   € ä�\‰\×#Ñ#Ø"°Ü w¸Ø Ø*ñ	%ó ÷
 �vˆgƒð ô �.‰.×
 Ñ
 ¤°ÄÐ
 Ó
I€CÜ�>‰>×!Ñ! #¨rÐ!Ó2€DØ�9‰9‹;×Ñ˜g¨iÐÓ8Ð8ó    c                 óv  — g }t        j                  d| t         j                  «      D ]Ž  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      j	                  «       }|j                  d«      s	t        |z   }|j                  |||dœ«       Œ� |S )z"Extract articles from XML responsezJ<a[^>]*href="([^"]*)"[^>]*title="([^"]*)"[^>]*>.*?</a><span>([^<]*)</span>r   é   é   Úhttp)ÚtitleÚurlÚdate)ÚreÚfinditerÚDOTALLÚgroupÚstripÚ
startswithÚBASE_URLÚappend)ÚxmlÚarticlesÚmÚhrefr4   r6   s         r-   Ú
parse_listrC   $   s    € à€HÜ�[‰[ØUØŒR�Y‰Yóò 	Eˆð �w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ�w‰w�q‹z×ÑÓ!ˆØ�‰˜vÔ&Ü˜d‘?ˆDØ�‰ %°¸dÑCÕDð	Eð €Or/   c                 ó^  — 	 t         j                  j                  | dt        d   i¬«      }t         j                  j	                  |d¬«      }|j                  «       j                  dd¬«      }d}t        j                  d	|t        j                  «      }|r|j                  d
«      }n8t        j                  d|t        j                  «      }|r|j                  d
«      }|rNt        j                  dd|t        j                  ¬«      }t        j                  dd|t        j                  ¬«      }t        t        j                  dd|«      j                  «       «      }|dk\  r|S dS # t         j                  j                  $ r}|j                   dk(  rdndcY d}~S d}~wt"        $ r Y yw xY w)zFetch article detail contentr   )r   r   r   r   r   r   Ú zf<div[^>]*class="con zoom"[^>]*>.*?<div[^>]*class="main-txt"[^>]*id="content"[^>]*>(.*?)</div>\s*</div>r   z;<div[^>]*class="main-txt"[^>]*id="content"[^>]*>(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z<[^>]+>i”  N)r   r#   r$   r&   r'   r(   r)   r7   Úsearchr9   r:   ÚsubÚlenr;   ÚerrorÚ	HTTPErrorÚcodeÚ	Exception)r5   r+   r,   ÚhtmlÚcontentrA   Útext_lenÚes           r-   Úfetch_detailrR   4   si  € ðÜ�n‰n×$Ñ$ S°<ÄÈÑAVÐ2WÐ$ÓXˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<ˆØˆÜ�I‰IÐð  BFô  HJ÷  HQñ  HQó  RˆÙØ—g‘g˜a“j‰Gä—	‘	ÐXÐZ^Ô`b×`iÑ`iÓjˆAÙØŸ'™' !›*�ÙÜ—f‘fÐ9¸2¸wÌbÏiÉiÔXˆGÜ—f‘fÐ7¸¸WÌBÏIÉIÔVˆGÜ”r—v‘v˜j¨"¨gÓ6×<Ñ<Ó>Ó?ˆØ" bš.ˆwÐ0¨bÐ0øÜ�<‰<×!Ñ!ò +Ø—V‘V˜s’]‰r¨Õ*ûÜò Ùðús*   ‚E#E( Å&E( Å(F,ÆFÆF,ÆF,Æ+F,c                  óL  — t        j                  d«       dt        j                  v } t	        d«       | rdt
        fg}t	        dt
        › d�«       nWt        dt        dz   t
        «      D �cg c]  }|t        |t
        z   dz
  t        «      f‘Œ  }}t	        dt        |«      › d�«       g }t        «       }|D ]™  \  }}	 t        ||«      }t        |«      }d	}	|D ]4  }
|
d
   |vsŒ|j                  |
d
   «       |j                  |
«       |	dz  }	Œ6 t	        d|› d|› dt        |«      › d|	› dt        |«      › �
«       t!        j"                  d«       Œ› t	        dt        |«      › d�«       |sy t%        dd«      5 }t'        j(                  ||d¬«       d d d «       t	        d«       t	        d«       t+        j,                  t.        «      }|j1                  «       }|j3                  d«       |j5                  «        d	}d	}d	}t7        |«      D ]Ø  \  }}
|j3                  d|
d
   f«       |j9                  «       d	   d	kD  r|dz  }Œ8t;        |
d
   «      }|r;	 |j3                  d|
d   ||
d
   t<        |
d   f«       |j5                  «        |dz  }n|dz  }|d z  d	k(  s|t        |«      dz
  k(  r#t	        d!|› d"t        |«      › d#|› d$|› d%|› �
«       t!        j"                  d&«       ŒÚ |j?                  «        t	        d'«       t	        d(t        |«      › �«       t	        d)|› �«       t	        d*|› �«       t	        d+|› �«       y c c}w # t        $ r}t	        d|› d|› d|› �«       Y d }~�Œ0d }~ww xY w# 1 sw Y   �ŒãxY w# t        $ r}t	        d|› �«       Y d }~�Œ
d }~ww xY w),Nz/rootz--incrementalz === Phase 1: Collecting URLs ===r   zMode: INCREMENTAL (1 page, z items)zMode: FULL (z pages)r   r5   z  ú-z: z	 items, +z, total=z ERROR: gš™™™™™É?z
=== z articles collected ===z/tmp/duodao_articles.jsonÚwF)Úensure_asciiz"Saved to /tmp/duodao_articles.jsonz"
=== Phase 2: Fetching details ===z¼CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT, content TEXT, source_url TEXT UNIQUE,
        site_name TEXT, publish_date TEXT
    )z1SELECT COUNT(*) FROM gov_raw WHERE source_url = ?zjINSERT OR IGNORE INTO gov_raw (title, content, source_url, site_name, publish_date) VALUES (?, ?, ?, ?, ?)r4   r6   z  DB error: é2   z  [r   z] done=z skip=z empty=gš™™™™™¹?z
=== Done ===zTotal: z
Inserted: z	Skipped: zEmpty content: ) ÚosÚchdirÚsysÚargvÚprintr!   ÚrangeÚTOTAL_RECORDSÚminrI   Úsetr.   rC   Úaddr>   rM   ÚtimeÚsleepÚopenÚjsonÚdumpÚsqlite3ÚconnectÚTEMP_DBÚcursorÚexecuteÚcommitÚ	enumerateÚfetchonerR   Ú	SITE_NAMEÚclose)ÚincrementalÚpagesÚsÚall_articlesÚ	seen_urlsÚstartÚendr?   r@   ÚnewÚartrQ   ÚfÚconnÚcÚinsertedÚskippedÚemptyÚirO   s                       r-   Úmainr�   M   s¿  € Ü‡H�HˆWÔØ!¤S§X¡XÐ-€Kô 
Ð
,Ô-ÙØ”X��ˆÜÐ+¬H¨:°WÐ=Õ>ô   ¤=°1Ñ#4´hÓ?öAØð ”S˜œX™¨Ñ)¬=Ó9Ò:ð Aˆð Aä�œS ›Z˜L¨Ð0Ô1à€LÜ“€Iàò ‰
ˆˆsð	1Ü˜U CÓ(ˆCÜ! #“ˆHØˆCØò �Ø�u‘: YÒ.Ø—M‘M # e¡*Ô-Ø ×'Ñ'¨Ô,Ø˜1‘H‘Cð	ô
 �B�u�g˜Q˜s˜e 2¤c¨(£m _°I¸c¸UÀ(Ì3È|ÓK\ÐJ]Ð^Ô_ô 	�
‰
�3�ðô 
ˆF”3�|Ó$Ð%Ð%<Ð
=Ô>ÙØô 
Ð)¨3Ó	/ð 7°1Ü�	‰	�, °Õ6÷7ä	Ð
.Ô/ô 
Ð
/Ô0Ü�?‰?œ7Ó#€DØ�‰‹€AØ‡I�Ið 	ô 
ð
 	‡K�K„Mà€HØ€GØ€Eä˜LÓ)ò ‰ˆˆ3Ø	�	‰	ÐEÈÈEÉ
À}ÔUØ�:‰:‹<˜‰?˜QÒØ�q‰LˆGØä˜s 5™zÓ*ˆÙð*Ø—	‘	ð AØ˜‘\ 7¨C°©J¼	À3ÀvÁ;ÐOôð —‘”Ø˜A‘‘ð �Q‰JˆEàˆr‰6�QŠ;˜!œs <Ó0°1Ñ4Ò4Ü�C˜�s˜!œC Ó-Ð.¨g°h°Z¸vÀgÀYÈgÐV[ÐU\Ð]Ô^ä�
‰
�3�ð/ð2 	‡J�J„LÜ	ˆNÔÜ	ˆG”C˜Ó%Ð&Ð
'Ô(Ü	ˆJ�x�jÐ
!Ô"Ü	ˆI�g�YÐ
Ô Ü	ˆO˜E˜7Ð
#Õ$ùòYAøô$ ò 	1Ü�B�u�g˜Q˜s˜e 8¨A¨3Ð/×0Ò0ûð	1ú÷7ñ 7ûôD ò *Ü˜ Q CÐ(×)Ò)ûð*úsI   Á,#MÂ>%M	Ã$AM	Å:M4É9NÍ		M1ÍM,Í,M1Í4M>Î	N#Î
NÎN#Ú__main__)Ú__doc__re   rX   rZ   rb   r7   Úurllib.requestr   rg   ro   r=   r%   ri   r&   r^   r!   ÚTOTAL_PAGESr.   rC   rR   r�   Ú__name__© r/   r-   ú<module>rˆ      s–   ðñ÷
 8× 7× 7Ó 7à€	Ø&€ØˆjÐ7Ð8€	Ø
€àPØ7Ø�Ð2Ð3ñ€ð
 €Ø€Ø˜xÑ'¨!Ñ+°Ñ8€ò
9òò ò2V%ðr ˆzÒÙ…Fð r/   