Ë
    V_Š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	 dZ
dZdZej                  j                  dd«      Zd	Zd
ZdZddddœZ ej(                  «       Zej,                  j/                  e«       dd„Zd„ Zd„ Zefd„Zd„ Zedk(  rdej<                  v rdZ e«        yy)uÖ   
å­�ä¹‰å¸‚æ¢§æ¡�ç…¤åŒ–å·¥å›­åŒºäº§ä¸šæœ�åŠ¡å¹³å�° - å›­åŒºåŠ¨æ€� çˆ¬è™«
CMS: Portal-SaaS (ä¸­ä¼�åŠ¨åŠ›)
åˆ—è¡¨: /news/1574549092943745024-{offset}-20.html (20æ�¡/é¡µ)
è¯¦æƒ…: /news_detailed/c-_detailId%3D{id}.html
é    N)ÚBeautifulSoupzhttp://www.xymhgfw.comu+   å­�ä¹‰å¸‚æ¢§æ¡�ç…¤åŒ–å·¥å›­åŒº-å›­åŒºåŠ¨æ€�u   ä¼�ä¸šÚDB_PATHz/root/search.dbé   Ú1574549092943745024é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 óB   — t         j                  | |¬«      }d|_        |S )N)Útimeoutzutf-8)ÚsessionÚgetÚencoding)Úurlr
   Úresps      ú"/root/gov_crawler/crawl_xymhgfw.pyÚfetchr   %   s    € Ü�;‰;�s Gˆ;Ó,€DØ€D„MØ€Kó    c                 ó  — | dz
  t         z  }t        › dt        › d|› dt         › d�}t        d| › d|› �«       	 t	        |«      }|j                  «        t        |j                  d	«      }g }|j                  d
t        j                  d«      ¬«      D ]Ê  }|j                  dd«      }|rd|v rŒ|j                  d¬«      }	|	sŒ1|j                  d«      s&|j                  d«      r
t        › |› �n
t        › d|› �}|j                  ddg«      }
d}|
r7t        j                   d|
j                  «       «      }|r|j#                  d«      }|j%                  |	||dœ«       ŒÌ |S # t        $ r}t        d|› �«       g cY d}~S d}~ww xY w)u   çˆ¬å�–åˆ—è¡¨é¡µé   z/news/ú-z.htmlz  Fetching page z: z	  Error: Núhtml.parserÚaz/news_detailed/©Úhrefr   Ú Ú
javascriptT©ÚstripÚhttpú/ÚliÚdivz(\d{4}[-/]\d{1,2}[-/]\d{1,2}))Útitler   Údate)Ú	PAGE_SIZEÚBASE_URLÚCATEGORY_IDÚprintr   Úraise_for_statusÚ	Exceptionr   ÚtextÚfind_allÚreÚcompiler   Úget_textÚ
startswithÚfind_parentÚsearchÚgroupÚappend)Úpage_numÚoffsetr   r   ÚeÚsoupÚitemsÚa_tagr   r"   Úparentr#   Ú
date_matchs                r   Ú
crawl_listr<   +   s•  € à˜‰lœiÑ'€FÜˆJ�fœ[˜M¨¨6¨(°!´I°;¸eÐ
D€Cä	Ð˜X˜J b¨¨Ð
.Ô/ðÜ�S‹zˆØ×ÑÔô
 ˜Ÿ™ MÓ2€DØ€Eð —‘˜s¬¯©Ð4FÓ)G�ÓHò ˆØ�y‰y˜ Ó$ˆÙ�| tÑ+Øà—‘ T�Ó*ˆÙØà�‰˜vÔ&Ø*.¯/©/¸#Ô*>”h�Z ˜vÑ&ÄxÀjÐPQÐRVÐQWÐDXˆDð ×"Ñ" D¨% =Ó1ˆØˆÙÜŸ™Ð#CÀVÇ_Á_ÓEVÓWˆJÙØ!×'Ñ'¨Ó*�à�‰ØØØñ
õ 	ð)ð4 €LøôG ò Ü�	˜!˜ˆoÔØ�	ûðús   ¹E! Å!	FÅ*E?Å9FÅ?Fc                 ó”  — | d   }t        d| d   dd › d�«       	 t        |«      }|j                  «        t	        |j
                  d«      }| d   }|j                  d«      }|r;|j                  d	¬
«      }t        j                  dd|«      j                  «       }|r|}|s8|j                  d«      }t        |«      dkD  r|d   j                  d	¬
«      }	|	r|	}| d   }
|j                  dt        j                  d«      ¬«      }|r;|j                  d	¬
«      }t        j                  d|«      }|r|j                  d«      }
|
sb|j                  t        j                  d«      ¬«      }|r;|j                  d	¬
«      }t        j                  d|«      }|r|j                  d«      }
g }g }|j                  dd¬«      }|s&|j                  dt        j                  d«      ¬«      }|s&|j                  dt        j                  d«      ¬«      }|�rz|j                  dd	¬«      D ]¶  }|d   }t        j                  d|t        j                   «      sŒ.|j                  d	¬
«      }|j#                  d«      s1|j#                  d«      r
t$        › |› �n|j'                  d«      › d|› �}|j)                  |xs t*        j,                  j/                  |«      |dœ«       Œ¸ |j                  ddg«      D ]˜  }|j                  d	¬
«      sŒ|j1                  g d¢«      rŒ*|j                  d	¬
«      }t        j2                  d |«      rŒS|j                  d!«      }|r"|D ]  }|j)                  t5        |«      «       Œ Œˆ|j)                  |«       Œš d"j7                  d#„ |D «       «      }t        |j                  «       «      d$k  r/d%j7                  d&„ |D «       «      }|rd'|› d(|› d)|› �}n	d'|› d(|› d*�}|r|dd+ n|}t8        d|||
||t:        d,|rt=        j>                  |d-¬.«      d/œ
S dd/œ
S # t        $ r}t        d|› �«       Y d}~yd}~ww xY w)0u   çˆ¬å�–è¯¦æƒ…é¡µr   z    Detail: r"   Né(   ú...z    Error: r   Tr   u2   -å­�ä¹‰å¸‚æ¢§æ¡�ç…¤åŒ–å·¥å›­åŒºäº§ä¸šæœ�åŠ¡å¹³å�°$r   Úh1r   r#   ÚpztimeFormat|time)Úclass_z(\d{4}-\d{2}-\d{2})z	time|dater!   Úreset_styleze_richText-7r   r   r   z+\.(doc|docx|pdf|xls|xlsx|ppt|pptx|zip|rar)$r   r   )r"   r   )ÚformÚtextareaÚscriptu>   ^(è´£ä»»ç¼–è¾‘|åˆ�å®¡|å¤�å®¡|ç»ˆå®¡|ç¼–è¾‘[ï¼š:]|æ�¥æº�[ï¼š:])Útablez

c              3   ó&   K  — | ]	  }|sŒ|–— Œ y ­w)N© )Ú.0Úparts     r   ú	<genexpr>zcrawl_detail.<locals>.<genexpr>¸   s   è ø€ ÒA 4ºDœ$ÑAùs   ‚Šr   ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)ú[r"   z](r   ú)NrI   )rJ   r   s     r   rL   zcrawl_detail.<locals>.<genexpr>¼   s'   è ø€ Ò TÀ1 1 Q w¡Z L°°1°U±8°*¸AÔ!>Ñ Tùs   ‚z<p><a href="z">u   </a></p>

é™„ä»¶ï¼š
z</a></p>éÈ   Ú	publishedF)Úensure_ascii)
Ú	site_nameÚ
source_urlÚpage_urlr"   Úpublish_dateÚcontentÚsummaryÚcategoryÚstatusÚattachments) r'   r   r(   r)   r   r*   Úfindr.   r,   Úsubr   r+   Úlenr-   r1   r2   ÚIr/   r%   Úrstripr3   ÚosÚpathÚbasenamer0   ÚmatchÚstrÚjoinÚ	SITE_NAMEÚGROUPÚjsonÚdumps)Úitemr   r   r6   r7   r"   Ú	title_tagÚt_textÚh1_tagsÚh1_textr#   Údate_tagÚdr;   Údate_elÚcontent_partsr\   Úcontent_divr9   r   Úattach_titlerA   r*   ÚtablesrG   rX   Úattach_linksrY   s                               r   Úcrawl_detailry   [   sI  € à
ˆu‰+€CÜ	ˆL˜˜g™ s¨Ð+Ð,¨CÐ
0Ô1ðÜ�S‹zˆØ×ÑÔô
 ˜Ÿ™ MÓ2€Dð �‰M€EØ—	‘	˜'Ó"€IÙØ×#Ñ#¨$Ð#Ó/ˆä—‘ÐMÈrÐSYÓZ×`Ñ`ÓbˆÙØˆEñ Ø—-‘- Ó%ˆÜˆw‹<˜!ÒØ˜a‘j×)Ñ)°Ð)Ó5ˆGÙØ�ð �‰<€DØ�y‰y˜¤R§Z¡ZÐ0BÓ%CˆyÓD€HÙØ×Ñ DÐÓ)ˆÜ—Y‘YÐ5°qÓ9ˆ
ÙØ×#Ñ# AÓ&ˆDÙà—)‘)¤2§:¡:¨lÓ#;�)Ó<ˆÙØ× Ñ  tÐ Ó,ˆAÜŸ™Ð#9¸1Ó=ˆJÙØ!×'Ñ'¨Ó*�ð €MØ€Kð —)‘)˜E¨-�)Ó8€KÙØ—i‘i ¬b¯j©j¸Ó.H�iÓIˆÙØ—i‘i ¬b¯j©j¸Ó.I�iÓJˆâà ×)Ñ)¨#°DÐ)Ó9ò 		ˆEØ˜‘=ˆDÜ�y‰yÐGÈÌrÏtÉtÕTØ$Ÿ~™~°D˜~Ó9�Ø—‘ vÔ.Ø26·/±/À#Ô2Fœh˜Z¨ vÑ.ÈsÏzÉzÐZ]ËÐN_Ð_`ÐaeÐ`fÐLg�DØ×"Ñ"Ø)ÒC¬R¯W©W×-=Ñ-=¸dÓ-CØñ$õ ð		ð ×%Ñ% s¨E lÓ3ò 	'ˆAØ—:‘: D�:Ô)ØØ�}‰}Ò;Ô<Øà—:‘: D�:Ó)ˆDÜ�x‰xÐYÐ[_Ô`Øð —Z‘Z Ó(ˆFÙØ#ò 5�EØ!×(Ñ(¬¨U«Õ4ð5àà× Ñ  Õ&ð#	'ð& �k‰kÑA¨=ÔAÓA€Gô ˆ7�=‰=‹?Ó˜bÒ Ø—y‘yÑ TÈÔ TÓTˆÙØ$ S E¨¨E¨7Ð2IÈ,ÈÐX‰Gà$ S E¨¨E¨7°(Ð;ˆGá&ˆg�d�s‰m¨E€Gô ØØØØØØÜØÙFQ”t—z‘z +¸EÔBñð ð XZñð øôC ò Ü�˜A˜3ÐÔ Üûðús   œP& Ð&	QÐ/QÑQc                 ó$  — | syt        j                  |«      }|j                  «       }d}t        | «      D ]�  \  }}	 |j	                  d|d   |d   |d   |d   |d   |d   |d	   |d
   |d   |d   f
«       |j
                  dkD  r>|dz  }|dk  s|dz   dz  dk(  r)t        d|dz   › dt        | «      › d|d   dd › d|› �«       Œ� |j                  «        |j                  «        |S # t        $ r}t        d|d   › d|› �«       Y d}~ŒÔd}~ww xY w)u   ä¿�å­˜åˆ°æ•°æ�®åº“r   zÝINSERT OR IGNORE INTO gov_raw 
                (site_name, source_url, page_url, title, publish_date,
                 content, summary, category, status, attachments)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)rT   rU   rV   r"   rW   rX   rY   rZ   r[   r\   r   r   r   ú  [r   ú] Nr>   z +z	  ERROR [z]: )Úsqlite3ÚconnectÚcursorÚ	enumerateÚexecuteÚrowcountr'   r_   r)   ÚcommitÚclose)ÚrecordsÚdb_pathÚconnÚcÚ	new_countÚiÚrecr6   s           r   Ú
save_to_dbrŒ   Ò   sI  € áØä�?‰?˜7Ó#€DØ�‰‹€Aà€IÜ˜GÓ$ò 7‰ˆˆ3ð	7Ø�I‰Ið 9ð �[Ñ! 3 |Ñ#4°c¸*±oØ�W‘˜s >Ñ2°C¸	±NØ�Y‘  Z¡°#°h±-Ø�]Ñ#ð%ô	&ð �z‰z˜AŠ~Ø˜Q‘�	Ø ’> a¨¡c¨R¡Z°1¢_Ü˜C  !¡˜u A¤c¨'£l ^°2°c¸'±lÀ3ÀBÐ6GÐ5HÈÈ9È+ÐVÔWøð7ð" 	‡K�K„MØ‡J�J„LØÐøô ò 	7Ü�I˜c *™oÐ.¨c°!°Ð5×6Ñ6ûð	7ús   ½BC(Ã(	DÃ1D
Ä
Dc                  ó¦  — t        dt        › d�«       g } t        «       }t        dt        dz   «      D ]n  }t        |«      }|st        d|› d�«        nPt        dt        |«      › d|› �«       |D ]/  }|d   |vsŒ|j                  |d   «       | j                  |«       Œ1 Œp t        d	t        | «      › �«       g }t        | «      D ]_  \  }}t        d
|dz   › dt        | «      › d|d   d d › d�«       t        |«      }|r|j                  |«       t        j                  d«       Œa |rt        |«      }t        d|› d�«       y t        d«       y )Nz=== u    - å…¨é‡�çˆ¬å�– ===r   z  -> 0 items on page z
, stoppingz  -> z items on page r   z
Total unique items: r{   r   r|   r"   é   r?   g333333Ó?z

Inserted z% new records (trigger auto-syncs FTS)z
No records to insert)r'   rh   ÚsetÚrangeÚ	MAX_PAGESr<   r_   Úaddr3   r€   ry   ÚtimeÚsleeprŒ   )	Ú	all_itemsÚ	seen_urlsÚpager8   rl   r…   ÚidxÚdetailÚcounts	            r   Úmainr›   ñ   sb  € Ü	ˆD”�Ð.Ð
/Ô0à€IÜ“€Iä�aœ Q™Ó'ò 	'ˆÜ˜4Ó ˆÙÜÐ)¨$¨¨zÐ:Ô;ÙÜ�”c˜%“j�\ °°Ð7Ô8Øò 	'ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Õ&ñ	'ð	'ô 
Ð"¤3 y£>Ð"2Ð
3Ô4à€GÜ˜yÓ)ò ‰	ˆˆTÜ��C˜‘E�7˜!œC 	›NÐ+¨2¨d°7©m¸C¸RÐ.@Ð-AÀÐEÔFÜ˜dÓ#ˆÙØ�N‰N˜6Ô"Ü�
‰
�3�ðñ Ü˜7Ó#ˆÜ�˜E˜7Ð"GÐHÕIäÐ&Õ'r   Ú__main__z--incrementalr   )rŽ   )Ú__doc__Úrequestsr,   rj   r“   Úsysrb   r}   Úbs4r   r%   rh   ri   Úenvironr   r   r‘   r&   r$   ÚHEADERSÚSessionr   ÚheadersÚupdater   r<   ry   rŒ   r›   Ú__name__ÚargvrI   r   r   ú<module>r¨      sÕ   ðñó Û 	Û Û Û 
Û 	Û Ý à#€Ø9€	Ø€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø€	Ø#€Ø€	ð DØOØ0ñ€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ óò-ò`tðn !(ó ò>(ðD ˆzÒØ˜#Ÿ(™(Ñ"Øˆ	Ù…Fð r   