Ë
    ¸¬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ZddlZddl	m	Z	 ddl
mZ ddlZdZdZdZdZd	Zd
ZddiZd„ Zd„ Zd„ Zd„ Zdd„Zefd„Zedk(  rP ej6                  d¬«      Zej;                  deede› d�¬«       ej?                  «       Z  ee jB                  ¬«       yy)u  
è¥¿å®‰ä¸­åœ°çŽ¯å¢ƒç§‘æŠ€æœ‰é™�å…¬å�¸ - æ–‡ä»¶å…¬ç¤º çˆ¬è™«
CMS: PHPCMS
åˆ—è¡¨: index.php?m=content&c=index&a=lists&catid=24&page=N (10æ�¡/é¡µ, 24é¡µ)
è¯¦æƒ…: index.php?m=content&c=index&a=show&catid=24&id={id}
å��çˆ¬: Nginx challenge cookie (å…ˆ403è®¾cookieï¼Œå¸¦cookieé‡�è¯·æ±‚)
é    N)Údatetime)Úurljoinzhttp://www.zdhjkj.cnzIhttp://www.zdhjkj.cn/index.php?m=content&c=index&a=lists&catid=24&page={}u%   è¥¿å®‰ä¸­åœ°çŽ¯å¢ƒç§‘æŠ€_æ–‡ä»¶å…¬ç¤ºu   ä¼�ä¸šz/mnt/data/search.dbé   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                  óœ   — t        j                  «       } | j                  j                  t        «       | j                  t        › d�«      }| S )u   åˆ›å»ºå¸¦å��çˆ¬å¤„ç�†çš„Sessionz-/index.php?m=content&c=index&a=lists&catid=24)ÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚBASE_URL)ÚsÚfirsts     ú(/root/gov_crawler/crawl_zdhjkj_notice.pyÚmake_sessionr      s=   € ä×ÑÓ€AØ‡I�I×Ñ”WÔà�E‰E”X�JÐKÐLÓM€Eà€Hó    c                 ó˜  — g }t        j                  d| «      D ]®  }|j                  d«      j                  «       }|j                  d«      j                  «       }|j	                  dd«      j	                  dd«      j                  «       }|sŒtd|v sŒy|j                  d«      r|nt        t        |«      }|j                  ||f«       Œ° |S )	u   æ��å�– (title, url)zA<a[^>]*href="([^"]*show[^"]*id=(\d+))"[^>]*>\s*([^<]{4,}?)\s*</a>é   é   ú&nbsp;ú õ   Â ÚshowÚhttp)	ÚreÚfinditerÚgroupÚstripÚreplaceÚ
startswithr   r   Úappend)ÚhtmlÚitemsÚmÚhrefÚtitleÚfull_urls         r   Ú
parse_listr(   &   s¯   € à€Eä�[‰[Ð]Ð_cÓdò ,ˆØ�w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆØ—‘˜h¨Ó,×4Ñ4°X¸sÓC×IÑIÓKˆÚ�V˜t’^Ø#Ÿ™¨vÔ6‘t¼GÄHÈdÓ<SˆHØ�L‰L˜% Ð*Õ+ð,ð €Lr   c                 ó`  — d}t        j                  d| t         j                  «      }|r8t        j                  dd|j	                  d«      «      j                  «       }|r|}|sot        j                  d| t         j                  «      }|rH|j	                  d«      j                  «       }t        j                  dd|«      j                  «       }|r|}|st        j                  d| t         j                  «      D ]W  }t        j                  dd|j	                  d«      «      j                  «       }t        |«      dk\  sŒFd	|vsŒKd
|vsŒPd|vsŒU|} n |j                  dd«      j                  dd«      j                  «       }d}t        j                  d| «      }|rU|j	                  d«      › d|j	                  d«      j                  d«      › d|j	                  d«      j                  d«      › �}d}t        j                  d| t         j                  «      }|s%t        j                  d| t         j                  «      }|�ræ|j	                  d«      j                  «       }g }t        j                  d|t         j                  «      D �]„  }	|	j	                  d«      j                  «       }
|
sŒ&t        j                  d|
«      }|r|j	                  d«      nd}|dk(  r¨t        j                  dd|
«      j                  «       }t        j                  dd|«      j                  «       }|sŒ£t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  d|› d�«       Œþ|dk(  �r4t        j                  d|
t         j                  «      }|D ]Æ  \  }}t        j                  dd|«      j                  «       }|j                  d «      r|nt        t        |«      }d!|v s|j!                  d"«      rL|j                  d#|› d$|xs1 t"        j$                  j'                  |j)                  d%«      d&   «      › d'�«       Œ¯|j                  d#|› d$|› d'�«       ŒÈ t        j                  dd|
«      j                  «       }|s�Œ|r�Œ!|j                  d|› d�«       �Œ8|d(k(  r|j                  |
«       �ŒP|d)k(  rët        j                  d*|
«      }t        j                  dd|
«      j                  «       }|s�Œ”|j	                  d«      j                  d «      r|j	                  d«      nt        t        |j	                  d«      «      }|j                  d#|› d$|xs@ t"        j$                  j'                  |j	                  d«      j)                  d%«      d&   «      › d'�«       �Œ@|d+k(  s�ŒGt        j                  d,|
«      }|s�Œa|j                  d-|j	                  d«      › d$�«       �Œ‡ d.j+                  d/„ |D «       «      }|||d0œS )1u   æ��å�–è¯¦æƒ…Ú z,<div class="ar_title">\s*<h1[^>]*>(.*?)</h1>ú<[^>]+>r   z<title>(.*?)</title>uF   \s*-\s*æ–‡ä»¶å…¬ç¤º\s*-\s*è¥¿å®‰ä¸­åœ°çŽ¯å¢ƒç§‘æŠ€æœ‰é™�å…¬å�¸_å®˜ç½‘$z<h1[^>]*>(.*?)</h1>é
   u   æ–°é—»ä¸­å¿ƒu   å¿«æ�·é€šé�“u   æ–‡ä»¶å…¬ç¤ºr   r   r   u:   å�‘å¸ƒæ—¶é—´[ï¼š:].*?(\d{4})[\.\-](\d{1,2})[\.\-](\d{1,2})ú-é   r   zX<div class="article">(.*?)(?=</div>\s*</div>|</div>\s*<div class="[^"]*(?:clear|n_|ar_))z <div class="article">(.*?)</div>zY(<p[^>]*>.*?</p>|<div[^>]*>.*?</div>|<table[^>]*>.*?</table>|<a[^>]*>.*?</a>|<img[^>]*/>)z<(\w+)Úpz^<p[^>]*>|</p>$z\sstyle="[^"]*"z<span[^>]*>|</span>z<strong[^>]*>|</strong>z<p>z</p>Údivz$<a[^>]*href="([^"]*)"[^>]*>(.*?)</a>r   Ú
uploadfile)z.pdfz.docz.docxz.zipz.rarz.xlsz.xlsxz	<a href="z">ú?r   z</a>ÚtableÚazhref="([^"]*)"Úimgzsrc="([^"]*)"z
<img src="z

c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)N)r   )Ú.0r/   s     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>’   s   è ø€ Ò> a°A·G±GµI¤Ñ>ùs   ‚˜)r&   Úpublish_dateÚ	body_text)r   ÚsearchÚDOTALLÚsubr   r   r   Úlenr   ÚzfillÚmatchr!   Úfindallr    r   r   ÚendswithÚosÚpathÚbasenameÚsplitÚjoin)r"   Úurlr&   r$   Útr9   r:   ÚinnerÚpartsÚm_elemÚ	elem_htmlÚtagÚtag_nameÚp_innerÚp_textÚcleanedÚa_in_divr%   Útextr'   Údiv_textÚsrcs                         r   Úparse_detailrW   4   sV  € ð €Eä
�	‰	ÐAÀ4ÌÏÉÓS€AÙÜ�F‰F�:˜r 1§7¡7¨1£:Ó.×4Ñ4Ó6ˆÙØˆEáÜ�I‰IÐ-¨t´R·Y±YÓ?ˆÙØ—‘˜“
× Ñ Ó"ˆAÜ—‘Ð`ÐbdÐfgÓh×nÑnÓpˆAÙØ�áÜ—‘Ð3°T¼2¿9¹9ÓEò 	ˆAÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆAÜ�1‹v˜‹| °aÒ 7¸NÐRSÒ<SÐXfÐnoÒXoØ�Ùð		ð �M‰M˜( CÓ(×0Ñ0°¸3Ó?×EÑEÓG€Eð €LÜ
�	‰	ÐOÐQUÓV€AÙØŸ'™' !›*˜ Q q§w¡w¨q£z×'7Ñ'7¸Ó':Ð&;¸1¸Q¿W¹WÀQ»Z×=MÑ=MÈaÓ=PÐ<QÐRˆð €IÜ
�	‰	ÐmÐosÔuw×u~Ñu~Ó€AÙÜ�I‰IÐ9¸4ÄÇÁÓKˆâØ—‘˜“
× Ñ Ó"ˆØˆä—k‘kÐ"~ð  AFô  HJ÷  HQñ  HQó  Ró 0	@ˆFØŸ™ Q›×-Ñ-Ó/ˆIÙØä—(‘(˜9 iÓ0ˆCÙ'*�s—y‘y ”|°ˆHà˜3ŠäŸ&™&Ð!3°R¸ÓC×IÑIÓK�ÜŸ™ 
¨B°Ó8×>Ñ>Ó@�ÙØÜŸ&™&Ð!3°R¸ÓA�äŸ&™&Ð!7¸¸WÓE�ÜŸ&™&Ð!;¸RÀÓI�Ø—‘˜s 7 )¨4Ð0Õ1à˜UÓ"äŸ:™:Ð&MÈyÔZ\×ZcÑZcÓd�Ø"*ò I‘J�D˜$ÜŸ6™6 *¨b°$Ó7×=Ñ=Ó?�DØ'+§¡°vÔ'>™tÄGÌHÐVZÓD[�HØ# tÑ+¨t¯}©}Ð=wÔ/xØŸ™ y°°
¸"¸TÒ=iÄRÇWÁW×EUÑEUÐVZ×V`ÑV`ÐadÓVeÐfgÑVhÓEiÐ<jÐjnÐ%oÕpàŸ™ y°°
¸"¸T¸FÀ$Ð%GÕHðIô Ÿ6™6 *¨b°)Ó<×BÑBÓD�Û£HØ—L‘L 3 x j°Ð!5Ö6à˜WÒ$Ø—‘˜YÖ'à˜S’Ü—y‘yÐ!2°IÓ>�Ü—v‘v˜j¨"¨iÓ8×>Ñ>Ó@�ÛØ04·
±
¸1³×0HÑ0HÈÔ0P˜tŸz™z¨!œ}ÔV]Ô^fÐhl×hrÑhrÐstÓhuÓVv�HØ—L‘L 9¨X¨J°b¸Ò9nÄÇÁ×AQÑAQÐRV×R\ÑR\Ð]^ÓR_×ReÑReÐfiÓRjÐklÑRmÓAnÐ8oÐosÐ!tÖuà˜UÔ"Ü—i‘iÐ 0°)Ó<�ÛØ—L‘L :¨c¯i©i¸«l¨^¸2Ð!>Ö?ða0	@ðd —K‘KÑ>¨5Ô>Ó>ˆ	ð Ø$Øñð r   c                 ó  — | syt        j                  dt        | «      «      }|r[t        |j	                  d«      «      t        |j	                  d«      «      t        |j	                  d«      «      }}}|d›d|d›d|d›�S y)	Nr*   z(\d{4})-(\d{1,2})-(\d{1,2})r   r.   r   Ú04dr-   Ú02d)r   r@   ÚstrÚintr   )Údate_strr$   ÚyÚmoÚds        r   Ú	safe_datera   ›   sq   € ÙØÜ
�‰Ð/´°X³Ó?€AÙÜ�q—w‘w˜q“z“?¤C¨¯©°«
£O´S¸¿¹À»³_ˆqˆ2ˆØ�C�˜˜"˜S˜  1 S 'Ð*Ð*Ør   c                 óŠ   — | syt        j                  dd| «      }t        j                  dd|«      j                  «       }|d | S )Nr*   r+   r   z\s+)r   r=   r   )rT   Úmax_lenr   s      r   Útruncate_summaryrd   ¥   sA   € ÙØÜ
�‰ˆz˜3 Ó%€AÜ
�‰ˆv�s˜AÓ×$Ñ$Ó&€AØˆXˆgˆ;Ðr   c                 óì  — t        «       }t        j                  t        «      }|j	                  d«       |j	                  d«       |j	                  dt
        f«      }t        d„ |j                  «       D «       «      }dx}x}}t        | t        «      }t        dt        |«      › d|› d�«       t        d	|d	z   «      D �]w  }	t        j                  |	«      }
t        d
|	› d|› d|
› �d¬«       	 |j                  |
d¬«      }d|_        |j"                  dk7  rt        d|j"                  › d�«       |d	z  }Œx	 t+        |j,                  «      }t        dt        |«      › d�d¬«       |st        d«        �nÃ|D �]¥  \  }}||v r|d	z  }Œ	 |j                  |d¬«      }d|_        |j"                  dk7  r$t        d|dd › d|j"                  › �«       |d	z  }Œ_	 t/        |j,                  |«      }|d   }t1        |d    «      }t3        |«      }	 |j	                  d!t
        |||d"   dd# ||dd# |d$d%t4        d%f«      }|j6                  dkD  rº|j	                  d&|f«      j9                  «       }|rp|d   }|d"   j;                  d'd(«      }t
        j;                  d'd(«      }|j;                  d'd(«      }d)|› d*|› d+|› d+|› d,�	}t=        j>                  d-t        |gdd¬.«       |jA                  |«       |jC                  «        |d	z  }n|d	z  }t'        j(                  d0«       �Œ¨ t'        j(                  d	«       �Œz |jE                  «        t        d1|› d2|› d3|› �«       |S # t$        $ r3}t        d|› �«       |d	z  }t'        j(                  d«       Y d}~�ŒØd}~ww xY w# t$        $ r$}t        d|dd › d|› �«       |d	z  }Y d}~�ŒNd}~ww xY w# t$        $ r}t        d/|› �«       |d	z  }Y d}~Œæd}~ww xY w)4u   ä¸»çˆ¬å�–é€»è¾‘zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz.SELECT page_url FROM gov_raw WHERE site_name=?c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   N© )r7   Úrows     r   r8   zcrawl.<locals>.<genexpr>·   s   è ø€ Ò=˜c�3�q•6Ñ=ùs   ‚r   u2   [è¥¿å®‰ä¸­åœ°Â·æ–‡ä»¶å…¬ç¤º] å¼€å§‹çˆ¬å�–, å·²æœ‰ u    æ�¡, ç›®æ ‡ u    é¡µr   u     ç¬¬ ú/u    é¡µ: T)Úflushé   )Útimeoutzutf-8éÈ   z	    HTTP u   , è·³è¿‡u       è¯·æ±‚å¤±è´¥: r   Nu       å�‘çŽ° u    æ�¡u       æ— æ�¡ç›®, å�œæ­¢ç¿»é¡µu       âš  z	... HTTP u       âœ— u   ... è¯·æ±‚å¤±è´¥: r:   r9   z÷INSERT OR IGNORE INTO gov_raw
                    (site_name, source_url, page_url, title, publish_date,
                     summary, content, status, category, group_name, attachments)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r&   iô  Úactiver*   z'SELECT id FROM gov_raw WHERE page_url=?ú'z''z@INSERT INTO gov_search(rowid, title, site_name, summary) VALUES(z,'z','z')Úsqlite3)Úcapture_outputrl   u       âœ— DB error: g      à?u.   
[è¥¿å®‰ä¸­åœ°Â·æ–‡ä»¶å…¬ç¤º] å®Œæˆ�ï¼�æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ )#r   rp   ÚconnectÚDB_PATHÚexecuteÚ	SITE_NAMEÚsetÚfetchallÚminÚ	MAX_PAGESÚprintr>   ÚrangeÚLIST_TPLÚformatr   ÚencodingÚstatus_codeÚ	ExceptionÚtimeÚsleepr(   rT   rW   ra   rd   ÚGROUPÚrowcountÚfetchoner   Ú
subprocessÚrunÚaddÚcommitÚclose)Ú	max_pagesr   ÚdbÚexisting_curÚexistingÚ	total_newÚ
total_skipÚtotal_errorÚpages_to_crawlÚpageÚpage_urlÚrespÚer#   Ú
list_titlerH   Údetail_respÚinfoÚbodyÚpub_dateÚsummaryÚcurrh   ÚridÚ	esc_titleÚesc_siteÚesc_summaryÚsqls                               r   Úcrawlr£   ­   sY  € ä‹€Aä	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+ð —:‘:ÐNÔQZÐP\Ó]€LÜÑ= \×%:Ñ%:Ó%<Ô=Ó=€Hà+,Ð,€IÐ,�
˜[Ü˜¤IÓ.€NÜ	Ð>¼sÀ8»}¸oÈ]Ð[iÐZjÐjnÐ
oÔpä�a˜¨!Ñ+Ó,ó IˆÜ—?‘? 4Ó(ˆÜ��t�f˜A˜nÐ-¨V°H°:Ð>ÀdÕKð	Ø—5‘5˜¨2�5Ó.ˆDØ#ˆDŒMØ×Ñ 3Ò&Ü˜	 $×"2Ñ"2Ð!3°8Ð<Ô=Ø˜qÑ �Øð 'ô ˜4Ÿ9™9Ó%ˆÜ�œC ›J˜< tÐ,°DÕ9ÙÜÐ/Ô0Úà$ó 0	‰OˆJ˜Ø�h‰Ø˜a‘�
Øð
ØŸe™e C°˜eÓ4�Ø'.�Ô$Ø×*Ñ*¨cÒ1Ü˜H Z°° _Ð$5°Y¸{×?VÑ?VÐ>WÐXÔYØ 1Ñ$�KØð 2ô   × 0Ñ 0°#Ó6ˆDØ˜Ñ$ˆDÜ   nÑ!5Ó6ˆHÜ& tÓ,ˆGð!Ø—j‘jð "@ô ˜s C¨¨g©°t¸Ð)<¸hØ˜D˜S�M 4¨°2´u¸bðBó�ð —<‘< !Ò#ØŸ*™*Ð%NÐQTÐPVÓW×`Ñ`Ób�CÙØ! !™f˜Ø$(¨¡M×$9Ñ$9¸#¸tÓ$D˜	Ü#,×#4Ñ#4°S¸$Ó#?˜Ø&-§o¡o°c¸4Ó&@˜Ø `ÐadÐ`eÐegÐhqÐgrÐruÐv~Ðuð  @Cð  DOð  CPð  PRð  S˜Ü"Ÿ™¨	´7¸CÐ'@ÐQUÐ_aÕbØ—L‘L Ô%Ø—I‘I”KØ ‘N‘Ià !‘O�Jô
 �J‰J�sŽOða0	ôd 	�
‰
�1ŽðSIðV ‡H�H„JÜ	Ð;¸I¸;ÀiÐPZÈ|Ð[dÐepÐdqÐ
rÔsØÐøôE ò 	ÜÐ& q cÐ*Ô+Ø˜1ÑˆKÜ�J‰J�qŒMÝûð		ûô0 ò Ü˜ ¨C¨R Ð 1Ð1CÀAÀ3ÐGÔHØ˜qÑ �Ýûðûô@ ò !ÜÐ*¨1¨#Ð.Ô/Ø˜qÑ •ûð!úsK   Ã-AMÆ	ANÈC<OÍ	NÍ'(NÎNÎ	O
Î&OÏO
Ï	O3ÏO.Ï.O3Ú__main__u,   è¥¿å®‰ä¸­åœ°çŽ¯å¢ƒç§‘æŠ€Â·æ–‡ä»¶å…¬ç¤ºçˆ¬è™«)Údescriptionz--max-pagesu   æœ€å¤§é¡µæ•° (é»˜è®¤ ú))ÚtypeÚdefaultÚhelp)r‹   )i,  )"Ú__doc__ÚsysrC   r   r�   rp   r†   ÚhashlibÚargparser   Úurllib.parser   r   r   r|   ru   rƒ   rs   ry   r   r   r(   rW   ra   rd   r£   Ú__name__ÚArgumentParserÚparserÚadd_argumentr\   Ú
parse_argsÚargsr‹   rg   r   r   ú<module>rµ      sÙ   ðñ÷ A× @× @× @Ý Ý  Û à!€ØV€Ø3€	Ø€Ø
€Ø€	ð ð Gð€òòòdòNóð ó ]ð@ ˆzÒØ$ˆX×$Ñ$Ð1_Ô`€FØ
×Ñ˜¨C¸ÐK`ÐajÐ`kÐklÐImÐÔnØ×ÑÓ€DÙ	�D—N‘NÖ#ð	 r   