Ë
    ¸¬ujf  ã            
       ó’  — 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	m
Z
  ej                  dd«      ZdZdZd	Zd
ZdZdZdZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd*d„Zd„ Zedk(  rÛ eej@                  «      dkD  rej@                  d   ndZ!e!dk(  r e«        ye!dk(  r e«        ye!dk(  r• ee› de› de› �«      Z"e"re"jG                  dg «      ng Z$ ed  ee$«      › d!�«       e$dd" D ]T  Z% ejL                  e%jG                  d#d«      «      jO                  d$«      Z( e)d%e(› d&e%jG                  d'd(«      dd) › �«       ŒV yyy)+u]   
Crawler: æ¢…å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€è•‰å²­åˆ†å±€ - å…¶ä»– (gkmlpt)
API: Lonsun gkmlpt platform
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupÚ	SEARCH_DBz/root/search.dbu   è•‰å²­åŽ¿ç”Ÿæ€�çŽ¯å¢ƒu   å…¶ä»–u   å¹¿ä¸œi§/  zhttps://www.jiaoling.gov.cnz"http://www.jiaoling.gov.cn/mzqlhbjÚ753227)z.docz.docxz.pdfz.xlsz.xlsxz.pptz.pptxz.zipz.rarz.7zz.tarz.gzz.txtc                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚSITE)Úmsgs    ú(/root/gov_crawler/crawl_jiaoling_gkml.pyÚlogr      s   € Ü	ˆAŒdˆV�2�c�UÐ
 4Ö(ó    c           	      óÊ   — 	 t        j                  dddddd| gddd¬	«      }t        j                  |j                  «      S # t
        $ r}t        d
|› �«       Y d }~y d }~ww xY w)NÚcurlú-sLú
--max-timeÚ15ú-AúMozilla/5.0Té   ©Úcapture_outputÚtextÚtimeoutzAPI error: )Ú
subprocessÚrunÚjsonÚloadsÚstdoutÚ	Exceptionr   )ÚurlÚrÚes      r   Ú
fetch_jsonr&      se   € ðÜ�N‰NØ�U˜L¨$°°mÀSÐIØ d°Bô
ˆô �z‰z˜!Ÿ(™(Ó#Ð#øÜò Üˆk˜!˜ÐÔÜûðús   ‚>A Á	A"Á
AÁA"c           	      óÜ  — 	 t        j                  dddddd| gddd¬	«      }|j                  }|j	                  d
«      }|dk  ry |j	                  d|dz   «      }|dk  ry d}t        |t        |«      «      D ]C  }||   dk(  r|dz  }Œ||   dk(  sŒ|dz  }|dk(  sŒ%|||dz    }	 t        j                  |«      c S  y # t        $ r
}Y d }~y d }~ww xY w# t        j                  $ r Y  y w xY w)Nr   r   r   r   r   r   Tr   r   zDETAIL:r   ú{é   é   ú})
r   r   r!   r"   ÚfindÚrangeÚlenr   r    ÚJSONDecodeError)	r#   r$   Úhtmlr%   ÚidxÚ	obj_startÚdepthÚiÚ
detail_strs	            r   Ú
fetch_htmlr6   '   s  € ðÜ�N‰NØ�U˜L¨$°°mÀSÐIØ d°Bô
ˆð �x‰xˆð
 �)‰)�IÓ
€CØ
ˆQ‚wØØ—	‘	˜#˜s Q™wÓ'€IØ�1‚}ØØ€EÜ�9œc $›iÓ(ò 
 ˆØ�‰7�cŠ>Ø�Q‰J‰EØ�!‰W˜‹^Ø�Q‰JˆEØ˜‹zØ! )¨A¨a©CÐ0�
ð ÜŸ:™: jÓ1Ò1ð
 ð øô- ò Üûðûô( ×+Ñ+ò  Úð ús#   ‚,B> Â%CÂ>	CÃCÃC+Ã*C+c                 óh  — | j                  dd«      xs d}|j                  «       syt        |d«      }|j                  dd¬«      D ]`  }|j                  dd«      }|j	                  d¬«      xs d	}|j                  d
«      r|nt        |z   }d|› d|› d�}|j                  |«       Œb |j                  g d¢«      D ]  }|j                  «        Œ g }	|j                  d«      D ])  }
|
j	                  dd¬«      }|sŒ|	j                  |«       Œ+ |	rdj                  |	«      S |j                  «       S )NÚcontentÚ zhtml.parserÚaT)Úhrefr;   )Ústripu   é™„ä»¶Úhttpr	   z](ú))ÚspanÚbÚstrongÚfontÚemr4   ÚuÚsÚp)Ú	separatorr<   z

)Úgetr<   r   Úfind_allÚget_textÚ
startswithÚBASE_URLÚreplace_withÚunwrapÚappendÚjoin)ÚdetailÚcontent_htmlÚsoupÚa_tagr;   r   Úfull_urlÚmd_linkÚtagÚ
paragraphsrF   s              r   Úextract_contentrY   G   s4  € Ø—:‘:˜i¨Ó,Ò2°€LØ×ÑÔØä˜ }Ó5€Dð —‘˜s¨�Ó.ò $ˆØ�y‰y˜ Ó$ˆØ�~‰~ Dˆ~Ó)Ò5¨XˆØŸ?™?¨6Ô2‘4¼À4¹ˆØ�d�V˜2˜h˜Z qÐ)ˆØ×Ñ˜7Õ#ð$ð �}‰}ÒQÓRò ˆØ�
‰
�ðð €JØ�]‰]˜3Óò $ˆØ�z‰z B¨dˆzÓ3ˆÚØ×Ñ˜dÕ#ð$ñ
 '1ˆ6�;‰;�zÓ"ÐJ°l×6HÑ6HÓ6JÐJr   c                 óŽ  — g }t        «       }|rt        j                  |d«      nd }t        | |dz   «      D �]|  }t        › dt
        › d|› dt        › �}t        |«      }|s |S |j                  dg «      }	|	s |S d}
|	D ]ò  }|j                  dd	«      }|sŒ|j                  d
«      r	t        |z   }||v rŒ7|j                  |«       |j                  dd«      }|r$t        j                  |«      j                  d«      nd	}|r |r	 t        j                  |d«      }||k  rŒ£	 |j                  dd	«      xs d	j                  «       }|rt!        |«      dk  rŒÙ|j#                  |||dœ«       |
dz  }
Œô t%        d|› d|
› dt!        |«      › d�«       |
dk(  r|| kD  r |S t'        j(                  d«       �Œ |S # t        $ r Y Œ¡w xY w)Nú%Y-%m-%dr*   ú/gkmlpt/api/all/z?page=z&sid=Úarticlesr   r#   r9   ú/ÚdateÚtitleé   )r`   r#   r_   z  Page z: +z new (total r>   g      à?)Úsetr   Ústrptimer-   ÚAPP_BASEÚCATEGORY_IDÚSIDr&   rH   rK   rL   ÚaddÚfromtimestampÚstrftimeÚ
ValueErrorr<   r.   rO   r   ÚtimeÚsleep)Ú
start_pageÚend_pageÚcutoffÚ	all_itemsÚ	seen_urlsÚ	cutoff_dtÚpgr#   Údatar]   Ú	new_countr:   Úpage_urlÚtsÚdate_strÚdr`   s                    r   Úcrawl_pagesrz   c   s  € Ø€IÜ“€IÙ9?”×!Ñ! &¨*Ô5ÀT€Iä�J ¨1¡Ó-ó +ˆÜ�
Ð*¬;¨-°v¸b¸TÀÄsÀeÐLˆÜ˜#‹ˆÙØðR ÐðO —8‘8˜J¨Ó+ˆÙØðJ ÐðG ˆ	Øò 	ˆAØ—u‘u˜U BÓ'ˆHÙØØ×"Ñ" 3Ô'Ü# hÑ.�à˜9Ñ$ØØ�M‰M˜(Ô#à—‘�v˜qÓ!ˆBÙJL”x×-Ñ-¨bÓ1×:Ñ:¸:ÔFÐRTˆHá™XðÜ ×)Ñ)¨(°JÓ?�AØ˜9’}Ø ð %ð
 —U‘U˜7 BÓ'Ò-¨2×4Ñ4Ó6ˆEÙœC ›J¨šNØà×Ñ u°XÀxÑPÔQØ˜‰N‰Ið7	ô: 	ˆg�b�T˜˜Y˜K |´C¸	³NÐ3CÀ1ÐEÔFØ˜Š>˜b :šoØð Ðô 	�
‰
�3ŽðW+ðZ Ðøô "ò Ùðús   ÄF8Æ8	GÇGc           
      ón  — t        dt        | «      › d�«       g }t        | d«      D ]‹  \  }}t        |d   «      }|rt	        |«      nd}|j                  |d   |d   |d   |t        › dt        › �t        d	œ«       |d
z  dk(  rt        d|› dt        | «      › �«       t        j                  d«       Œ� |S )NzFetching details for z	 items...r*   r#   r9   r`   r_   ú-)r`   rv   Úpublish_dater8   Ú	site_nameÚcolumné
   r   z  Progress: r^   g333333Ó?)
r   r.   Ú	enumerater6   rY   rO   r   ÚCOLUMNrk   rl   )rp   Úenrichedr1   ÚitemrQ   r8   s         r   Úprocess_detailsr…   ˜   sÇ   € ÜÐ
¤ I£Ð/¨yÐ9Ô:Ø€HÜ˜y¨!Ó,ò ‰	ˆˆTÜ˜D ™KÓ(ˆÙ-3”/ &Ô)¸ˆà�‰Ø˜'‘]Ø˜U™Ø  ™LØÜ ˜6 ¤6 (Ð+Üñ
ô 	ð �‰8�qŠ=Ü�,˜s˜e 1¤S¨£^Ð$4Ð5Ô6Ü�
‰
�3�ðð" €Or   c                 óð  — dd l }|j                  t        «      }|j                  d«       |j                  d«       |j	                  «       }d}d}| D ]V  }	 |j                  d|d   |d   |d   |d   |d   |d	   |d	   xs d
d d |d   f«       |j
                  dkD  r|dz  }n|dz  }ŒX |j                  «        |j                  «        ||fS # t        $ r}t        d|› �«       |dz  }Y d }~Œžd }~ww xY w)Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=10000z‰INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, content, summary, category) VALUES (?,?,?,?,?,?,?,?)r~   rv   r`   r}   r8   r9   iô  r   r*   z  DB error: )
Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚrowcountr"   r   ÚcommitÚclose)Úitemsr‡   ÚconnÚcru   Ú
skip_countr„   r%   s           r   Ústore_itemsr“   ¯   s  € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ø�‰‹€Aà€IØ€JØò ˆð	Ø�I‰Ið,ð ˜Ñ%Ø˜Ñ$Ø˜Ñ$Ø˜‘MØ˜Ñ(Ø˜‘OØ˜)‘_Ò*¨¨D¨SÐ1Ø˜‘Nð	ô	ð �z‰z˜AŠ~Ø˜Q‘‘	à˜a‘�
øð)ð2 	‡K�K„MØ‡J�J„LØ�jÐ Ð øô ò 	Ü�,˜q˜cÐ"Ô#Ø˜!‰O�Jûð	ús   ÁACÃ	C5ÃC0Ã0C5c                 óø   — t        j                  «       t        | dz  ¬«      z
  j                  d«      }t	        d|› d�«       t        dd|«      }t        |«      }t        |«      \  }}t	        d|› d|› d	�«       y )
Né   ©Údaysr[   zFull crawl (cutoff: r>   r   úResult: ú new, ú skipped©r   Únowr   ri   r   rz   r…   r“   )Úmonths_backro   r�   rƒ   ÚnewÚskips         r   Ú	crawl_allr    Ö   sv   € Ü�l‰l‹nœy¨k¸BÑ.>Ô?Ñ?×IÑIÈ*ÓU€FÜÐ
˜v˜h aÐ(Ô)Ü˜˜1˜fÓ%€EÜ˜uÓ%€HÜ˜HÓ%�I€CˆÜˆ(�3�%�v˜d˜V 8Ð,Õ-r   c                  óê   — t        j                  «       t        d¬«      z
  j                  d«      } t	        d«       t        dd| «      }t        |«      }t        |«      \  }}t	        d|› d|› d�«       y )	Nr)   r–   r[   zIncremental (last 7 days)r   r˜   r™   rš   r›   )ro   r�   rƒ   rž   rŸ   s        r   Úcrawl_incrementalr¢   ß   sh   € Ü�l‰l‹nœy¨aÔ0Ñ0×:Ñ:¸:ÓF€FÜÐ
#Ô%Ü˜˜1˜fÓ%€EÜ˜uÓ%€HÜ˜HÓ%�I€CˆÜˆ(�3�%�v˜d˜V 8Ð,Õ-r   Ú__main__r*   ÚincrementalÚfullÚlistr\   z?page=0&sid=r]   zTotal: z	 articlesé   r_   r[   z  z | r`   r9   é<   )é$   )*Ú__doc__ÚsysÚosr   Úrerk   r   r   r   Úbs4r   Úgetenvr‰   r   r‚   ÚPROVINCEre   rL   rd   rf   ÚATTACH_EXTSr   r&   r6   rY   rz   r…   r“   r    r¢   Ú__name__r.   ÚargvÚmodert   rH   Úartsr:   rh   ri   Údtr   © r   r   ú<module>r¸      s‡  ðñ÷ +× *× *ß (Ý à
ˆ"�)‰)�KÐ!2Ó
3€Ø€Ø	€Ø€Ø€Ø(€Ø/€Ø€ð=€ò)ò	òò@Kò82òjò.$!óN.ò.ð ˆzÒÙ˜cŸh™h›-¨!Ò+ˆ3�8‰8�AŠ;°€DØˆ}ÒÙÕØ	�ŠÙ�Ø	�ŠÙ˜X˜JÐ&6°{°mÀ<ÐPSÈuÐUÓVˆÙ+/ˆt�x‰x˜
 BÔ'°RˆÙˆg‘c˜$“i�[ 	Ð*Ô+Ø�b�q�ò 	8ˆAØ'�×'Ñ'¨¯©¨f°aÓ(8Ó9×BÑBÀ:ÓNˆBÙ�B�r�d˜#˜aŸe™e G¨BÓ/°°Ð4Ð5Ð6Õ7ñ	8ð	 
ð r   