Ë
    :}j  ã                   ó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ZddlZddlmZm	Z	 ddl
Z
 e
j                  dd«      ZdZdZ ej                  «        e	d¬	«      z
  j!                  d
«      ZdZdddœZ ej(                  «       Zej,                  j/                  e«       efd„Zd„ Zedk(  r e«        yy)ul   Crawl å®œæ˜¥å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯ä¿�å…¬å‘Š via API
http://sthjj.yichun.gov.cn/ycssthjj/hbgg/pc/list.html
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu'   å®œæ˜¥å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯ä¿�å…¬å‘Šz%https://sthjj.yichun.gov.cn/queryListiG  )Údaysz%Y-%m-%dé   z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zapplication/json)z
User-AgentzContent-Typec                 óL  — | |ddœ}t         j                  t        |d¬«      }|j                  «       }d|vrg dfS |d   j	                  dd«      }|d   j	                  dg «      }g }|D �],  }|d	   }	|	j	                  d
d«      j                  «       }
|	j	                  d«      r|	j	                  dd«      dd nd}|	j	                  di «      }t        |t        «      r|j	                  dd«      }nt        |t        «      r|}nd}|	j	                  di «      }t        |t        «      r	 t        j                  |«      }d}t        |t        «      r|j	                  dd«      }|r|j                  d«      sd|z   }|
s�Œ|s�Œ|j                  |
|||dœ«       �Œ/ ||fS #  i }Y ŒgxY w)zFetch one page from the APIÚhbgg)ÚcurrentÚpageSizeÚchannelCodeé   )ÚjsonÚtimeoutÚdatar   ÚtotalÚresultsÚsourceÚtitleÚ ÚpubDateNé
   ÚcontentÚurlsÚpcÚhttpzhttp://sthjj.yichun.gov.cn)r   ÚurlÚdater   )ÚsessionÚpostÚAPI_URLr   ÚgetÚstripÚ
isinstanceÚdictÚstrÚloadsÚ
startswithÚappend)ÚpageÚ	page_sizeÚpayloadÚrespr   r   r   ÚitemsÚrÚsr   Úpub_dateÚcontent_objr   r   r   s                   ú /root/gov_crawler/crawl_yc_hb.pyÚ
fetch_pager3      s«  € ð ØØñ€Gô
 �<‰<œ g°rˆ<Ó:€DØ�9‰9‹;€DØ�TÑØ�1ˆuˆØ�‰L×Ñ˜W aÓ(€EØ�6‰l×Ñ˜y¨"Ó-€GØ€EØó ˆØˆh‰KˆØ—‘�g˜rÓ"×(Ñ(Ó*ˆØ01·±°iÔ0@�1—5‘5˜ BÓ'¨¨Ñ,Àbˆà—e‘e˜I rÓ*ˆÜ�k¤4Ô(Ø!—o‘o i°Ó4‰GÜ˜¤SÔ)Ø!‰GàˆGà�u‰u�V˜RÓ ˆÜ�dœCÔ ðÜ—z‘z $Ó'�ð ˆÜ�dœDÔ!Ø—(‘(˜4 Ó$ˆCÙ�s—~‘~ fÔ-Ø.°Ñ4ˆCã“SØ�L‰LØØØ Ø"ñ	ö ð5ð@ �%ˆ<ÐøðØ’ús   Ä'FÆF#c                  óÒ  — dt         j                  v } t        dt        › d�«       t	        j
                  t        «      }|j                  «       }d\  }}}t        j                  «       }t        dd«      \  }}|r|t        z   dz
  t        z  nd}	| rdn|	}
t        d|› d|	› d	|
› �«       d
}d}t        d|
dz   «      D �]@  }	 t        |«      \  }}|st        d|› d�«        �nt        d„ |D «       «      }|r!|dz  }|dk\  r||k\  rt        d|› d�«        �nèd
}|D �]§  }|d   r|d   t        k  r|dz  }Œ|j!                  d|d   f«      j#                  «       }|r|dz  }ŒG|d   }|rpt%        j&                  dd|t$        j(                  t$        j*                  z  ¬«      }t%        j&                  dd|t$        j(                  t$        j*                  z  ¬«      }|d   }|d   }t-        t/        j0                  |d   j3                  «       «      j5                  «       d d d«      dz  }|rt-        |j7                  dd«      «      nd
}|rt%        j&                  d d|«      d d! n|}t%        j&                  d"d#|«      j9                  «       }	 |j!                  d$|t        |d   |d   |||||f	«       |j:                  d
kD  r|dz  }�Œª t        j                  «       |z
  }t        d|› d&|
› d'|› d(|› d)|› d*|d+›d,�«       �ŒC |j=                  «        	 |j                  «       }|j!                  d-t        f«       |j!                  d.t        f«      j?                  «       }|D ]  }|j!                  d/|«       Œ |j=                  «        t        d0tA        |«      › d1�«       |jC                  «        t        j                  «       |z
  }t        d3|d+›d4|› d5|› d6|› �«       y # t        $ r1}t        d|› d|› �«       t        j                  d«       Y d }~�ŒWd }~ww xY w# t        $ r}t        d%|› �«       |dz  }Y d }~�Œ!d }~ww xY w# t        $ r}t        d2|› �«       Y d }~ŒÃd }~ww xY w)7NÚincrementalz=== z ===)r   r   r   é   r   z  Total articles: z	, pages: z, crawling: r   é   z  [ERROR] Page z: é   z  Page z: 0 items (end)c              3   óN   K  — | ]  }|d    sŒ	|d    xr |d    t         k  –— Œ y­w)r   N)ÚCUTOFF_DATE)Ú.0Úitems     r2   ú	<genexpr>zmain.<locals>.<genexpr>d   s.   è ø€ ÒdÀdÐW[Ð\bÓWc�d˜6‘lÒA t¨F¡|´kÑ'AÓAÑdùs   ‚
%�%z: all old, stoppingr   zNSELECT 1 FROM gov_raw WHERE page_url=? AND content IS NOT NULL AND content!=''r   r   z<script[^>]*>.*?</script>r   )Úflagsz<style[^>]*>.*?</style>r   r   é   l            ú-z<[^>]+>éÈ   z\s+ú zŽINSERT OR IGNORE INTO gov_raw(id, site_name, source_url, page_url, title, publish_date, content, summary, date_rank) VALUES(?,?,?,?,?,?,?,?,?)z  [DB] ú/z: +z
 (skipped z, >3y z) [z.0fzs]zPDELETE FROM gov_search WHERE rowid IN (SELECT id FROM gov_raw WHERE site_name=?)zCSELECT id, title, site_name, summary FROM gov_raw WHERE site_name=?zRINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES(?,?,?,?)z  FTS: z records rebuiltz  FTS error: z
Done (zs). Inserted z
, Skipped z, Old )"ÚsysÚargvÚprintÚ	SITE_NAMEÚsqlite3ÚconnectÚDB_PATHÚcursorÚtimer3   Ú	PAGE_SIZEÚrangeÚ	ExceptionÚsleepÚallr:   ÚexecuteÚfetchoneÚreÚsubÚDOTALLÚIÚintÚhashlibÚmd5ÚencodeÚ	hexdigestÚreplacer"   ÚrowcountÚcommitÚfetchallÚlenÚclose)Úis_incrementalÚconnÚcÚinsertedÚskippedÚ	old_totalÚ
start_timeÚ_r   Útotal_pagesÚ	max_pagesÚconsecutive_oldÚ	min_pagesÚpgr-   ÚeÚall_oldr<   Úhasr   Úfinal_titleÚ
final_dateÚint_idÚ	date_rankÚsummaryÚelapsedÚc2Úrowsr.   s                                r2   Úmainr{   F   s€  € Ø"¤c§h¡hÐ.€NÜ	ˆD”�˜4Ð
 Ô!ä�?‰?œ7Ó#€DØ�‰‹€AØ#*Ñ €Hˆg�yÜ—‘“€Jô ˜!˜QÓ�H€A€uÙ:?�5œ9Ñ$ qÑ(¬YÒ6ÀR€KÙ#‘¨€IÜ	Ð˜u˜g Y¨{¨m¸<È	À{Ð
SÔTà€OØ€Iä�A�y 1‘}Ó%ó 7mˆð	Ü! "“~‰HˆE�1ñ Ü�G˜B˜4˜Ð/Ô0ÚäÑdÈeÔdÓdˆÙØ˜qÑ ˆOØ !Ò#¨¨iªÜ˜ ˜tÐ#6Ð7Ô8ÚàˆOàó 	ˆDØ�FŠ|  V¡¬{Ò :Ø˜Q‘�	Øà—)‘)ÐlÐosÐtyÑozÐn|Ó}÷  Gñ  Gó  IˆCÙØ˜1‘�Øà˜9‘oˆGÙÜŸ&™&Ð!=¸rÀ7ÔRT×R[ÑR[Ô\^×\`Ñ\`ÑR`Ôa�ÜŸ&™&Ð!;¸RÀÔPR×PYÑPYÔZ\×Z^ÑZ^ÑP^Ô_�à˜w™-ˆKØ˜f™ˆJÜœŸ™ T¨%¡[×%7Ñ%7Ó%9Ó:×DÑDÓFÀsÈÐKÈRÓPÐTYÑZˆFÙ<Fœ˜J×.Ñ.¨s°BÓ7Ô8ÈAˆIÙ?F”b—f‘f˜Z¨¨WÓ5°d°sÑ;ÈKˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð	Ø—	‘	ð eØœY¨¨U©°T¸%±[À+ÈzÐ[bÐdkÐmvÐwôð —:‘: ’>Ø ‘M�Hùð9	ôB —)‘)“+ 
Ñ*ˆÜ�˜�t˜1˜Y˜K s¨8¨*°J¸w¸iÀvÈiÈ[ÐX[Ð\cÐdgÐ[hÐhjÐkÖlðo7mðr 	‡K�K„Mð	#Ø�[‰[‹]ˆØ
�
‰
ÐeÔhqÐgsÔtØ�z‰zÐ_ÔbkÐamÓn×wÑwÓyˆØò 	pˆAØ�J‰JÐkÐmnÕoð	pà�‰ŒÜ�œ˜D›	�{Ð"2Ð3Ô4ð 	‡J�J„LÜ�i‰i‹k˜JÑ&€GÜ	ˆH�W˜S�M ¨x¨j¸
À7À)È6ÐR[ÐQ\Ð
]Õ^øôI ò 	Ü�O B 4 r¨!¨Ð-Ô.Ü�J‰J�qŒMÝûð	ûô^ ò Ü˜ ˜s�mÔ$Ø˜1‘–ûðûô" ò #Ü�˜a˜SÐ!×"Ñ"ûð#úsI   ÃOÊ9PÌBQ Ï	PÏ'&PÐPÐ	QÐ$P=Ð=QÑ	Q&ÑQ!Ñ!Q&Ú__main__)Ú__doc__ÚrequestsrT   rH   rD   rL   rY   r   r   r   ÚosÚgetenvrJ   rG   r    ÚnowÚstrftimer:   rM   ÚHEADERSÚSessionr   ÚheadersÚupdater3   r{   Ú__name__© ó    r2   ú<module>rŠ      s»   ðñ÷ 7× 6× 6Ó 6ß (Û 	à
ˆ"�)‰)�KÐ!2Ó
3€Ø5€	Ø
1€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€Ø€	ð QØ&ñ€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ à(ó .ò`Y_ðv ˆzÒÙ…Fð r‰   