Ë
    <˜jA*  ã                   ó”  — 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dl	m
Z
 ddlZdZdZ ej                  «       Zej                   j#                  ddd	d
œ«       dZdZdZdd„Zd„ Zdd„Zdd„Zedk(  rL ej4                  d¬«      Zej9                  dedd¬«       ej=                  «       Z eej@                  ¬«       yy)uˆ   
æ¸…å¾�åŽ¿äººæ°‘æ”¿åºœ - ä¿¡æ�¯å…¬å¼€ çˆ¬è™«
JEECMS, 20é¡µÃ—20æ�¡=400æ�¡
é™„ä»¶ä¸ºä¸»ï¼ˆPDF/DOCXï¼‰ï¼Œæ­£æ–‡å†…å®¹ä»¥é“¾æŽ¥å½¢å¼�åµŒå…¥
é    N)Údatetime)ÚurljoinzDhttps://www.qx.gov.cn/xxgk2222222222222222222222222222222222222.htmlzhttps://www.qx.gov.cn/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-Languageu   æ¸…å¾�åŽ¿ä¿¡æ�¯å…¬å¼€u   åŽ¿åŒºz/mnt/data/search.dbc                 óô   — t        |«      D ]T  }	 t        j                  | d¬«      }d|_        |j                  dk(  r|j
                  c S 	 t        j                  d«       ŒV y # t        $ r
}Y d }~Œ&d }~ww xY w)Né   )Útimeoutzutf-8éÈ   é   )	ÚrangeÚSESSIONÚgetÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚmax_retriesÚattemptÚrespÚes        ú"/root/gov_crawler/crawl_qx_xxgk.pyÚfetchr      sx   € Ü˜Ó%ò ˆð	Ü—;‘;˜s¨B�;Ó/ˆDØ#ˆDŒMØ×Ñ 3Ò&Ø—y‘yÒ ð 'ô 	�
‰
�1�ðð øô ò 	Üûð	ús   �8A$Á$	A7Á2A7c                 ó  — g }| j                  d«      }|dk(  r|S | j                  dd|«      }|dk(  r|S | || }t        j                  d|t        j                  «      D ]£  }|j                  d«      j                  «       }|j                  d«      j                  dd	«      j                  d
d	«      j                  «       }|j                  d«      j                  «       }	|sŒƒ|sŒ†|j                  |t        ||«      |	f«       Œ¥ |S )z*Extract (title, url, date) from list page.Ú	list_pageéÿÿÿÿz<ulr   za<li>\s*<a href="([^"]+)" title="([^"]*)"[^>]*>.*?</a>\s*<span class="riqi">([^<]+)</span>\s*</li>é   r
   ú&nbsp;ú õ   Â é   )
ÚfindÚrfindÚreÚfinditerÚDOTALLÚgroupÚstripÚreplaceÚappendr   )
ÚhtmlÚbase_urlÚitemsÚidxÚsection_startÚsectionÚmÚhrefÚtitleÚdates
             r   Úparse_list_pager6   %   s  € à€Eà
�)‰)�KÓ
 €CØ
ˆb‚yØˆØ—J‘J˜u a¨Ó-€MØ˜ÒØˆØ�= Ð%€Gä�[‰[Ð}ð  @Gô  IK÷  IRñ  IRó  Sò AˆØ�w‰w�q‹z×ÑÓ!ˆØ—‘˜“
×"Ñ" 8¨SÓ1×9Ñ9¸(ÀCÓH×NÑNÓPˆØ�w‰w�q‹z×ÑÓ!ˆÚ’TØ�L‰L˜%¤¨°4Ó!8¸$Ð?Õ@ðAð €Ló    c                 ót  ‡— d}t        j                  d| t         j                  «      }|rJ|j                  d«      j	                  «       }dD ]$  }|j                  |«      sŒ|dt        |«        } n |}|r	|dk(  sd|v rct        j                  d| t         j                  «      }|r<t        j                  d	d|j                  d«      «      j	                  «       }|rd|vr|}|rd|v st        |«      d
k  r|}|j                  dd«      j                  dd«      j	                  «       }d}t        j                  d| «      }|r!|j                  d«      j                  dd«      }d}| j                  d«      }	|	dk(  r| j                  d«      }	|	dk7  r| j                  d|	«      }
|
dk7  r| |	|
dz    }d}|r7t        j                  d|«      }|r|j                  d«      j	                  «       }g }|r›t        j                  d|«      D ]‚  }|j                  d«      j	                  «       }|j                  d«      j	                  «       }t        j                  dd|«      j	                  «       }|j                  |t        ||«      f«       Œ„ |}|r“g }t        j                  d	d|«      j	                  «       Š‰r%t        ˆfd„dD «       «      r|j                  ‰«       |j                  d«       |D ]  \  }}|j                  d|› d|› d�«       Œ dj                  |«      }n|j	                  «       s|}||||fS ) z.Extract title, date, content from detail page.Ú z<title>(.*?)</title>r   )u+   -å¤ªåŽŸå¸‚æ¸…å¾�åŽ¿äººæ°‘æ”¿åºœé—¨æˆ·ç½‘ç«™u   -æ¸…å¾�åŽ¿äººæ°‘æ”¿åºœNu!   æ¸…å¾�åŽ¿äººæ°‘æ”¿åºœé—¨æˆ·ç½‘ç«™u   é—¨æˆ·ç½‘ç«™z<h1[^>]*>(.*?)</h1>z<[^>]+>é   r   r    r!   u0   æ—¶é—´[ï¼š:]\s*<em>(\d{4}[-/]\d{1,2}[-/]\d{1,2})ú/ú-z	id="Zoom"r   z</div>é   zD<!--\s*<\$\[CONTENT\]>start-->([\s\S]*?)<!--\s*<\$\[CONTENT\]>end-->z$<a\s+href="([^"]+)"[^>]*>([^<]+)</a>r
   z<span[^>]*>.*?</span>c              3   ó,   •K  — | ]  }|‰v sŒ|–— Œ y ­w)N© )Ú.0ÚcÚ	text_onlys     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>z   s   øè ø€ Òl 1Ð]^ÐbkÒ]kœQÑlùs   ƒ	�)u   å‘Šu   ç¤ºu   é€šu   çŸ¥u   å…¬u   é¡¹u   ç›®u   
**ç›¸å…³æ–‡ä»¶ï¼š**ú[z](ú)z

)r%   Úsearchr'   r(   r)   ÚendswithÚlenÚsubr*   r#   r&   r+   r   ÚanyÚjoin)r,   Úpage_urlÚ
list_titler4   r2   ÚtÚsuffixÚpublish_dateÚcontent_htmlÚ
zoom_startÚ
zoom_closeÚcontent_bodyÚattachmentsr3   ÚnameÚcontent_textÚlinesrB   s                    @r   Úparse_detailrY   9   s  ø€ ð €EÜ
�	‰	Ð)¨4´·±Ó;€AÙØ�G‰G�A‹J×ÑÓˆà_ò 	ˆFØ�z‰z˜&Õ!Ø�mœ˜F›�|Ð$�Ùð	ð ˆá�EÐ@Ò@ÀNÐV[ÑD[Ü�I‰IÐ,¨d´B·I±IÓ>ˆÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆAÙ�^¨1Ñ,Ø�á�N eÑ+¬s°5«z¸Aª~ØˆØ�M‰M˜( CÓ(×0Ñ0°¸3Ó?×EÑEÓG€Eð €LÜ
�	‰	ÐEÀtÓL€AÙØ—w‘w˜q“z×)Ñ)¨#¨sÓ3ˆð €LØ—‘˜;Ó'€JØ�RÒØ—Y‘Y˜}Ó-ˆ
Ø�RÒØ—Y‘Y˜x¨Ó4ˆ
Ø˜ÒØ 
¨:¸©>Ð:ˆLð €LÙÜ�I‰IÐ]Ð_kÓlˆÙØŸ7™7 1›:×+Ñ+Ó-ˆLð €KÙÜ—‘ÐDÀlÓSò 	@ˆAØ—7‘7˜1“:×#Ñ#Ó%ˆDØ—7‘7˜1“:×#Ñ#Ó%ˆDä—6‘6Ð2°B¸Ó=×CÑCÓEˆDØ×Ñ ¤g¨h¸Ó&=Ð>Õ?ð	@ð  €LÙàˆä—F‘F˜: r¨<Ó8×>Ñ>Ó@ˆ	ÙœÓlÐ(YÔlÔlØ�L‰L˜Ô#Ø�‰Ð,Ô-Ø%ò 	.‰JˆD�$Ø�L‰L˜1˜T˜F " T F¨!Ð,Õ-ð	.à—{‘{ 5Ó)‰Ø×ÑÔ!Øˆà�, ¨kÐ9Ð9r7   r:   c                 óÚ  — t        t        «      }|s0t        dt        j                  ¬«       t        j
                  d«       d}t        | |«      }t        d|› d|› �«       g }t        gt        d|dz   «      D �cg c]  }d|› d	�‘Œ
 c}z   }t        |«      D ]k  \  }}|d
k(  r|}	nt        |«      }	|	sŒt        |	|«      }
|j                  |
«       t        d|dz   › dt        |
«      › d�«       t        j                  d«       Œm t        «       }g }|D ]0  \  }}}||vsŒ|j                  |«       |j!                  |||f«       Œ2 t        dt        |«      › �«       t        «       }	 t#        j$                  dt&        dgddd¬«      }|j(                  j+                  «       r2t        |j(                  j+                  «       j-                  d«      «      }|r |D ���cg c]  \  }}}||vsŒ|||f‘Œ c}}}n|}t        dt        |«      › �«       |st        d«       y t1        j2                  t&        «      }|j5                  d«       d
}d
}g }|D �]@  \  }}}t        |«      }|rd|v �rU|}|}|}t        |«      dkD  r#|d d j7                  dd«      j+                  «       n|j7                  dd«      }d}|}	 |j5                  d|||t8        ||||dt:        f
«      } | j<                  d
kD  rÒ|dz  }| j>                  }!|j!                  d|!› d|j7                  tA        d «      tA        d «      tA        d «      z   «      › d!t8        j7                  tA        d «      tA        d «      tA        d «      z   «      › d!|j7                  tA        d «      tA        d «      tA        d «      z   «      › d"�	«       t        d#|› d$|d d% › d&�«       �Œo|s|dz  }�ŒxtC        |||«      \  }#}$}}%|#xs |j7                  d(d«      j+                  «       }|$xs |}t        |«      dkD  r#|d d j7                  dd«      j+                  «       n|j7                  dd«      }|%r)d)jE                  |%D �&�'cg c]  \  }&}'|&› d*|'› �‘Œ c}'}&«      nd}|}	 |j5                  d+|||t8        ||||dt:        f
«      } | j<                  d
kD  rÒ|dz  }| j>                  }!|j!                  d|!› d|j7                  tA        d «      tA        d «      tA        d «      z   «      › d!t8        j7                  tA        d «      tA        d «      tA        d «      z   «      › d!|j7                  tA        d «      tA        d «      tA        d «      z   «      › d"�	«       t        d#|› d$|d d% › d&�«       t        j                  d,«       �ŒC |jG                  «        |r\	 |j!                  d-«       t#        j$                  dt&        gdjE                  |«      ddd.¬/«       t        d0t        |«      dz
  › d1�«       |jI                  «        t        d3|› d4|› �«       y c c}w # t.        $ r Y �Œ`w xY wc c}}}w # t.        $ r.}"t        d'|"› �t        j                  ¬«       |dz  }Y d }"~"�Œµd }"~"ww xY wc c}'}&w # t.        $ r.}"t        d'|"› �t        j                  ¬«       |dz  }Y d }"~"�Œ6d }"~"ww xY w# t.        $ r(}"t        d2|"› �t        j                  ¬«       Y d }"~"Œäd }"~"ww xY w)5Nz ERROR: Failed to fetch list page)Úfiler   é   zTotal: z pages, fetching: r
   z@https://www.qx.gov.cn/xxgk2222222222222222222222222222222222222_z.htmlr   z  Page z: z itemsz
Total unique: Úsqlite3zFSELECT page_url FROM gov_raw WHERE page_url LIKE '%qx.gov.cn/xxgk222%'Té
   )Úcapture_outputr   r   ú
zNew: zNothing new.zPRAGMA journal_mode=WALu   <title>404é¡µé�¢</title>r	   r    r9   zó
                    INSERT INTO gov_raw (title, content, summary, site_name,
                    page_url, publish_date, source_url, attachments, category, group_name)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
                u   ä¿¡æ�¯å…¬å¼€zKINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (z,'é'   z','z');z  [z] é(   z...z	  ERROR: r!   z; ú|zã
                INSERT INTO gov_raw (title, content, summary, site_name,
                page_url, publish_date, source_url, attachments, category, group_name)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
            g333333Ó?z5INSERT INTO gov_search(gov_search) VALUES('rebuild');éx   )Úinputr_   r   r   zFTS: z rowszFTS error: z
Done. Inserted: z
, Errors: )%r   ÚBASE_URLÚprintÚsysÚstderrÚexitÚminr   Ú	enumerater6   ÚextendrH   r   r   ÚsetÚaddr+   Ú
subprocessÚrunÚDB_PATHÚstdoutr)   Úsplitr   r]   ÚconnectÚexecuter*   Ú	SITE_NAMEÚGROUPÚrowcountÚ	lastrowidÚchrrY   rK   ÚcommitÚclose)(Ú	max_pagesr,   Útotal_pagesÚpagesÚ	all_itemsÚpÚurlsÚir   Ú	page_htmlr.   ÚseenÚuniquerN   ÚuÚdÚexistingÚresÚ	new_itemsÚconnÚinsertedÚerrorsÚfts_sqlsr4   Ú	list_dateÚdetail_htmlÚcontentÚfinal_titleÚ
final_dateÚsummaryÚattachments_strÚ
source_urlÚcurÚridr   Ú	det_titleÚdet_daterU   rV   r3   s(                                           r   Úmainr�   …   sÿ  € Ü”‹?€DÙÜÐ0´s·z±zÕBÜ�‰�Œð €KÜ�	˜;Ó'€EÜ	ˆG�K�=Ð 2°5°'Ð
:Ô;ð €IÜˆ:ÔnsÐtuÐw|ð  @Añ  xAó  oBö  CÐijÐ[Ð\]Ð[^Ð^cÒdò  Cñ  C€Dä˜D“/ò 
‰ˆˆ3Ø�Š6Ø‰Iä˜c›
ˆIÙØÜ 	¨3Ó/ˆØ×Ñ˜ÔÜ�˜˜!™�u˜Bœs 5›z˜l¨&Ð1Ô2Ü�
‰
�1�ð
ô ‹5€DØ€FØò %‰ˆˆ1ˆaØ�DŠ=Ø�H‰H�QŒKØ�M‰M˜1˜a ˜)Õ$ð%ô
 
ÐœS ›[˜MÐ
*Ô+ô ‹u€HðÜ�n‰n˜i¬ØTðVà d°Bô8ˆð �:‰:×ÑÔÜ˜3Ÿ:™:×+Ñ+Ó-×3Ñ3°DÓ9Ó:ˆHñ KS¨&×FÐF™w˜q ! Q°A¸XÒ4E�!�Q˜’ÕFÐX^€IÜ	ˆE”#�i“.Ð!Ð
"Ô#áÜˆnÔØô �?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø€HØ€FØ€Hà!*ó AÑˆˆs�IÜ˜C“jˆÙÐ8¸KÒGàˆGØˆKØ"ˆJÜBEÀgÃ,ÐQTÒBT�g˜d˜s�m×+Ñ+¨D°#Ó6×<Ñ<Ô>ÐZa×ZiÑZiÐjnÐpsÓZtˆGØ ˆOØˆJðØ—l‘lð $ð " 7¨G´YØ˜: z°?ÀNÔTYð[ó	\�ð —<‘< !Ò#Ø ‘M�HØŸ-™-�CØ—O‘OØeÐfiÐejð kØ'×/Ñ/´°B³¼¸R»ÄÀRÃ¹ÓIÐJð KÜ%×-Ñ-¬c°"«g´s¸2³w¼sÀ2»w±ÓGÐHð IØ#ŸO™O¬C°«G´S¸³W¼SÀ»W±_ÓEÐFÀcðKôô ˜C ˜z¨¨K¸¸Ð,<Ð+=¸SÐAÔBñ áØ�a‰KˆFÙä4@ÀÈcÐSXÓ4YÑ1ˆ	�8˜W kØ Ò) E×2Ñ2°6¸3Ó?×EÑEÓGˆØÒ* ˆ
ä>AÀ'»lÈSÒ>P�'˜$˜3�-×'Ñ'¨¨cÓ2×8Ñ8Ô:ÐV]×VeÑVeÐfjÐloÓVpˆÙYd˜$Ÿ)™)È×$T¹*¸$À¨ v¨Q¨t¨fÒ%5Ó$TÔUÐjlˆØˆ
ð	Ø—,‘,ð  ð ˜w¨´Ø�z :¨ÀÔPUðWó	XˆCð �|‰|˜aÒØ˜A‘�Ø—m‘m�Ø—‘ØaÐbeÐafð gØ#×+Ñ+¬C°«G´S¸³W¼SÀ»W±_ÓEÐFð GÜ!×)Ñ)¬#¨b«'´3°r³7¼3¸r»7±?ÓCÐDð EØŸ™¬¨B«´°R³¼¸R»±ÓAÐBÀ#ðGôô ˜˜H˜: R¨°C°RÐ(8Ð'9¸Ð=Ô>ô
 	�
‰
�3ŽðCAðF 	‡K�K„Mñ ð	6Ø�O‰OÐSÔTÜ�N‰N˜I¤wÐ/Ø—i‘i Ó)¸$ÀTÐSVõXä�Eœ#˜h›-¨™/Ð*¨%Ð0Ô1ð 	‡J�J„LÜ	Ð˜x˜j¨
°6°(Ð
;Õ<ùòC Cøô@ ò Úðüô GøôR ò Ü˜	 ! �o¬C¯J©JÕ7Ø˜!‘–ûðüó %Uøô( ò 	Ü�I˜a˜S�/¬¯
©
Õ3Ø�a‰KŽFûð	ûô ò 	6Ü�K ˜sÐ#¬#¯*©*×5Ò5ûð	6úsv   Á:X#Å(A,X( ÇX8Ç*X8Ê7DX?ÑY9Ñ6DY?Ö&AZ9 Ø(	X5Ø4X5Ø?	Y6Ù#Y1Ù1Y6Ù?	Z6Ú#Z1Ú1Z6Ú9	[*Û[%Û%[*Ú__main__u   æ¸…å¾�åŽ¿ä¿¡æ�¯å…¬å¼€çˆ¬è™«)Údescriptionz--max-pagesu   æœ€å¤§çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelp)r~   )r"   )r9   )r:   )!Ú__doc__rh   r%   r   r]   rp   ÚhashlibÚargparser   Úurllib.parser   Úrequestsrf   ÚBASE_DIRÚSessionr   ÚheadersÚupdaterw   rx   rr   r   r6   rY   r�   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsr~   r?   r7   r   ú<module>r³      sÛ   ðñ÷ =× <× <Ó <Ý Ý  Û àQ€Ø#€Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ ð DØOØ0ñô ð
 $€	Ø€Ø
€ó
òó(J:óXN=ð` ˆzÒØ$ˆX×$Ñ$Ð1NÔO€FØ
×Ñ˜¨C¸ÐAUÐÔVØ×ÑÓ€DÙ�4—>‘>Ö"ð	 r7   