Ë
    ¸¬uj¹  ã                   ó  — 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mZmZ  ej                  dd«      Z
dZdZdZd	dd
œZdZdZ ej"                  «       Zej&                  j)                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u1   crawl_nmgfzw.py - å†…è’™å�¤æ³•æ²»ç½‘-å…¬å‘Šå£°æ˜Žé    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   å†…è’™å�¤æ³•æ²»ç½‘-å…¬å‘Šå£°æ˜Žz0http://www.nmgfzw.org.cn/interface/LoadMores.phpz#http://www.nmgfzw.org.cn/html/ggsm/z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36)z
User-AgentÚRefererz
2023-06-19é   c                 ó’  — 	 t         j                  t        | ddddœd¬«      }|j                  «       }g }|D ]d  }|j	                  dd«      j                  «       }|j	                  d	d«      }|j	                  d
d«      }|t        k  rŒQ|j                  |||f«       Œf |S # t        $ r}t        d| › d|› �d¬«       Y d}~yd}~ww xY w)z Fetch one page of items from APIé   é
   Úarticle)ÚpagesizeÚclassidÚ	pagecountÚchannelé   )ÚdataÚtimeoutÚtitleÚ ÚarcurlÚpubdateú  Page z error: T©ÚflushN)
ÚsessionÚpostÚAPI_URLÚjsonÚgetÚstripÚCUTOFF_DATEÚappendÚ	ExceptionÚprint)	Úpage_numÚrr   ÚitemsÚitemr   ÚurlÚdate_strÚes	            ú!/root/gov_crawler/crawl_nmgfzw.pyÚ
fetch_pager,      sÛ   € ðÜ�L‰LœØ ØØØ ñ	(
ð
 ð ó ˆð �v‰v‹xˆØˆØò 	1ˆDØ—H‘H˜W bÓ)×/Ñ/Ó1ˆEØ—(‘(˜8 RÓ(ˆCØ—x‘x 	¨2Ó.ˆHØœ+Ò%ØØ�L‰L˜#˜u hÐ/Õ0ð	1ð ˆøÜò Ü�˜�z ¨!¨Ð-°TÕ:Üûðús   ‚BB  Â 	CÂ)CÃCc                 óz  — | j                  d«      }|dk  r3| j                  d«      }|dk\  r| d| }|j                  d«      }|dk\  r|}|dk  ryd}|}d}d}|t        | «      k  rÖ| |   dk(  rd}|}nµ| |   d	k(  r­|r©| ||d
z    }d}|j                  d«      rŒA|j                  d«      r"|d
z  }|dk(  rr| ||d
z    }	|	j	                  «       S |j                  d«      sI|j                  d«      s8|j                  d«      s'|j                  d«      s|j                  d«      r|d
z  }d}|d
z  }|t        | «      k  rŒÖy)z(Extract article content from detail pagez<div class="content"r   zclass="content"Nz<divFú<Tú>é   z<!--z</divz<brz<imgz<inputz<hr)ÚfindÚrfindÚlenÚ
startswithr   )
ÚhtmlÚstartÚprefixÚ	div_startÚdepthÚiÚin_tagÚ	tag_startÚtagÚcontents
             r+   Úextract_contentr?   0   sz  € ð �I‰IÐ,Ó-€EØˆq‚yØ—	‘	Ð+Ó,ˆØ�AŠ:Ø˜&˜5�\ˆFØŸ™ VÓ,ˆIØ˜AŠ~Ø!�àˆq‚yØð €EØ€AØ€FØ€IØ
Œc�$‹iŠ-Ø�‰7�cŠ>ØˆFØ‰IØ�!‰W˜Š^ÙØ˜9 Q q¡SÐ)�Ø�Ø—>‘> &Ô)ØØ—>‘> 'Ô*Ø˜Q‘J�EØ ’zØ"& u¨Q¨q©S /˜ð  'Ÿ}™}›Ð.ØŸ™¨Ô.°s·~±~ÀfÔ7MÐVY×VdÑVdÐemÔVnÐwz÷  xFñ  xFð  GLô  xMØ—~‘~ fÔ-Ø ™
˜ØˆFØ	ˆQ‰ˆð+ Œc�$‹i‹-ð, ó    c                 ó–   — 	 t         j                  | d¬«      }d|_        t        |j                  «      S # t
        $ r
}Y d}~yd}~ww xY w)z%Fetch detail page and extract contentr   ©r   úutf-8N)r   r   Úencodingr?   Útextr"   )r(   r%   r*   s      r+   Úfetch_detailrF   \   sB   € ðÜ�K‰K˜ RˆKÓ(ˆØˆŒ
Ü˜qŸv™vÓ&Ð&øÜò Üûðús   ‚25 µ	AÁAc           	      ó"  — t        j                  t        «      }|j                  «       }d}d}d}t	        | «      D ]}  \  }\  }}}		 t        |«      }
|
st        d|d d › �d¬«       |dz  }Œ1|j                  dt        |||	|
f«       |j                  dkD  r|dz  }|dz  dk(  r|j                  «        n|dz  }Œ |j                  «        |j                  «        |||fS # t        $ r%}t        d	|d d › d
|› �d¬«       |dz  }Y d }~ŒÎd }~ww xY w)Nr   z  [SKIP] No content: é(   Tr   r0   zhINSERT OR IGNORE INTO gov_raw (site_name, title, page_url, publish_date, content) VALUES (?, ?, ?, ?, ?)é   z  [ERR] ú: )Úsqlite3ÚconnectÚDB_PATHÚcursorÚ	enumeraterF   r#   ÚexecuteÚ	SITE_NAMEÚrowcountÚcommitr"   Úclose)r&   ÚconnÚcÚ	new_countÚ
skip_countÚerror_countÚidxr(   r   r)   r>   r*   s               r+   Ú
save_to_dbr[   e   s-  € Ü�?‰?œ7Ó#€DØ�‰‹€Aà€IØ€JØ€Kä'0°Ó'7ò Ñ#ˆÑ#ˆc�5˜(ð	Ü" 3Ó'ˆGÙÜÐ-¨e°C°R¨j¨\Ð:À$ÕGØ˜qÑ �Øà�I‰IØzÜ˜E 3¨°'Ð:ôð �z‰z˜AŠ~Ø˜Q‘�	Ø˜r‘> QÒ&Ø—K‘K•Mà˜a‘�
øð#ð, 	‡K�K„MØ‡J�J„LØ�j +Ð-Ð-øô ò 	Ü�H˜U 3 B˜Z˜L¨¨1¨#Ð.°dÕ;Ø˜1Ñ�Kûð	ús   Á%C Á,AC Ã 	DÃ)D	Ä	Dc            
      óÈ  — t        dt        › d�d¬«       t        dt        › �d¬«       g } 	 t        j	                  t
        d¬«      }d|_        t        j                  d	|j                  t        j                  «      D ]¤  }|j                  d
«      }t        j                  d|«      }t        j                  d|«      }|sŒC|sŒF|j                  d
«      }|j                  d«      j                  «       }|j                  d
«      }|t        k\  sŒ‘| j                  |||f«       Œ¦ | r#t        dt        | «      › d| d   d   › d�d¬«       t#        d
t$        d
z   «      D ]�  }
t'        |
«      }|€t        d|
› d�d¬«       Œ"|st        d|
› d�d¬«        nM| j)                  |«       t        d|
› dt        |«      › d|d   d   › d�d¬«       |sŒq|d   d   t        k  sŒ� n t        dt        | «      › �d¬«       | st        dd¬«       y t+        | «      \  }}}t        dd¬«       t        d|› d|› d|› �d¬«       y # t         $ r}	t        d|	› �d¬«       Y d }	~	�Œd }	~	ww xY w)Nz=== z ===Tr   zCutoff: r   rB   rC   z<li>(.*?)</li>r0   z4<h3[^>]*><a[^>]*href="([^"]+)"[^>]*>([^<]+)</a></h3>z(\d{4}-\d{2}-\d{2})é   z  Pre-rendered: z items (last: éÿÿÿÿú)z  First page error: r   z: errorz: empty (stopping)rJ   z
Total items to process: zNo new items found.z
=== Summary ===zNew: z, Skipped: z
, Errors: )r#   rQ   r    r   r   ÚLIST_URLrD   ÚreÚfinditerrE   ÚSÚgroupÚsearchr   r!   r3   r"   ÚrangeÚ	MAX_PAGESr,   Úextendr[   )Ú	all_itemsr%   ÚmÚ	item_htmlÚtitle_mÚdate_mr(   r   r)   r*   Úpager&   rW   rX   rY   s                  r+   Úmainro   ‡   sZ  € Ü	ˆD”�˜4Ð
 ¨Õ-Ü	ˆH”[�MÐ
"¨$Õ/à€Ið6Ü�K‰Kœ¨"ˆKÓ-ˆØˆŒ
Ü—‘Ð.°·±¼¿¹Ó=ò 		=ˆAØŸ™ ›
ˆIÜ—i‘iÐ WÐYbÓcˆGÜ—Y‘YÐ5°yÓAˆFÚš6Ø—m‘m AÓ&�ØŸ™ aÓ(×.Ñ.Ó0�Ø!Ÿ<™<¨›?�Øœ{Ó*Ø×$Ñ$ c¨5°(Ð%;Õ<ð		=ñ ÜÐ$¤S¨£^Ð$4°NÀ9ÈRÁ=ÐQRÑCSÐBTÐTUÐVÐ^bÕcô �aœ Q™Ó'ò ˆÜ˜4Ó ˆØˆ=Ü�G˜D˜6 Ð)°Õ6ØÙÜ�G˜D˜6Ð!3Ð4¸DÕAÙØ×Ñ˜ÔÜ�˜�v˜R¤ E£
˜|¨>¸%À¹)ÀA¹,¸ÀqÐIÐQUÕVò �U˜2‘Y˜q‘\¤KÓ/Ùðô 
Ð&¤s¨9£~Ð&6Ð
7¸tÕDáÜÐ#¨4Õ0Øä)3°IÓ)>Ñ&€Iˆz˜;ä	Ð dÕ+Ü	ˆE�)�˜K¨
 |°:¸k¸]Ð
KÐSWÖXøô7 ò 6ÜÐ$ Q CÐ(°×5Ó5ûð6ús+   ­BH= ÃH= ÃA
H= Ä;H= È=	I!ÉIÉI!Ú__main__)Ú__doc__Úrequestsra   rK   ÚosÚsysr   r   r   ÚgetenvrM   rQ   r   r`   ÚHEADERSr    rg   ÚSessionr   ÚheadersÚupdater,   r?   rF   r[   ro   Ú__name__© r@   r+   ú<module>r|      s«   ðá 7Û Û 	Û Û 	Û 
Û ß (à
ˆ"�)‰)�KÐ!2Ó
3€Ø-€	Ø
<€Ø0€àPØ4ñ€ð €Ø€	à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò.*òXò .òD1Yðf ˆzÒÙ…Fð r@   