Ë
     Ÿ«jØ  ã                   ó–   — d Z ddlZddlZddlZddlmZ dZdZedz   ZddiZ	d	Z
d
ZdZdZ e«       Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uU  ä»™æ¡ƒå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ â€” å…¬ç¤ºå…¬å‘Šçˆ¬è™« (ä¿®å¤�ç‰ˆ v2)
ä¿®å¤�: 
1. æ—¥æœŸä»Ž span.date æ��å�–(åŽŸå�–ç¬¬ä¸€ä¸ªspan, å®žä¸ºlist_textæ ‡é¢˜â†’dateé”™ä½�+titleè¢«æ¸…ç©º)
2. title ä¼˜å…ˆ a[title] å±žæ€§, å…¶æ¬¡ list_text span
3. å†™ gov_search FTS (åŽŸå†™åºŸå¼ƒè¡¨ gov_search_v3 â†’ æ�œç´¢ä¸�åˆ°)
4. è¡¥ source_url/script_name/group_name
é    N)ÚBeautifulSoupz/root/search.dbzhttps://www.xiantao.gov.cnz>/bmxxgk/shbj/zfxxgk/fdzdgknr/qtzdgknr_37950/gsgg/index{}.shtmlz
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36Úxiantao_gsggu   æ¹–åŒ—zcrawl_xiantao.pyé   c                 óv  ‡— | s| S | D �cg c]  }t        |t        «      sŒ|‘Œ }}t        |«      t        | «      k7  r| S t        «       g }}| D ])  }||vsŒ|j	                  |«       |j                  |«       Œ+ |D �‡cg c]&  Št        ‰«      dk\  rt        ˆfd„|D «       «      s‰‘Œ( }}|r|S |S c c}w c c}w )u6  å‰”é™¤ã€Œå®¹å™¨æ®µã€�ï¼šfind_all(['p','div']) ä¼šå�Œæ—¶æ”¶ä¸‹å®¹å™¨ <div> ä¸Žå®ƒå†…éƒ¨çš„ <p>ï¼Œ
    å¯¼è‡´å�Œä¸€å†…å®¹é‡�å¤�ï¼ˆå®¹å™¨é‚£ä»½å¸¸è¿˜è¢« get_text(strip=True) æ‹�å¹³ï¼‰ã€‚
    åˆ¤æ�®ï¼šå…ˆæŒ‰å€¼åŽ»é‡�ï¼Œå†�å‰”é™¤è¢«å…¶å®ƒæ®µå®Œå…¨åŒ…å�«çš„æ®µã€‚ä¿�æŠ¤ï¼šå‰”é™¤å�Žä¸ºç©ºåˆ™è¿”å›žåŽ»é‡�ç»“æžœã€‚
    é(   c              3   ó:   •K  — | ]  }|‰uxr |xr |‰v –— Œ y ­w)N© )Ú.0ÚbÚas     €ú"/root/gov_crawler/crawl_xiantao.pyú	<genexpr>z(_drop_container_parts.<locals>.<genexpr>'   s&   øè ø€ Ò(SÈ¨°!¨Ò)D¸Ò)D¸aÀ1¸fÓ)DÑ(Sùs   ƒ)Ú
isinstanceÚstrÚlenÚsetÚaddÚappendÚany)ÚpartsÚpÚpsÚseenÚuniqr   Úkeeps        ` r   Ú_drop_container_partsr      sÅ   ø€ ñ
 ØˆØÖ	1�œj¨¬CÕ0Š!Ð	1€BÐ	1Ü
ˆ2ƒw”#�e“*ÒØˆÜ“˜ˆ$€DØò (ˆØ�DŠ=Ø�H‰H�QŒK˜Ÿ™ Q�ð(ð ÷ V�!Ü˜“F˜b’L¤SÓ(SÈdÔ(SÔ%Sò ð V€Dð Váˆ4Ð!˜TÐ!ùò 
2ùòVs   ŠB1 B1Á>+B6c                 óö  — 	 t        j                  | t        d¬«      }d|_        t        |j                  d«      }d}|j                  d«      }|r|j                  d¬	«      }d}|j                  d
«      D ]b  }d|j                  «       v sŒ|j                  d
«      }|sŒ*t        j                  d|j                  «       «      }|sŒQ|j                  d«      } n |j                  dd¬«      xs |j                  dd¬«      }	d}
|	rag }|	j                  g d¢«      D ]/  }t        |«      j!                  «       }|sŒ|j#                  |«       Œ1 dj%                  t'        |«      «      }
|||
fS # t        $ r Y yw xY w)Né   ©ÚheadersÚtimeoutúutf-8)NNNúhtml.parserÚ z
div.xl_titT©ÚstripÚtdu   å�‘æ–‡æ—¥æœŸz(\d{4}-\d{2}-\d{2})é   ÚdivÚview)Úclass_Ú
TRS_Editor)r   r)   Útableú
)ÚrequestsÚgetÚHEADERSÚencodingÚ	Exceptionr   ÚtextÚ
select_oneÚget_textÚfind_allÚfind_next_siblingÚreÚsearchÚgroupÚfindr   r&   r   Újoinr   )ÚurlÚrÚsoupÚtitleÚttÚdater'   ÚnxtÚmÚcontent_divÚcontentÚ_partsÚtagÚtxts                 r   Úextract_detailrK   +   sa  € ð Ü�L‰L˜¤g°rÔ:ˆØˆŒ
ô ˜Ÿ™ Ó/€Dà€EØ	�‰˜Ó	&€BÙ	Ø—‘ $�Ó'ˆà€DØ�m‰m˜DÓ!ò /ˆØ˜RŸ[™[›]Ò*Ø×&Ñ& tÓ,ˆCÚÜ—I‘IÐ4°c·l±l³nÓE�Ú˜QŸW™W Q›Z�d©ð/ð —)‘)˜E¨&�)Ó1ÒZ°T·Y±Y¸uÈ\°YÓ5Z€KØ€GÙØˆØ×'Ñ'Ò(=Ó>ò 	'ˆCÜ�c“(—.‘.Ó"ˆCÚ�F—M‘M #Õ&ð	'ð —)‘)Ô1°&Ó9Ó:ˆØ�$˜ÐÐøô3 ò  Ùð ús   ‚#E, Å,	E8Å7E8c                 ó(  — | dk(  rt         j                  d«      }nt         j                  d| › �«      }	 t        j                  |t        d¬«      }d|_        t        |j                  d«      }g }|j                  d	d
¬«      D �]x  }|d   }d|vsd|vrŒ|j                  d«      j                  d«      s |j                  d«      j                  d«      rŒS|j                  d«      s	t        |z   }|t        v rŒvt        j                  |«       |j                  d«      xs dj!                  «       }|s%|j#                  d«      }|r|j%                  d
¬«      }|s|j%                  d
¬«      }d}	|j#                  d«      }
|
r|
j%                  d
¬«      }	|
rD|
j%                  d
¬«      |v r0|j'                  |
j%                  d
¬«      d«      j!                  «       }|j)                  |j!                  «       ||	dœ«       �Œ{ |S # t        $ r g dfcY S w xY w)Nr(   r$   Ú_r   r   r"   r   r#   r   T)ÚhrefrN   z/shbj/z/gsgg/ú/z/gsggÚhttprA   zspan.list_textr%   z	span.date)rA   r>   rC   )ÚLIST_TPLÚformatr/   r0   r1   r2   r3   r   r4   r7   ÚrstripÚendswithÚ
startswithÚBASEÚ	seen_urlsr   r&   r5   r6   Úreplacer   )Úpgr>   r?   r@   Úitemsr   rN   rA   ÚltrC   Úsps              r   Ú
crawl_pager]   J   sâ  € Ø	ˆQ‚wÜ�o‰o˜bÓ!‰ä�o‰o  " ˜hÓ'ˆðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
ô ˜Ÿ™ Ó/€DØ€EØ�]‰]˜3 Tˆ]Ó*ó JˆØ�‰yˆØ˜4Ñ 8°4Ñ#7Øà�;‰;�sÓ×$Ñ$ WÔ-°·±¸SÓ1A×1JÑ1JÈ8Ô1TØØ�‰˜vÔ&Ü˜$‘;ˆDØ”9ÑØÜ�‰�dÔà—‘�w“Ò% 2×,Ñ,Ó.ˆÙØ—‘Ð.Ó/ˆBÙØŸ™¨$˜Ó/�ÙØ—J‘J T�JÓ*ˆEàˆØ�\‰\˜+Ó&ˆÙØ—;‘; T�;Ó*ˆDá�"—+‘+ D�+Ó)¨UÑ2Ø—M‘M "§+¡+°D +Ó"9¸2Ó>×DÑDÓFˆEØ�‰˜uŸ{™{›}°TÀ4ÑHÖIð9Jð: €LøôC ò Ø�1ˆuŠðús   µ#H ÈHÈHc                  óF  — 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        d|dz   «      D �]Ž  }	t        d
|	› d�«       t!        |	«      }
|
st        d«        �ndt        dt#        |
«      › d�«       |
D �]C  }|j                  d|d   f«       |j%                  «       r|dz  }Œ0t        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|«      j-                  «       }	 |j                  d||||d   |d   |t.        t0        t2        f	«      }|j4                  }|j                  d||t.        |f«       |j7                  «        |dz  }�ŒF �Œ‘ t        d|› d |› d!|› d"||z   |z   › �«       y # t        j8                  $ r	 |dz  }Y �Œƒw xY w)#Nr   z--pagesr(   )ÚtypeÚdefaulté<   )r!   zPRAGMA journal_mode=WALa¬  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   æ�¡z'SELECT id FROM gov_raw WHERE page_url=?r>   z  [rC   z] rA   é2   éÈ   u       æ­£æ–‡è¿‡çŸ­(u	   ), è·³è¿‡z<[^>]+>r$   z\s+ú z�INSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name) VALUES (?,?,?,?,?,?,?,?,?)zJINSERT INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)u	   
æ–°å¢ž: u
     é‡�å¤�: u
     è¿‡çŸ­: u
     æ€»è®¡: )ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚmaxÚminÚpagesÚ	MAX_PAGESÚsqlite3ÚconnectÚDBÚexecuteÚcursorÚrangeÚprintr]   r   ÚfetchonerK   r9   Úsubr&   ÚSITEÚSCRIPTÚGROUPÚ	lastrowidÚcommitÚIntegrityError)re   ÚapÚargsrl   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skiprY   rZ   ÚitemrA   rC   rG   ÚsummaryÚcurÚrids                     r   Úmainrˆ   u   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Ü�A�u˜q‘yÓ!ó ˆÜ�˜�t˜7Ð#Ô$Ü˜2“ˆÙÜÐ,Ô-ªuÜ�”s˜5“z�l #Ð&Ô'Øó 	ˆDØ�I‰IÐ?À$ÀuÁ+ÀÔPØ�z‰zŒ|Ø˜Q‘�	 Ü�C˜˜V™�~ R¨¨W©°c°rÐ(:Ð';Ð<Ô=Ü#1°$°u±+Ó#>Ñ ˆE�4˜Ù $ w¡-˜%Ù  V¡˜Ùœc '›l¨SÒ0ÜÐ)¹'¬#¨g¬,ÀqÐ)IÈÐSÔTØ˜a‘�
 Ü—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð
Ø—i‘ið gØ˜G W¨d°5©k¸4À¹;ÈÌdÔTZÔ\aÐbód�ð —m‘m�Ø—	‘	ÐfØ˜%¤ wÐ/ô1à—‘”Ø˜Q‘’	ò+	ðô< 
ˆJ�y�k ¨I¨;°jÀÀÈJÐW`ÐajÑWjÐkuÑWuÐVvÐ
wÕxøô ×)Ñ)ò Ø˜Q‘“	ðús   Ç8A(JÊJ ÊJ Ú__main__)Ú__doc__r/   rn   r9   Úbs4r   rp   rV   rQ   r1   rw   ry   rx   rm   r   rW   r   rK   r]   rˆ   Ú__name__r	   ó    r   ú<module>rŽ      s{   ðñ÷ Ó Ý à€Ø#€ØÐRÑR€ØÐvÐ
w€Ø€Ø€Ø	€à€	Ù‹E€	ò"ò& ò>)òV,yð\ ˆzÒÙ…Fð r�   