Ë
    rxj   ã                   ó4  — 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Zddl	m	Z	m
Z
 ddlmZ dZdZdZdZd	Z e	j$                  «        e
d
¬«      z
  j'                  d«      Z ede› �ej,                  ¬«       dd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uä  
æ·±åœ³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ meeb.sz.gov.cn â€” çŽ¯ä¿�ä¸šåŠ¡æ �ç›® (xxgk/qt/hbyw)
CMS: NFCMS (å¹¿ä¸œå�—æ–¹ç½‘ç³») + å¹¿ä¸œçœ�ç»Ÿä¸€æ�œç´¢å¹³å�° JSONP API
æ•°æ�®æº�: https://search.gd.gov.cn/jsonp/site/755014 (site=755014 = meeb NFCMS_SITE_ID)
  ?callback=datacallback&category_id=24525,...,24514&order=1&text=&pagesize=15&page=N&including_link_doc=1
åˆ—è¡¨: JSONP ç›´æŽ¥è¿”å›ž {count, results:[{title,url,post_url,pub_time,content(æˆªæ–­æ‘˜è¦�),attachment:[...]}]}
è¯¦æƒ…: curl è¯¦æƒ…é¡µ â†’ meta ArticleTitle / article_info å�‘å¸ƒæ—¥æœŸ / div.article æ­£æ–‡ / div.article_pdf é™„ä»¶
æ³¨æ„�: --curves prime256v1 å¿…é¡» (æœ�åŠ¡å™¨ TLS æ›²çº¿å��å•†å¤±è´¥ bad ecpoint)
count=407, 15/é¡µ=28 é¡µ; CUTOFF è¾¹ç•Œ P13 (2023-08-04 æœ«æ�¡ < 2023-08-09)
é    N)ÚdatetimeÚ	timedelta)ÚurljoinzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36u%   æ·±åœ³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯ä¿�ä¸šåŠ¡zG24525,24524,24523,24522,24521,24520,24519,24518,24517,24516,24515,24514z*https://search.gd.gov.cn/jsonp/site/755014z/root/search.dbiG  )Údaysú%Y-%m-%du   [i] CUTOFF è¾¹ç•Œ: ©Úfilec                 ó�  — dddddt        |«      dt        g}|r
|dd|› �gz  }|r	|d	|d
|gz  }|d| gz  }t        d«      D ]O  }	 t        j                  |dd|dz   ¬«      }|j
                  r|j
                  c S 	 t        j                  d«       ŒQ y# t        $ r(}t        d|› �t        j                  ¬«       Y d }~ŒDd }~ww xY w)NÚcurlz-skz--curvesÚ
prime256v1z-mz-Az-Hz	Referer: z-cz-bz-Lé   Té
   )Úcapture_outputÚtextÚtimeoutz[!] curl err r   é   Ú )ÚstrÚUAÚrangeÚ
subprocessÚrunÚstdoutÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚrefererÚcjr   ÚcmdÚattemptÚrÚes           ú$/root/gov_crawler/crawl_meeb_hbyw.pyÚcurl_getr(      sÛ   € Ø�5˜* l°D¼#¸g»,ÈÌbÐ
Q€CÙØ�˜	 ' Ð+Ð,Ñ,ˆÙ	Ø��b˜$ Ð#Ñ#ˆØˆD�#ˆ;Ñ€CÜ˜“8ò ˆð	8Ü—‘˜s°4¸dÈGÐVXÉLÔYˆAØ�xŠxØ—x‘x’ð ô 	�
‰
�1�ðð øô ò 	8Ü�M ! Ð%¬C¯J©J×7Ò7ûð	8ús   Á3BÂ	CÂC Ã Cc                 óö   — t         › dt        › d| › d�}t        |«      }t        j                  d|t        j
                  «      }|sy 	 t        j                  |j                  d«      «      S # t        $ r Y y w xY w)Nz#?callback=datacallback&category_id=z &order=1&text=&pagesize=15&page=z&including_link_doc=1z^[^(]*\((.*)\)\s*$é   )
ÚAPI_URLÚCATEGORY_IDr(   ÚreÚsearchÚSÚjsonÚloadsÚgroupr   )Úpager    ÚoutÚms       r'   Úfetch_jsonpr6   -   sz   € ÜˆIÐ8¼¸ÐEeÐfjÐekð  lAð  B€CÜ
�3‹-€CÜ
�	‰	Ð'¨¬b¯d©dÓ3€AÙØðÜ�z‰z˜!Ÿ'™' !›*Ó%Ð%øÜò Ùðús   Á#A, Á,	A8Á7A8c                 ó¾  — t        | d¬«      }|sdddg fS d}t        j                  d|«      }|r|j                  d«      j	                  «       }|stt        j                  d|t        j
                  «      }|rM|j                  d«      j	                  «       j                  dd«      j                  d	d«      j	                  «       }d}t        j                  d
|«      }|r|j                  d«      }d}t        j                  d|t        j
                  «      }|s%t        j                  d|t        j
                  «      }|�ra|j                  d«      }t        j                  d|«      D �	cg c]  }	|	‘Œ }
}	d}t        j                  d|t        j
                  «      D ]c  }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j	                  «       }|sŒ[|d|› d�z  }Œe |s]t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j	                  «       }|rd|› d�}|s?|
r=|
D ](  }|j                  d«      st        d|«      }|d|› d�z  }Œ* |j	                  «       }g }t        j                  d|t        j
                  «      }|�rt        j                  d|j                  d«      t        j
                  «      D ]Ñ  }|j                  d«      j	                  «       }t        j                  dd|j                  d«      «      j	                  «       }|st        j                  j                  |«      }t        j                  d|t        j                  «      sŒ�|j                  d«      st        d|«      }|j!                  d|› d|› d �«       ŒÓ ||||fS c c}	w )!u.   è¿”å›ž (title, pub_date, content, attachments)z$https://meeb.sz.gov.cn/xxgk/qt/hbyw/)r!   Nr   z+<meta name="ArticleTitle" content="([^"]+)"r*   z<title>(.*?)</title>u   _æ·±åœ³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€u   -æ·±åœ³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€u"   å�‘å¸ƒæ—¥æœŸï¼š(\d{4}-\d{2}-\d{2})z2<div class="article">(.*?)<div class="article_pdf"z<<div class="article">(.*?)</div>\s*<div class="article_push"z<img[^>]+src="([^"]+)"z<p[^>]*>(.*?)</p>z<[^>]+>z[ \t\u3000]+ú z\s+z<p>z</p>
z</p>Úhttpzhttps://meeb.sz.gov.cnz<p><img src="z"></p>
z$<div class="article_pdf">(.*?)</div>z$<a[^>]+href="([^"]+)"[^>]*>(.*?)</a>r   z5\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|txt|jpg|png)$z<p><a href="z">z</a></p>)r(   r-   r.   r2   Ústripr/   ÚreplaceÚfindallÚsubÚ
startswithr   ÚfinditerÚosÚpathÚbasenameÚIÚappend)r    ÚhÚtitleÚmtÚpub_dateÚdmÚcontentr5   ÚsegÚuÚimgsÚpÚtxtÚsrcÚattachmentsÚaÚhrefÚnames                     r'   Úparse_detailrU   9   sa  € ä�ÐDÔE€AÙØ�T˜2˜rÐ!Ð!à€EÜ	�‰ÐAÀ1Ó	E€BÙ	Ø—‘˜“×!Ñ!Ó#ˆÙÜ�Y‰YÐ.°´2·4±4Ó8ˆÙØ—H‘H˜Q“K×%Ñ%Ó'×/Ñ/Ð0KÈRÓP×XÑXÐYtÐvxÓy×Ñó  BˆEà€HÜ	�‰Ð8¸!Ó	<€BÙ	Ø—8‘8˜A“;ˆà€GÜ
�	‰	ÐGÈÌBÏDÉDÓQ€AÙÜ�I‰IÐUÐWXÔZ\×Z^ÑZ^Ó_ˆÚØ�g‰g�a‹jˆäŸ:™:Ð&?ÀÓEÖF�a’ÐFˆÐFð ˆÜ—‘Ð0°#´r·t±tÓ<ò 	-ˆAÜ—&‘&˜ R¨Ó+ˆCÜ—&‘&˜¨#¨sÓ3ˆCÜ—&‘&˜  cÓ*ˆCØ—)‘)“+ˆCÚØ˜S   VÐ,Ñ,‘ð	-ñ Ü—&‘&˜ R¨Ó-ˆCÜ—&‘&˜¨#¨sÓ3ˆCÜ—&‘&˜  cÓ*ˆCØ—)‘)“+ˆCÙØ ˜u D˜/�Ù™4Øò 9�Ø—~‘~ fÔ-Ü!Ð":¸CÓ@�CØ˜]¨3¨%¨xÐ8Ñ8‘ð9ð —m‘m“oˆGà€KÜ
�	‰	Ð9¸1¼b¿d¹dÓC€AÚÜ—‘ÐDÀaÇgÁgÈaÃjÔRT×RVÑRVÓWò 	JˆAØ—7‘7˜1“:×#Ñ#Ó%ˆDÜ—6‘6˜* b¨!¯'©'°!«*Ó5×;Ñ;Ó=ˆDÙÜ—w‘w×'Ñ'¨Ó-�Ü�y‰yÐQÐSWÔY[×Y]ÑY]Õ^Ø—‘ vÔ.Ü"Ð#;¸TÓB�DØ×"Ñ" \°$°°r¸$¸¸xÐ#HÕIð	Jð �(˜G [Ð0Ð0ùòM Gs   Å*	Oc                 ó€  — t        j                  t        d¬«      }|j                  «       }|j	                  d«       dx}}| D ]V  }|j	                  d|d   |d   |d   |d	   |d	   t
        |d   r|d   d d
 nd|d   f«       |j                  r|dz  }ŒR|dz  }ŒX |j                  «        |j                  «        ||fS )Né<   )r   a  CREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT, publish_date TEXT, content TEXT,
        page_url TEXT, source_url TEXT, site_name TEXT,
        summary TEXT, date_rank INTEGER,
        UNIQUE(page_url, site_name))r   zŠINSERT OR IGNORE INTO gov_raw (title, publish_date, content, page_url, source_url, site_name, summary, date_rank) VALUES (?,?,?,?,?,?,?,?)rF   rH   rJ   r    éÈ   r   Ú	date_rankr*   )	Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚrowcountÚcommitÚclose)ÚrecordsÚconnÚcurÚnewÚskipÚrecs         r'   Úpush_to_searchdbri   }   sØ   € Ü�?‰?œ7¨BÔ/€DØ
�+‰+‹-€CØ‡K�Kð (ô )ð €N€Cˆ$Øò 	ˆØ�‰ð YØ�‰\˜3˜z™?¨C°	©N¸CÀ¹JÈÈEÉ
ÔT]Ø%(¨¢^ˆS�‰^˜D˜SÑ!¸¸SÀÑ=MðOô	
ð
 �<Š<Ø�1‰H‰Cà�A‰I‰Dð	ð 	‡K�K„MØ‡J�J„LØ�ˆ9Ðó    c                  ó‚  — t        j                  «       } | j                  dt        d¬«       | j                  dt        d¬«       | j	                  «       }dx}}t        |j                  |j                  |j                  z   «      D �]%  }t        |«      }|r|j                  d«      s"t        d|› d	�t        j                  ¬
«        �nå|d   }t        d|› dt        |«      › d|j                  d«      › d�t        j                  ¬
«       g }|D �]E  }|j                  d«      xs |j                  d«      xs d}	|j                  d«      xs dd d }
|
r|	sŒI|
t        k  r8t        d|› d|
› d|j                  dd«      d d › �t        j                  ¬
«       ŒŠt        |	«      \  }}}}|s |j                  dd«      j!                  «       }|s|
}|r|r|dz   dj#                  |«      z   }n|rdj#                  |«      }|j%                  ||||	t        t'        j(                  |d«      j+                  «       «      dœ«       t-        j.                  d«       �ŒH |r<t1        |«      \  }}||z  }||z  }t        d|› d|› d|› �t        j                  ¬
«       t-        j.                  d«       �Œ( t        d |› d|› �«       y )!Nz--pagesé   )ÚtypeÚdefaultz--startr*   r   Úresultsz[Pz] empty -> stopr   z] u    æ�¡ (count=Úcountú)Úpost_urlr    r   Úpub_timer   u   ] è·³è¿‡çª—å�£å¤– r8   rF   é   z

ú
r   )rF   rH   rJ   r    rY   gš™™™™™é?z] new=z skip=g      ð?z	DONE new=)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsr   ÚstartÚpagesr6   Úgetr   r   r   ÚlenÚCUTOFFrU   r:   ÚjoinrD   r   ÚstrptimeÚ	timestampr   r   ri   )ÚapÚargsÚ	total_newÚ
total_skipÚpgÚdro   rc   Úitr    ÚpubrF   ÚdpubrJ   ÚattsÚnÚss                    r'   Úmainr�   –   s„  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ3Ø‡O�O�I¤C°€OÔ3Ø�=‰=‹?€DàÐ€I�
Ü�D—J‘J §
¡
¨T¯Z©ZÑ 7Ó8ó $ˆÜ˜‹OˆÙ˜Ÿ™˜iÔ(Ü�B�r�d˜/Ð*´·±Õ<ÚØ�I‘,ˆÜ��2�$�bœ˜W›˜ l°1·5±5¸³>Ð2BÀ!ÐDÌ3Ï:É:ÕVØˆØó 	ˆBØ—&‘&˜Ó$Ò;¨¯©¨u«Ò;¸ˆCØ—6‘6˜*Ó%Ò+¨¨S¨bÐ1ˆCÙ™cØØ”VŠ|Ü˜˜2˜$Ð0°°°Q°r·v±v¸gÀbÓ7IÈ#È2Ð7NÐ6OÐPÔWZ×WaÑWaÕbØä)5°cÓ):Ñ&ˆE�4˜ $ÙØŸ™˜w¨Ó+×1Ñ1Ó3�ÙØ�Ù™4Ø! FÑ*¨T¯Y©Y°t«_Ñ<‘ÙØŸ)™) D›/�Ø�N‰NØ¨D¸WÈSÜ ¤×!2Ñ!2°4¸Ó!D×!NÑ!NÓ!PÓQñô ô �J‰J�sŽOð-	ñ. Ü# GÓ,‰DˆAˆqØ˜‰NˆIØ˜!‰OˆJÜ�B�r�d˜&   6¨!¨Ð-´C·J±JÕ?Ü�
‰
�3ŽðI$ôJ 
ˆI�i�[  z lÐ
3Õ4rj   Ú__main__)NNrt   )Ú__doc__rv   r0   r@   r-   rZ   r   r   r   r   r   Úurllib.parser   r   r_   r,   r+   r\   ÚnowÚstrftimer   r   r   r(   r6   rU   ri   r�   Ú__name__© rj   r'   ú<module>r—      sŸ   ðñ	÷ >× =× =× =ß (Ý  àv€Ø3€	ØW€Ø
6€Ø
€à
ˆ(�,‰,‹.™9¨'Ô2Ñ
2×	<Ñ	<¸ZÓ	H€Ù Ð˜F˜8Ð$¨3¯:©:Õ 6óò$	òA1òHò2,5ð^ ˆzÒÙ…Fð rj   