Ë
    ¸¬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edz   ZdZd	Zd
ZdZdedz   dœZd„ Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uÝ  å±±ä¸œè�”ç›ŸåŒ–å·¥é›†å›¢ â€” æ–°é—»ä¸­å¿ƒçˆ¬è™«
URL: http://www.leaguechem.com/news/
CMS: å®šåˆ¶PHPç«™(è‡ªç ”æ¨¡æ�¿, nginx)
åˆ—è¡¨: ul.bbnxwfl > li > a[title], 6æ�¡/é¡µ, å…±79é¡µ473æ�¡
åˆ†é¡µ: /news/p{N}.html (ç¬¬1é¡µ=/news/)
è¯¦æƒ…: /news/{ID}.html
  æ ‡é¢˜: h1.xypg-detail-title
  æ—¥æœŸ: div.detail-info-time (2026-02-10 10:13:28)
  æ­£æ–‡: div.xypg-detail-con (å†…è�”æ ·å¼�p/span, ä¿�ç•™HTML)
è¿‡æ»¤: ç”µå­�æŠ¥å¤–é“¾ book.yunzhan365.com è·³è¿‡, å�ªæŠ“ç«™å†… /news/\d+.html
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbzhttp://www.leaguechem.comz/newsu   è�”ç›ŸåŒ–å·¥-æ–°é—»ä¸­å¿ƒu   ä¼�ä¸šzcrawl_leaguechem.pyéO   z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36ú/)z
User-AgentÚRefererc                 ó<   — t        | t        j                  d¬«       y )NT)ÚfileÚflush)ÚprintÚsysÚstderr)Úmsgs    ú%/root/gov_crawler/crawl_leaguechem.pyÚlogr      s   € Ü	ˆ#”C—J‘J dÖ+ó    c                 ó  — t        |«      D ]3  }	 t        j                  | t        d¬«      }d|_        |j
                  c S  y
# t        $ r9}t        d| › d|dz   › d|› d|› �«       t        j                  d	«       Y d }~Œtd }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8z	  [WARN] u    è¯·æ±‚å¤±è´¥(é   r   z): é   Ú )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	Exceptionr   ÚtimeÚsleep)ÚurlÚretriesÚattemptÚrÚes        r   Úfetchr'   #   s…   € Ü˜“>ò ˆð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJØ—6‘6ŠMð	ð øô ò 	Ü�)˜C˜5 ¨w°q©y¨k¸¸7¸)À3ÀqÀcÐJÔKÜ�J‰J�q�M‰Mûð	ús   �.AÁ	BÁ/B Â Bc                 óš  — | dk  r
t         dz   }nt         › d| › d�}t        |«      }|sg S t        |d«      }|j                  dd¬«      }|sg S g }|j	                  d	«      D �]f  }|j                  d
d¬«      }|sŒ|d   }|j                  d«      st        t        |«      }t        j                  d|«      sŒW|j                  dd«      xs |j                  d¬«      }	t        j                  dd|	«      j                  «       }	d}
|j                  dd¬«      }|r™|j                  d«      }|j                  d«      }|ru|rs|j                  d¬«      }|j                  d¬«      j                  d«      }t        j                  d|«      }|r(|j!                  d«      › d|j!                  d«      › d|› �}
|j#                  |	||
dœ«       �Œi |S )u@   æŠ“åˆ—è¡¨é¡µ, è¿”å›ž [{title, url, date}]; è¿‡æ»¤ç”µå­�æŠ¥å¤–é“¾r   r   z/pz.htmlúhtml.parserÚulÚbbnxwfl©Úclass_ÚliÚaT©Úhrefr1   Úhttpz/news/\d+\.html$Útitler   ©Ústripu#   ^(?:&middot;|Â·|&nbsp;|\s|&#8226;)+ÚdivÚxwsjÚh3Úh2r   z(\d{4})-(\d{2})ú-)r3   r"   Údate)ÚLIST_DIRr'   r   ÚfindÚfind_allÚ
startswithr   ÚBASEÚreÚsearchr   Úget_textÚsubr5   ÚzfillÚmatchÚgroupÚappend)Úpgr"   ÚhtmlÚsoupr*   Úitemsr.   r/   r1   r3   r;   Úxsjr8   r9   ÚymÚdÚms                    r   Ú
crawl_listrQ   /   s¹  € à	ˆQ‚wÜ˜‰n‰ä�
˜"˜R˜D Ð&ˆÜ�‹:€DÙØˆ	Ü˜˜}Ó-€DØ	�‰�4 	ˆÓ	*€BÙØˆ	Ø€EØ�k‰k˜$Óó BˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆØ�‰˜vÔ&Üœ4 Ó&ˆDä�y‰yÐ,¨dÔ3ØØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆä—‘Ð=¸rÀ5ÓI×OÑOÓQˆàˆØ�g‰g�e FˆgÓ+ˆÙØ—‘˜$“ˆBØ—‘˜$“ˆBÙ‘bØ—[‘[ t�[Ó,�Ø—K‘K d�KÓ+×1Ñ1°!Ó4�Ü—H‘HÐ/°Ó4�ÙØŸg™g a›j˜\¨¨1¯7©7°1«:¨,°a¸°sÐ;�DØ�‰˜u¨T¸4Ñ@ÖAð3Bð4 €Lr   c                 ó4  ‡‡— t        | «      }|syt        |d«      }d}|j                  dd¬«      }|r|j                  d¬«      }d}|j                  d	d
¬«      }|r7t	        j
                  d|j                  «       «      }|r|j                  d«      }d}|j                  d	d¬«      }	|	�rég }
t        «       Š|	j                  dd¬«      D ]Ž  }|d   }t	        j
                  d|t        j                  «      sŒ.|j                  d«      st        t        |«      }|j                  d¬«      xs d}|‰vsŒj‰j                  |«       |
j                  ||dœ«       Œ� g }|	j                  g d¢d¬«      D �]S  }|j                  dk7  r|j!                  d«      rŒ%|j                  d	k(  r|j#                  d«      dv rŒH|j!                  d	d¬«      rŒ\|j                  dk(  r+d„ Št%        ˆˆfd„|j                  dg«      D «       «      }|rŒ–t'        |«      j)                  «       }|sŒ²|j                  dk(  r,|j                  d«      }|rt'        |«      j)                  «       }|j                  d	k(  r7|j!                  d	«      r&|j                  ddg«      s|j                  |«       �Œ3|j                  dv s�ŒC|j                  |«       �ŒV d j+                  |«      j)                  «       }g }|j-                  d «      D ]Q  }|j)                  «       }|sŒt	        j.                  d!d|«      j)                  «       sŒ<||vsŒA|j                  |«       ŒS d j+                  |«      j)                  «       }|
r$d"j+                  d#„ |
D «       «      }|r|d z   |z   n|}|||fS )$u   è¿”å›ž (title, date, content))NNNr)   r   Úh1zxypg-detail-titler,   Tr4   r6   zdetail-info-timez(20\d{2}-\d{2}-\d{2})r   zxypg-detail-conr/   r0   r1   z*\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|txt)$r2   u   é™„ä»¶)Únamer"   )Úpr6   Útable)Ú	recursiverV   Úid)ÚxgwdPÚqrcoderY   )rX   rU   c                 ó’   — d}| j                   dk(  r| j                  dd«      }|r!|j                  d«      st        t        |«      }|S )Nr   r/   r1   r2   )rT   r   r?   r   r@   )ÚelÚus     r   Ú_att_urlz extract_detail.<locals>._att_url‰   sA   € Ø�AØ—w‘w #’~ØŸF™F 6¨2Ó.˜Ù §¡¨fÔ!5Ü#¤D¨!Ó,˜Ø�Hr   c              3   óB   •K  — | ]  } ‰|«      r ‰|«      ‰v –— Œ y ­w)N© )Ú.0r\   r^   Úseen_atts     €€r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>�   s*   øè ø€ ò Dà±h¸r´lñ ˜R“L HÔ,ñDùs   ƒ)rU   rV   z

ú<[^>]+>ú
c              3   ó:   K  — | ]  }d |d   › d|d   › d�–— Œ y­w)z<p><a href="r"   z">rT   z</a></p>Nr`   )ra   Úatts     r   rc   z!extract_detail.<locals>.<genexpr>¯   s(   è ø€ Ò!lÐY\ L°°U±°¸B¸sÀ6¹{¸mÈ8Ô"TÑ!lùs   ‚)r'   r   r=   rC   rA   rB   rG   Úsetr>   ÚIr?   r   r@   ÚaddrH   rT   Úfind_parentr   ÚanyÚstrr5   ÚjoinÚsplitrD   )r"   rJ   rK   r3   rS   r;   ÚdtrP   ÚcontentÚdcÚattachmentsr/   r1   rT   ÚpartsÚnodeÚhas_attÚhtml_strÚinner_pÚ
uniq_partsÚpartÚpart_strippedÚ	att_linksr^   rb   s                          @@r   Úextract_detailr}   Z   sV  ù€ ä�‹:€DÙØÜ˜˜}Ó-€Dà€EØ	�‰�4Ð 3ˆÓ	4€BÙ	Ø—‘ $�Ó'ˆà€DØ	�‰�5Ð!3ˆÓ	4€BÙ	Ü�I‰IÐ.°·±³Ó>ˆÙØ—7‘7˜1“:ˆDà€GØ	�‰�5Ð!2ˆÓ	3€BÚ	àˆÜ“5ˆØ—‘˜S t�Ó,ò 	DˆAØ�V‘9ˆDÜ�y‰yÐFÈÌbÏdÉdÕSØ—‘ vÔ.Ü"¤4¨Ó.�DØ—z‘z¨�zÓ-Ò9°�Ø˜xÒ'Ø—L‘L Ô&Ø×&Ñ&°¸TÑ'BÕCð	Dð ˆà—K‘KÒ 5À�KÓFó !	'ˆDà�y‰y˜GÒ#¨×(8Ñ(8¸Ô(AØØ�y‰y˜EÒ! d§h¡h¨t£nÐ8KÑ&KØØ×Ñ ¨'ÐÔ2Øà�y‰y˜CÒòô ô Dà"Ÿm™m¨S¨EÓ2ôDó D�ñ ØÜ˜4“y—‘Ó(ˆHÙØà�y‰y˜CÒØŸ)™) C›.�ÙÜ" 7›|×1Ñ1Ó3�HØ�y‰y˜EÒ! d×&6Ñ&6°uÔ&=ÀdÇiÁiÐQTÐV]ÐP^ÔF_Ø—‘˜XÖ&Ø—‘˜nÓ,Ø—‘˜XÖ&ðC!	'ðD —+‘+˜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Ø�$˜ÐÐr   c                  óò  — 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   }|rt%        |«      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] r3   é-   é2   u       æ­£æ–‡è¿‡çŸ­(u	   ), è·³è¿‡rd   r   éÈ   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 (?,?,?,?)g      à?u	   
æ–°å¢ž: u
     é‡�å¤�: u
     è¿‡çŸ­: u
     æ€»è®¡: )#ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚmaxÚminÚpagesÚ	MAX_PAGESÚsqlite3ÚconnectÚDBÚexecuteÚcursorrh   r   r   rQ   Úlenrj   Úfetchoner}   rA   rD   r5   rB   ÚSITEÚSCRIPTÚGROUPÚ	lastrowidÚcommitÚIntegrityErrorr    r!   r   )r†   ÚapÚargsr�   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚseenrI   rL   Úitemr3   r;   rq   Ú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 '›l¨RÒ/ÜÐ'¹¬¨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   È8A*KËK6Ë5K6Ú__main__)é   )Ú__doc__r   r�   rA   r   r    Úbs4r   Úurllib.parser   r‘   r@   r<   r–   r˜   r—   rŽ   r   r   r'   rQ   r}   r©   Ú__name__r`   r   r   ú<module>r°      s…   ðñ
÷ (× 'Ó 'Ý Ý  à€Ø"€Ø�'‰>€Ø"€Ø€Ø	€Ø€	àoØ˜#‰~ñ€ò,ó	ò(òVW òt7yðt ˆzÒÙ…Fð r   