Ë
    ¸¬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mZ ddlm	Z	 dZ
dZdZdZd	Zd
ZdZ ej"                  dej$                  «      ZddiZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uð  ç�…ç�Šæ–°é—»ç½‘ â€” å…¬ç¤ºå…¬å‘Šçˆ¬è™«
URL: http://www.langya.cn/lyxw/gsgg/
CMS: linyi.gov.cn ç³»ç»Ÿèµ„æº� (pagedown/sys.css)
åˆ—è¡¨: div.article-item > h3.article-title > a[title]
  ç¬¬1é¡µ: index.html  ç¬¬Né¡µ: index_{N}.html
  å…±19é¡µ (æ¯�é¡µæ�¡æ•°ä¸�å›ºå®š 12/9/4/2, 20é¡µèµ·é‡�å¤�è¿”å›žæœ«å°¾)
è¯¦æƒ…: /a/4033/{id}/{longid}.html
  æ ‡é¢˜: meta ArticleTitle
  æ—¥æœŸ: meta PubDate (2026-07-29 16:08)
  æ�¥æº�: meta ContentSource
  æ­£æ–‡: div.v_news_content (å¤špæ®µè�½, çŽ¯è¯„å…¬ç¤ºä¸ºä¸»)
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbzhttp://www.langya.cnz/lyxw/gsgg/u   ç�…ç�Šæ–°é—»ç½‘-å…¬ç¤ºå…¬å‘Šu   å±±ä¸œzcrawl_langya_gsgg.pyé   z1\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|txt|et|ofd)$z
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36c                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    ú&/root/gov_crawler/crawl_langya_gsgg.pyÚlogr       s   € Ü	ˆ#”C—J‘J dÖ+ó    c                 ó˜  — | dk(  rt         t        z   dz   }nt         t        z   d| dz
  › d�z   }	 t        j                  |t        d¬«      }d|_        t        |j                  d«      }g }|j                  dd¬«      D �]   }|j                  dd¬«      }|sŒ|j                  dd¬«      }|sŒ0|d   j                  «       }	|	r	|	dk(  sd|	v rŒO|	j                  d«      st        t         t        z   |	«      }	|j                  dd«      j                  «       xs |j                  d¬«      }
d}|j                  dt!        j"                  d«      ¬«      }|r7t!        j$                  d|j                  «       «      }|r|j'                  d«      }|j)                  |
|	|dœ«       �Œ# |S # t        $ r}t        d| › d	|› �«       g cY d
}~S d
}~ww xY w)u)   æŠ“åˆ—è¡¨é¡µ, è¿”å›ž [{title, url, date}]é   z
index.htmlÚindex_z.htmlé   ©ÚheadersÚtimeoutúutf-8u     [WARN] ç¬¬u   é¡µè¯·æ±‚å¤±è´¥: Núhtml.parserÚdivzarticle-item©Úclass_Úh3zarticle-titleÚaT©Úhrefr   ú#Ú
javascriptÚhttpÚtitleÚ ©Ústripzarticle-metaú(20\d{2}-\d{2}-\d{2}))r#   ÚurlÚdate)ÚBASEÚLIST_DIRÚrequestsÚgetÚHEADERSÚencodingÚ	Exceptionr   r   ÚtextÚfind_allÚfindr&   Ú
startswithr   Úget_textÚreÚcompileÚsearchÚgroupÚappend)Úpgr(   ÚrÚeÚsoupÚitemsÚitemr   r   r   r#   r)   Úmeta_elÚdms                 r   Ú
crawl_listrC   $   s±  € à	ˆQ‚wÜ”X‰o Ñ,‰ä”X‰o &¨¨A©¨¨eÐ 4Ñ4ˆðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ô ˜Ÿ™ Ó/€DØ€EØ—‘˜e¨N�Ó;ó BˆØ�Y‰Y�t OˆYÓ4ˆÙØØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆÙ�t˜s’{ l°dÑ&:ØØ�‰˜vÔ&Üœ4¤(™?¨DÓ1ˆDØ—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆØˆØ—)‘)˜E¬"¯*©*°^Ó*D�)ÓEˆÙÜ—‘Ð3°W×5EÑ5EÓ5GÓHˆBÙØ—x‘x “{�Ø�‰˜u¨T¸4Ñ@ÖAð'Bð( €Løô3 ò Üˆl˜2˜$Ð/°¨sÐ3Ô4Ø�	ûðús   ¯#F# Æ#	G	Æ,GÆ>G	ÇG	c                 ó	  ‡— d}t        d«      D ]u  }	 t        j                  | t        d¬«      }d|_        |j
                  }t        |«      dkD  r n5t        dt        |«      › d|d	z   › d
�«       t        j                  d«       Œw |syt        |d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }d}	|j                  dddi¬«      }
|
r=|
j                  d«      r,t        j                   d|
d   «      }|r|j#                  d	«      }	d}|j                  dd¬«      }|s&|j                  dt        j$                  d«      ¬«      }|�rÒg }t'        «       Š|j)                  d d¬!«      D ]®  }|d"   j                  «       }t*        j!                  |«      sŒ,|j-                  d#«      st/        t0        |«      }|j                  d$d«      j                  «       xs |j                  d¬«      xs d%}|‰vsŒŠ‰j3                  |«       |j5                  ||d&œ«       Œ° g }|j)                  g d'¢d¬(«      D �]  }|j6                  d)k7  r|j9                  d)«      rŒ%|j6                  d*k(  r)t;        ˆfd+„|j)                  d gd¬!«      D «       «      }|rŒ]t=        |«      j                  «       }|sŒy|j6                  d*k(  r@|j                  d)«      rŒš|j                  d*d,¬(«      }|rt=        |«      j                  «       }|j6                  dk(  r%|j9                  d«      r|j                  d*d)g«      sŒü|j6                  d-v s�Œ|j5                  |«       �Œ d.j?                  |«      j                  «       }g }|jA                  d.«      D ]Q  }|j                  «       }|sŒt        jB                  d/d|«      j                  «       sŒ<||vsŒA|j5                  |«       ŒS d.j?                  |«      j                  «       }|r$d0j?                  d1„ |D «       «      }|r|d.z   |z   n|}||	|fS # t        $ r}t        d| › d|› �«       Y d}~�Œd}~ww xY w)2u   è¿”å›ž (title, date, content)r$   é   r   r   r   iÐ  u     [WARN] è¯¦æƒ…å“�åº”è¿‡å°�(u   ), ç¬¬r   u	   æ¬¡é‡�è¯•u     [WARN] è¯¦æƒ…å¤±è´¥ z: Né   )NNNr   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1Tr%   ÚPubDater'   r   Úv_news_contentr   z	^content_)Úidr   r   r   r"   r#   u   é™„ä»¶)rH   r(   )Úpr   Útable)Ú	recursiverQ   rP   c              3   ób   •K  — | ]&  }|j                  d d«      j                  «       ‰v –— Œ( y­w)r   r$   N)r-   r&   )Ú.0r   Úseen_atts     €r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>„   s2   øè ø€ ò >àð —E‘E˜& "Ó%×+Ñ+Ó-°Ô9ñ>ùs   ƒ,/F)rP   rQ   z

ú<[^>]+>ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)z<p><a href="r(   z">rH   z</a></p>N© )rT   Úatts     r   rV   z!extract_detail.<locals>.<genexpr>¤   s(   è ø€ Ò!lÐY\ L°°U±°¸B¸sÀ6¹{¸mÈ8Ô"TÑ!lùs   ‚)"Úranger,   r-   r.   r/   r1   Úlenr   r0   ÚtimeÚsleepr   r3   r&   r5   r6   r8   r9   r7   Úsetr2   Ú	ATTACH_REr4   r   r*   Úaddr:   rH   Úfind_parentÚanyÚstrÚjoinÚsplitÚsub)r(   ÚhtmlÚattemptr<   r=   r>   r#   ÚmtÚhr)   ÚmdÚmrK   ÚdcÚattachmentsr   r   rH   ÚpartsÚnodeÚhas_attÚhtml_strÚinner_pÚ
uniq_partsÚpartÚpart_strippedÚ	att_linksrU   s                              @r   Úextract_detailrz   I   s<  ø€ à€DÜ˜“8ò 
ˆð	5Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJØ—6‘6ˆDÜ�4‹y˜4ÒÙÜÐ.¬s°4«y¨k¸ÀÈÁ	¸{È)ÐTÔUô 	�
‰
�1�ð
ñ ØÜ˜˜}Ó-€Dà€EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�I‰I�d‹OˆÙØ—J‘J T�JÓ*ˆEà€DØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔÜ�I‰IÐ.°°9±Ó>ˆÙØ—7‘7˜1“:ˆDà€GØ	�‰�5Ð!1ˆÓ	2€BÙØ�Y‰Y�u¤§¡¨KÓ!8ˆYÓ9ˆÚ	àˆÜ“5ˆØ—‘˜S t�Ó,ò 	DˆAØ�V‘9—?‘?Ó$ˆDÜ×Ñ Õ%Ø—‘ vÔ.Ü"¤4¨Ó.�DØ—u‘u˜W bÓ)×/Ñ/Ó1ÒW°Q·Z±ZÀd°ZÓ5KÒWÈx�Ø˜xÒ'Ø—L‘L Ô&Ø×&Ñ&°¸TÑ'BÕCð	Dð ˆØ—K‘KÒ 5À�KÓFó 	'ˆDà�y‰y˜GÒ#¨×(8Ñ(8¸Ô(AØà�y‰y˜CÒÜó >à!Ÿ]™]¨C¨5°t˜]Ó<ô>ó >�ñ ØÜ˜4“y—‘Ó(ˆHÙØà�y‰y˜CÒØ—9‘9˜WÔ%ØØŸ)™) C°5˜)Ó9�ÙÜ" 7›|×1Ñ1Ó3�HØ�y‰y˜EÒ! d×&6Ñ&6°uÔ&=ÀdÇiÁiÐQTÐV]ÐP^ÔF_ØØ�y‰y˜NÓ*Ø—‘˜XÖ&ð1	'ð2 —+‘+˜eÓ$×*Ñ*Ó,ˆàˆ
Ø—M‘M &Ó)ò 	1ˆDØ ŸJ™J›LˆMÙ ØÜ—6‘6˜* b¨-Ó8×>Ñ>Ô@ØØ JÒ.Ø×!Ñ! -Õ0ð	1ð —+‘+˜jÓ)×/Ñ/Ó1ˆÙØŸ	™	Ñ!lÐ`kÔ!lÓlˆIÙ6=�g Ñ&¨Ò2À9ˆGØ�$˜ÐÐøôe ò 	5ÜÐ(¨¨¨R°¨sÐ3×4Ò4ûð	5ús   “=Q'ÁQ'Ñ'	RÑ0RÒRc                  ó8  — dd l } | j                  «       }|j                  dt        d¬«       |j	                  «       }t        dt        |j                  t        «      «      }t        j                  t        d¬«      }|j                  d«       |j                  «       }|j                  d«       |j                  d	«       dx}x}}t        «       }	t        d|dz   «      D �]þ  }
t!        d
|
› d�«       t#        |
«      }|st!        d«        �nÔt!        dt%        |«      › d�«       |D �]³  }|d   |	v rŒ|	j'                  |d   «       |j                  d|d   f«       |j)                  «       r|dz  }ŒLt!        d|d   › d|d   d d › �«       t+        |d   «      \  }}}|s|d   }|s|d   }|r1t%        t-        j.                  dd|«      j1                  «       «      dk  r"t!        d|rt%        |«      nd› d�«       |dz  }ŒÛt-        j.                  dd|«      d d }t-        j.                  dd|«      j1                  «       }t-        j2                  d|«      rdnd}	 |j                  d||||d   |d   |t4        t6        t8        |df«      }|j:                  }|j                  d ||t4        |f«       |j=                  «        |dz  }tA        jB                  d!«       �Œ¶ �Œ tE        d"|› d#|› d$|› d%||z   |z   › �«       y # t        j>                  $ r |dz  }Y ŒSw xY w)&Nr   z--pagesr   )ÚtypeÚdefaulté   )r   zPRAGMA busy_timeout=10000a¬  CREATE TABLE IF NOT EXISTS gov_raw (id INTEGER PRIMARY KEY, site_name TEXT, source_url TEXT, page_url TEXT, title TEXT, publish_date TEXT, date_rank INTEGER DEFAULT 0, summary TEXT, status TEXT, category TEXT DEFAULT '', visits INTEGER DEFAULT 0, content TEXT DEFAULT '', tags TEXT DEFAULT '', industry TEXT DEFAULT 'other', attachments TEXT DEFAULT '', group_name TEXT, has_table INTEGER DEFAULT 0, script_name TEXT DEFAULT '')zgCREATE VIRTUAL TABLE IF NOT EXISTS gov_search USING fts5(title, site_name, summary, tokenize='trigram')u   --- ç¬¬u   é¡µ ---u   åˆ—è¡¨ä¸ºç©º, å�œæ­¢ç¿»é¡µu   æ‰¾åˆ°u   æ�¡r(   z'SELECT id FROM gov_raw WHERE page_url=?z  [r)   z] r#   é-   rW   r$   é
   u       æ­£æ–‡è¿‡çŸ­(u	   ), è·³è¿‡éÈ   z\s+ú z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)g333333Ó?u	   
æ–°å¢ž: u
     é‡�å¤�: u
     è¿‡çŸ­: u
     æ€»è®¡: )#ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚmaxÚminÚpagesÚ	MAX_PAGESÚsqlite3ÚconnectÚDBÚexecuteÚcursorr`   r\   r   rC   r]   rb   Úfetchonerz   r6   rh   r&   r8   ÚSITEÚSCRIPTÚGROUPÚ	lastrowidÚcommitÚIntegrityErrorr^   r_   r	   )rƒ   ÚapÚargsrŠ   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚseenr;   r?   r@   r#   r)   rK   ÚsummaryÚ	has_tableÚcurÚrids                       r   Úmainr¤   ©   s  € ÛØ	×	 Ñ	 Ó	"€BØ‡O�O�I¤C°€OÔ3Ø�=‰=‹?€DÜ�”3�t—z‘z¤9Ó-Ó.€Eä�?‰?œ2 rÔ*€DØ‡L�LÐ,Ô-Ø�‰‹€AØ‡I�Ið  }ô  ~Ø‡I�IÐwÔxà)*Ð*€IÐ*�	˜JÜ‹5€DÜ�A�u˜q‘yÓ!ó 'ˆÜˆg�b�T˜Ð!Ô"Ü˜2“ˆÙÜÐ,Ô-ÚÜˆf”S˜“Z�L Ð$Ô%Øó  	ˆDØ�E‰{˜dÑ"ØØ�H‰H�T˜%‘[Ô!Ø�I‰IÐ?À$ÀuÁ+ÀÔPØ�z‰zŒ|Ø˜Q‘�	ØÜ�#�d˜6‘l�^ 2 d¨7¡m°C°RÐ&8Ð%9Ð:Ô;Ü#1°$°u±+Ó#>Ñ ˆE�4˜ÙØ˜W™�ÙØ˜F‘|�Ùœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOÜÐ'¹¬¨G¬ÀQÐ'GÀyÐQÔRØ˜a‘�
ØÜ—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGÜŸY™Y y°'Ô:™ÀˆIð
Ø—i‘ið AØ˜G W¨d°5©k¸4À¹;ÈÌdÔTZÔ\aÐclÐnoÐpór�ð —m‘m�Ø—	‘	ÐfØ ¤t¨WÐ5ô7à—‘”Ø˜Q‘�	ô �J‰J�sŽOòA 	ð'ôP 
ˆJ�y�k ¨I¨;°jÀÀÈJÐW`ÐajÑWjÐkuÑWuÐVvÐ
wÕxøô ×)Ñ)ò Ø˜Q‘’	ðús   ÉA*K>Ë>LÌLÚ__main__)Ú__doc__r,   rŒ   r6   r
   r^   Úbs4r   Úurllib.parser   rŽ   r*   r+   r’   r”   r“   r‹   r7   ÚIra   r.   r   rC   rz   r¤   Ú__name__rZ   r   r   ú<module>r«      s�   ðñ÷ (× 'Ó 'Ý Ý  à€Ø€Ø€Ø%€Ø€Ø	€Ø€	ØˆB�J‰JÐKÈRÏTÉTÓR€	àÐoð€ò
,ò"òJ] ò@7yðt ˆzÒÙ…Fð r   