Ë
    ¸¬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 ddl	Z	 e	j                  dd«      ZdZdZdZ ej                  «        ed	¬
«      z
  j!                  d«      ZddiZ ej&                  «       Zej*                  j-                  e«       d„ Zd„ Zedk(  r e«        yy)uo   
Crawl ä¸ƒå�°æ²³å¸‚èŒ„å­�æ²³åŒºäººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š
API: /common/search/{channelId}?page=N&_pageSize=20
é    N)ÚdatetimeÚ	timedeltaÚ	SEARCH_DBz/root/search.dbu   èŒ„å­�æ²³åŒº - å…¬ç¤ºå…¬å‘Šzhttps://www.hljqzh.gov.cnzHhttps://www.hljqzh.gov.cn/common/search/362d996da26d459fade0f1ed3aca449aiG  )Údaysz%Y-%m-%dz
User-AgentzMozilla/5.0c           	      ó  — t         j                  | d¬«      }d|_        |j                  }t	        d«      j                  d|«      }|r|j                  d«      j                  «       nd}t	        d«      j                  d|«      }|r|j                  d«      d	d
 nd}t	        d«      j                  d|t	        d«      j                  «      }|r²|j                  d«      j                  «       }t	        d«      j                  dd|t	        d«      j                  t	        d«      j                  z  ¬«      }t	        d«      j                  dd|t	        d«      j                  t	        d«      j                  z  ¬«      }|||fS ||dfS )z.Extract title, date, content from detail page.é   ©Útimeoutzutf-8Úrez+<meta name="ArticleTitle" content="([^"]*)"é   Ú z&<meta name="PubDate" content="([^"]*)"Né
   z3<div class="wenzi">(.*?)</div>\s*<div class="othersz<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>)ÚsessionÚgetÚencodingÚtextÚ
__import__ÚsearchÚgroupÚstripÚDOTALLÚsubÚI)	ÚurlÚrespÚhtmlÚtmÚtitleÚdmÚdate_strÚcmÚcontents	            ú/root/gov_crawler/crawl_qzh.pyÚfetch_detailr%      s†  € ä�;‰;�s Bˆ;Ó'€DØ€D„MØ�9‰9€Dô 
�DÓ	×	 Ñ	 Ð!OÐQUÓ	V€BÙ#%ˆB�H‰H�Q‹K×ÑÔ¨2€Eô 
�DÓ	×	 Ñ	 Ð!JÈDÓ	Q€BÙ#%ˆr�x‰x˜‹{˜3˜BÑ¨2€Hô 
�DÓ	×	 Ñ	 Ð!WÐY]Ô_iÐjnÓ_o×_vÑ_vÓ	w€BÙ	Ø—(‘(˜1“+×#Ñ#Ó%ˆÜ˜TÓ"×&Ñ&Ð'CÀRÈÔXbÐcgÓXh×XoÑXoÔpzÐ{ó  qA÷  qCñ  qCñ  YCÐ&ó  DˆÜ˜TÓ"×&Ñ&Ð'AÀ2ÀwÔV`ÐaeÓVf×VmÑVmÔnxÐy}Ón~÷  oAñ  oAñ  WAÐ&ó  BˆØ�h Ð'Ð'à�(˜BÐÐó    c                  ó$
  — dt         j                  v } t        dt        › d�«       t        j                  t        › d�d¬«      }|j                  «       }|d   d   }|d	z   d
z  }t        d|› d|› �«       | rdn|}t        j                  t        «      }|j                  «       }d\  }}	}
d}d}t        j                  «       }t        d|dz   «      D �]›  }	 t        j                  t        › d|› �d¬«      }|j                  «       }|d   d   }|s �n]|D �cg c]  }|j                  dd«      d d ‘Œ }}t!        d„ |D «       «      }|r!|dz  }|dk\  r||k\  rt        d|› d�«        �nd}d}|D �]Ã  }|j                  d«      xs dd d }|r|t"        k  r|
dz  }
Œ-|j                  d«      xs dj%                  «       }|j                  dd«      }|j'                  d«      r	t(        |z   n|}|j+                  d|f«      j-                  «       }|r|	dz  }	Œ§	 t/        |«      \  }}}|xs |}|xs |}t1        t3        j4                  |j7                  «       «      j9                  «       d d! d"«      d#z  } |rt1        |j;                  d$d«      «      nd}!|rt=        d%«      j?                  d&d|«      d d' n|}"t=        d%«      j?                  d(d)|"«      j%                  «       }"	 |j+                  d*| t        ||||||"|!f	«       |j@                  dkD  r|dz  }|dz  }n|	dz  }	t        j                  d,«       �ŒÆ t        j                  «       |z
  }#t        d|› d|› d-|› d.|	› d/|
› d0|#d1›d2�«       �Œž |jC                  «        	 |j                  «       }$|$j+                  d3t        f«       |$j+                  d4t        f«      jE                  «       }%|$jG                  d5|%«       |jC                  «        t        d6tI        |%«      › d7�«       |jK                  «        t        j                  «       |z
  }#t        d9|#d1›d:|› d;|	› d<|
› �«       y # t        $ r1}t        d|› d|› �«       t        j                  d«       Y d }~�Œ«d }~ww xY wc c}w # t        $ r.}t        d |› �«       t        j                  d«       Y d }~�ŒKd }~ww xY w# t        $ r}t        d+|› �«       |	dz  }	Y d }~�ŒÆd }~ww xY w# t        $ r}t        d8|› �«       Y d }~�Œd }~ww xY w)=NÚincrementalz=== z ===z??_isAgg=false&_isJson=true&_pageSize=20&_template=index&_page=1r   r	   ÚdataÚtotalé   é   zTotal: z	, Pages: r   )r   r   r   r   é   z=?_isAgg=false&_isJson=true&_pageSize=20&_template=index&page=Úresultsz  [ERROR] Page z: é   ÚpublishedTimeStrr   r   c              3   ó4   K  — | ]  }|sŒ|t         k  –— Œ y ­w)N)ÚCUTOFF_DATE)Ú.0Úds     r$   ú	<genexpr>zmain.<locals>.<genexpr>O   s   è ø€ Ò:¨!º�aœ+•oÑ:ùs   ‚Šz  Page z: all old, stoppingr   r   ú/zNSELECT 1 FROM gov_raw WHERE page_url=? AND content IS NOT NULL AND content!=''z  [ERROR] Detail: é   é   l            ú-r   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] g333333Ó?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_NAMEr   r   ÚAPI_URLÚjsonÚsqlite3ÚconnectÚDB_PATHÚcursorÚtimeÚrangeÚ	ExceptionÚsleepÚallr2   r   Ú
startswithÚBASE_URLÚexecuteÚfetchoner%   ÚintÚhashlibÚmd5ÚencodeÚ	hexdigestÚreplacer   r   ÚrowcountÚcommitÚfetchallÚexecutemanyÚlenÚclose)&Úis_incrementalr   r)   r*   Útotal_pagesÚ	max_pagesÚconnÚcÚinsertedÚskippedÚ	old_totalÚconsecutive_oldÚ	min_pagesÚ
start_timeÚpgÚitemsÚeÚiÚdatesÚall_oldÚpage_newÚitemÚpub_dater   Úrel_urlÚpage_urlÚhasÚdetail_titleÚdetail_dater#   Úfinal_titleÚ
final_dateÚint_idÚ	date_rankÚsummaryÚelapsedÚc2Úrowss&                                         r$   Úmainr|   ,   s4  € Ø"¤c§h¡hÐ.€NÜ	ˆD”�˜4Ð
 Ô!ô �;‰;œ'˜Ð"aÐbÐlnˆ;Óo€DØ�9‰9‹;€DØ�‰L˜Ñ!€EØ˜2‘: "Ñ$€KÜ	ˆG�E�7˜) K =Ð
1Ô2á#‘¨€Iä�?‰?œ7Ó#€DØ�‰‹€AØ#*Ñ €Hˆg�yØ€OØ€IÜ—‘“€Jä�A�y 1‘}Ó%ó Jmˆð	Ü—;‘;¤' Ð*gÐhjÐgkÐlÐvx�;ÓyˆDØ—9‘9“;ˆDØ˜‘L Ñ+ˆEñ Úð >CÖC¸�—‘Ð)¨2Ó.¨s°Ò3ÐCˆÐCÜÑ:¨uÔ:Ó:ˆÙØ˜qÑ ˆOØ !Ò#¨¨iªÜ˜ ˜tÐ#6Ð7Ô8ÚàˆOàˆØó .	ˆDØŸ™Ð!3Ó4Ò:¸¸C¸RÐ@ˆHÙ˜H¤{Ò2Ø˜Q‘�	Øà—X‘X˜gÓ&Ò,¨"×3Ñ3Ó5ˆEØ—h‘h˜u bÓ)ˆGØ-4×-?Ñ-?ÀÔ-D”x 'Ò)È'ˆHà—)‘)ÐnÐqyÐp{Ó|÷  Fñ  Fó  HˆCÙØ˜1‘�ØðÜ5AÀ(Ó5KÑ2�˜k¨7ð 'Ò/¨%ˆKØ$Ò0¨ˆJô œŸ™ X§_¡_Ó%6Ó7×AÑAÓCÀCÀRÐHÈ"ÓMÐQVÑWˆFÙ<Fœ˜J×.Ñ.¨s°BÓ7Ô8ÈAˆIáMT”j Ó&×*Ñ*¨:°r¸7ÓCÀDÀSÑIÐZeˆGÜ  Ó&×*Ñ*¨6°3¸Ó@×FÑFÓHˆGðØ—	‘	ð eØœY¨°(¸KÈÐU\Ð^eÐgpÐqôð —:‘: ’>Ø ‘M�HØ ‘M‘Hà˜q‘L�Gô
 �J‰J�sŽOð].	ô` —)‘)“+ 
Ñ*ˆÜ�˜�t˜1˜Y˜K s¨8¨*°J¸w¸iÀvÈiÈ[ÐX[Ð\cÐdgÐ[hÐhjÐkÖlðUJmðX 	‡K�K„Mð#Ø�[‰[‹]ˆØ
�
‰
ÐeÔhqÐgsÔtØ�z‰zÐ_ÔbkÐamÓn×wÑwÓyˆØ
�‰ÐkÐmqÔrØ�‰ŒÜ�œ˜D›	�{Ð"2Ð3Ô4ð 	‡J�J„LÜ�i‰i‹k˜JÑ&€GÜ	ˆH�W˜S�M ¨x¨j¸
À7À)È6ÐR[ÐQ\Ð
]Õ^øôm ò 	Ü�O B 4 r¨!¨Ð-Ô.Ü�J‰J�qŒMÝûð	üò Døô8 ò ÜÐ*¨1¨#Ð.Ô/Ü—
‘
˜1”Ýûðûô2 ò Ü˜ ˜s�mÔ$Ø˜1‘–ûðûô& ò #Ü�˜a˜SÐ!×"Ò"ûð#úsg   Ã8QÄRÈR	Ë!>SÎBS- Ñ	RÑ&Q<Ñ<RÒ		S Ò#R;Ò;S Ó	S*ÓS%Ó%S*Ó-	TÓ6T
Ô
TÚ__main__)Ú__doc__ÚrequestsrA   rB   r<   rF   rP   r   r   ÚosÚgetenvrD   r?   rL   r@   ÚnowÚstrftimer2   ÚHEADERSÚSessionr   ÚheadersÚupdater%   r|   Ú__name__© r&   r$   ú<module>rŠ      s¬   ðñ÷ 3× 2× 2ß (Û 	à
ˆ"�)‰)�KÐ!2Ó
3€Ø)€	Ø&€Ø
T€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€à˜Ð
'€Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò0o_ðb ˆzÒÙ…Fð r&   