Ë
    5ß©jË+  ã                   óø   — d dl Z d dlZd dlZd dlZd dlZe j
                  j                  d d«       dZdZd dl	m
Z
 d dlZd dlmZ d dlZg d¢Zg d¢Zh d	£Zd
„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zedk(  r e«        yy)é    Nz/root/gov_crawleru   ä¸œä¹¡åŒº-çŽ¯å¢ƒä¿�æŠ¤zKhttps://www.jxfzdx.gov.cn/col/col21311/index.html?number=L00004L00004L00010)Úsync_playwright©ÚBeautifulSoup):u   çŽ¯[å¢ƒä¿�è¯„]u   çŽ¯ä¿�u   çŽ¯å¢ƒå½±å“�è¯„ä»·u   çŽ¯è¯„u   å®¡æ‰¹[å†³å…¬]u	   æ‹Ÿæ‰¹å‡†u	   æ‹Ÿå�—ç�†u   åœŸå£¤æ±¡æŸ“u   æ±¡æŸ“u   æ°´è´¨[çŠ¶æŠ¥]u   é¥®ç”¨æ°´æº�u   çŽ¯å¢ƒè´¨é‡�u   çŽ¯å¢ƒ[ç›‘æ£€]æµ‹u   æŽ’æ±¡[è®¸è¯�]u   åº”æ€¥é¢„æ¡ˆu   è¾�å°„å®‰[å…¨è£…]u   å™ªå£°u   åºŸæ°”u   åºŸæ°´u   åºŸ[æ°”å¼ƒ]u   å›º[ä½“åºŸ]u   å�±é™©åºŸç‰©u   å�±åºŸu   ç”Ÿæ€�[çŽ¯ä¿®ä¿�]u   ç»¿è‰²u   ä½Žç¢³u	   ç¢³ä¸­å’Œu   æž—[ä¸šåœ°æœ¨]u   æž—æœ¨é‡‡ä¼�u   æž—åœ°[å…¬ä½¿]u   å»ºè®¾[é¡¹å·¥]u   é¡¹ç›®[å…¬æ‹ŸçŽ¯]u	   æ–°èƒ½æº�u   å…‰ä¼�u   æ±¡æ°´[å¤„æ²»]u   åžƒåœ¾[å¤„åˆ†]u   æ•´æ²»u   å…¬ç¤ºu   å…¬å‘Šu   æŠ¥å‘Š[ä¹¦è¡¨]u   å¾�æ±‚æ„�è§�u   å…¬ä¼—å�‚ä¸Žu   å¤‡æ¡ˆ[é€šç¡®]u   æ‰¹å¤�u	   å†³å®šä¹¦u   æœ‰é™�å…¬å�¸u   è´£ä»»å…¬å�¸u	   å�ˆä½œç¤¾u	   ç”Ÿäº§çº¿u   æŠ€æ”¹u   æ‰©å»ºu   æ–°å»ºu   å¹´äº§u	   å¹´å‡ºæ �u   å…»æ®–u   å…»çŒªu   è°ƒæŸ¥[æŠ¥è¯„]u   é£Žé™©è¯„ä¼°)u3   ^.{0,8}(å±€|ä¸­å¿ƒ|å§”|åŠž|ä¼š|é•‡|ä¹¡|åœº|è¡—é�“)$u   å…¬å¼€æŒ‡å�—$u   å…¬å¼€å¹´æŠ¥u   å…¬å¼€åˆ¶åº¦u   æ”¿åºœä¿¡æ�¯å…¬å¼€u   æ”¿åºœç½‘ç«™å·¥ä½œu   ç½‘ç«™å¹´åº¦u   å¹´åº¦å·¥ä½œæŠ¥è¡¨u   ä¿¡æ�¯å…¬[å¼€]u   ä¸»åŠ¨å…¬å¼€u   ä¸œä¹¡åŒºäººæ°‘æ”¿åºœç½‘ç«™u!   ä¸œä¹¡åŒºäººæ°‘æ”¿åºœä¿¡æ�¯å…¬å¼€u   æ”¿ç­–è§£è¯»u   æ”¿ç­–æ–‡ä»¶è§£è¯»u   è§£è¯»å·¥ä½œ>)   ÚpÚddÚdlÚdtÚh1Úh2Úh3Úh4Úh5Úh6ÚhrÚliÚolÚtdÚthÚtrÚulÚdivÚnavÚpreÚformÚmainÚasideÚtableÚtbodyÚtfootÚtheadÚcenterÚdialogÚfigureÚfooterÚheaderÚhgroupÚaddressÚarticleÚcaptionÚdetailsÚsectionÚfieldsetÚ
blockquoteÚ
figcaptionc                 óÒ   ‡‡‡— | €yddl }ddlmŠ g Šˆˆˆfd„Š ‰| «       dj                  ‰«      }|j	                  dd|«      }|j	                  dd	|«      }|j                  «       S )
ul   å�—çº§è¾¹ç•Œå‡ºæ�¢è¡Œã€�è¡Œå†…èŠ‚ç‚¹ç›´æŽ¥æ‹¼æŽ¥ã€�<br> å‡ºæ�¢è¡Œï¼ˆâ‰ˆ æµ�è§ˆå™¨çœ‹åˆ°çš„æ�¢è¡Œç»“æž„ï¼‰ã€‚NÚ r   )ÚNavigableStringc                 óF  •— | j                   D ]‘  }t        |‰«      r‰j                  t        |«      «       Œ*t	        |dd «      dk(  r‰j                  d«       ŒLt	        |dd «      t
        v r+‰j                  d«        ‰|«       ‰j                  d«       ŒŠ ‰|«       Œ“ y )NÚnameÚbrú
)ÚchildrenÚ
isinstanceÚappendÚstrÚgetattrÚ_BLOCK_TAGS)ÚnodeÚchr1   ÚoutÚwalks     €€€úcrawl_dongxiang.pyr?   zbody_text.<locals>.walkD   s„   ø€ Ø—-‘-ò 
	ˆBÜ˜"˜oÔ.Ø—
‘
œ3˜r›7Õ#Ü˜˜V TÓ*¨dÒ2Ø—
‘
˜4Õ Ü˜˜V TÓ*¬kÑ9Ø—
‘
˜4Ô Ù�R”Ø—
‘
˜4Õ á�R•ñ
	ó    z[ \t\r\f\v]*\n[ \t\r\f\v]*r5   z\n{3,}ú

)ÚreÚbs4r1   ÚjoinÚsubÚstrip)ÚelÚ_reÚtr1   r>   r?   s      @@@r@   Ú	body_textrK   <   sb   ú€ à	€zØÛÝ#Ø
€Cöñ 	ˆ„HØ
�‰�‹€AØ�‰Ð-¨t°QÓ7€AØ�‰�	˜6 1Ó%€AØ�7‰7‹9ÐrA   c                 óö   — | rt        | «      dk  ryt        D ]  }t        j                  || «      sŒ y | j	                  dd«      j	                  dd«      }t
        D ]  }t        j                  ||«      sŒ y y)Né   Fú r0   u   â€‹T)ÚlenÚSKIP_TITLESrC   ÚsearchÚreplaceÚENV_PATTERNS)Útitler   Útitle_cleanÚpats       r@   Úis_environmentalrW   W   so   € Ù”C˜“J ’N¨5Üò -ˆÜ�9‰9�Q˜Õ¡uð-à—-‘-  RÓ(×0Ñ0°¸2Ó>€KÜò 4ˆÜ�9‰9�S˜+Õ&©tð4àrA   c           
      óÀ  — g }t        «       }t        «       5 }|j                  j                  d¬«      }|j	                  ddddœ¬«      }|j                  «       }|j                  t        dd	¬
«       t        j                  d«       t        d| dz   «      D �]  }t        d|› d�«       |j                  d«      }|D �	cg c]  }	t        |	d   «      sŒ|	‘Œ }
}	t        dt        |«      › dt        |
«      › �«       |
D ]C  }|d   |vsŒ|j                  |d   «       |j!                  |«       t        d|d   d d › �«       ŒE || k  sŒ³|dz   }|j                  d|› d|› d�«      }t        d|› �«       t        j                  d«       |j#                  dd	¬«       t        j                  d«       �Œ |j%                  «        d d d «       |S c c}	w # 1 sw Y   |S xY w)NT)ÚheadlessúMozilla/5.0i€  i8  )ÚwidthÚheight)Ú
user_agentÚviewportÚdomcontentloadedi0u  )Ú
wait_untilÚtimeouté   é   z

=== Page z ===a  
                () => {
                    const results = [];
                    const seen = new Set();
                    document.querySelectorAll('a[href*="art_"]').forEach(a => {
                        const text = a.textContent.trim();
                        if (!text || text.length < 5) return;
                        if (seen.has(a.href)) return;
                        seen.add(a.href);
                        const li = a.closest('li');
                        let date = '';
                        if (li) { const b = li.querySelector('b'); if (b) date = b.textContent.trim(); }
                        results.push({title: text, href: a.href, date: date});
                    });
                    return results;
                }
            rT   z	  Total: z, Environmental: Úhrefz    + é2   z�
                    () => {
                        if (typeof funGoPage === 'function') {
                            funGoPage('/module/xxgk/search.jsp', zA);
                            return 'called funGoPage page=' + zx;
                        }
                        return 'funGoPage not found';
                    }
                z  Navigate: é   ©ra   é   )Úsetr   ÚchromiumÚlaunchÚnew_contextÚnew_pageÚgotoÚLIST_URLÚtimeÚsleepÚrangeÚprintÚevaluaterW   rO   Úaddr8   Úwait_for_load_stateÚclose)Úpages_limitÚ	all_itemsÚ	seen_urlsr   ÚbrowserÚcontextÚpageÚpgÚ	all_linksÚitÚ	env_itemsÚitemÚnpÚresults                 r@   Úscraper…   `   s  € Ø€IÜ“€Iä	Ó	ð 8˜aØ—*‘*×#Ñ#¨TÐ#Ó2ˆØ×%Ñ%Ø$Ø#¨tÑ4ð &ó 
ˆð ×ÑÓ!ˆØ�	‰	”(Ð'9À5ˆ	ÔIÜ�
‰
�1Œä˜˜;¨™?Ó+ó ,	ˆBÜ�K ˜t 4Ð(Ô)àŸ™ð 'ó ˆIð$ '0ÖQ Ô3CÀBÀwÁKÕ3PšÐQˆIÐQÜ�Iœc )›nÐ-Ð->¼sÀ9»~Ð>NÐOÔPà!ò 9�Ø˜‘< yÒ0Ø—M‘M $ v¡,Ô/Ø×$Ñ$ TÔ*Ü˜F 4¨¡=°°"Ð#5Ð"6Ð7Õ8ð	9ð �KÓØ˜!‘V�ØŸ™ð ,Bð CEÀð F?Ø?A¸dð Cð	(ó �ô ˜ V HÐ-Ô.Ü—
‘
˜1”Ø×(Ñ(Ð);ÀUÐ(ÔKÜ—
‘
˜1–ðY,	ð\ 	�‰Œ÷q8ðt Ðùò7 R÷?8ðt Ðús2   —B'GÂ>GÃGÃ1GÄA GÅ	A;GÇGÇGc                 óR  — 	 t        j                  | dddi¬«      }d|_        t        |j                  d«      }d}|j                  d	«      }|r)|j                  d
¬«      }t        j                  dd|«      }|j                  dd¬«      }|s5|j                  dt        j                  dt        j                  «      ¬«      }|s|dfS g }|j                  D ]Œ  }|j                  dk(  r(|j                  dd
¬«      }|sŒ(|j                  |«       Œ:|j                  dk(  r)t        t        |«      «      }	|	sŒ`|j                  |	«       Œr|j                  dv sŒ�t!        ||«       ŒŽ |st#        |«      }|r|g}dj%                  |«      }
t        j                  dd|
«      }
||
fS #  Y yxY w)Né   z
User-AgentrZ   )ra   Úheaderszutf-8)r0   r0   úhtml.parserr0   rT   T©rG   u   ^[^-â€”]*?(?:â€”â€”|-)\s*r   Úzoom)Úidz#content|article|nrzw|zoom|main-word)Úclass_r   rN   r   ©r   r+   r(   rB   z3(?<=[\u4e00-\u9fff])[ \t\u3000]+(?=[\u4e00-\u9fff]))ÚrequestsÚgetÚencodingr   ÚtextÚfindÚget_textrC   rF   ÚcompileÚIr6   r3   r8   Úhtml_table_to_htmlr9   Ú_extract_nodesrK   rE   )ÚurlÚrÚsoupÚ
page_titlerJ   r‹   ÚpartsÚchildr’   ÚmdÚbodys              r@   Ú
get_detailr¡       s‡  € ðÜ�L‰L˜ b°<ÀÐ2OÔPˆØˆŒ
ô ˜Ÿ™ Ó/€DØ€JØ�	‰	�'Ó€AÙØ—Z‘Z d�ZÓ+ˆ
Ü—V‘VÐ8¸"¸jÓIˆ
Ø�9‰9�U˜vˆ9Ó&€DÙØ�y‰y˜¤r§z¡zÐ2XÔZ\×Z^ÑZ^Ó'_ˆyÓ`ˆÙØ˜2ˆ~ÐØ€EØ—‘ò )ˆØ�:‰:˜ÒØ—>‘> #¨T�>Ó2ˆDÚ�U—\‘\ $Õ'Ø�Z‰Z˜7Ò"Ü#¤C¨£JÓ/ˆBÚ�5—<‘< Õ#Ø�Z‰ZÐ8Ò8Ü˜5 %Õ(ð)ñ Ü˜‹ˆÙ˜$˜�Ø�;‰;�uÓ€DÜ�6‰6ÐHÈ"ÈdÓS€DØ�tÐÐøð9Ùús   ‚!F" Æ"F&c                 ó:  — | j                   D ]Œ  }|j                  dk(  r(|j                  dd¬«      }|sŒ(|j                  |«       Œ:|j                  dk(  r)t	        t        |«      «      }|sŒ`|j                  |«       Œr|j                  dv sŒ�t        ||«       ŒŽ y )Nr   rN   TrŠ   r   rŽ   )r6   r3   r”   r8   r—   r9   r˜   )r<   r�   rž   r’   rŸ   s        r@   r˜   r˜   Â   s€   € Ø—‘ò )ˆØ�:‰:˜ÒØ—>‘> #¨T�>Ó2ˆDÚ�U—\‘\ $Õ'Ø�Z‰Z˜7Ò"Ü#¤C¨£JÓ/ˆBÚ�5—<‘< Õ#Ø�Z‰ZÐ8Ò8Ü˜5 %Õ(ñ)rA   c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   r‰   Úard   r0   )ÚhttpÚ
javascriptú#ÚimgÚsrc)r¥   z//zdata:)	rD   r   r9   Úfind_allr�   Ú
startswithÚurllibÚparseÚurljoin)r   Úbase_urlr   Útblr¤   rd   r¨   r©   s           r@   r—   r—   Í   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€OrA   c                 óú  — t        j                  dd¬«      }| D ]’  }	 |j                  d|d   f«       |j                  d|d   f«       |j                  d|d   |d	   |d   |d
   dd |j                  dd«      |j                  dd«      xs ddd |j                  dd«      ddddf«       Œ” |j                  «        |j                  «        y# t        $ r!}t        d|d
   dd › d|› �«       Y d}~ŒÛd}~ww xY w)z>Insert into DB, replacing any existing rows with same page_urlú/root/search.dbé<   rg   zODELETE FROM gov_search WHERE rowid IN (SELECT id FROM gov_raw WHERE page_url=?)r™   z$DELETE FROM gov_raw WHERE page_url=?z INSERT INTO gov_raw (site_name, source_url, page_url, title, publish_date, summary, content, status, category, tags, attachments) VALUES (?,?,?,?,?,?,?,?,?,?,?)Ú	site_nameÚ
source_urlrT   Néô  Úpub_dater0   ÚsummaryÚcontentÚactivez  ERROR on r‡   z: )Úsqlite3ÚconnectÚexecuter�   Ú	Exceptionrs   Úcommitrw   )ÚitemsÚdbr‚   Úes       r@   Ú
push_to_dbrÃ   Ü   s  € ä	�‰Ð*°BÔ	7€Bàò ;ˆð	;à�J‰JÐhÐkoÐpuÑkvÐjxÔyØ�J‰JÐ=ÀÀUÁ¸~ÔNð �J‰Jð sØ�kÑ" D¨Ñ$6¸¸U¹Ø�g‘˜t Ð$ d§h¡h¨z¸"Ó&=ÀÇÁÈÐSUÓ@VÒ@\ÐZ\Ð^bÐ_bÐ?cØ—‘˜) BÓ'¨°2°r¸2ð?õð;ð  ‡I�I„KØ‡H�H…Jøô	 ò 	;Ü�K  W¡¨c¨rÐ 2Ð3°2°a°SÐ9×:Ñ:ûð	;ús   žBCÃ	C:ÃC5Ã5C:c                  ó  — dd l } | j                  «       }|j                  dt        d¬«       |j	                  «       }t        dt        › d|j                  › d�«       t        |j                  «      }|st        d«       y t        d	t        › d
t        |«      › d�«       g }dx}}t        |«      D ]¢  \  }}|d   }	|d   }
|j                  dd«      }t        d|dz   › d|
d d › d�dd¬«       t        |	«      \  }}|st        d«       |dz  }nt        dt        |«      › d�«       |dz  }|j                  t        |	|	|xs |
||r|d d nd|dœ«       Œ¤ t        |«       t        j                   dd¬«      }|j#                  d t        f«      j%                  «       d   }|j#                  d!t        f«      j%                  «       d   }|j'                  «        t        d	t        › d"t        |«      › d#|› d$|› �«       t        d%|› d&|› �«       y )'Nr   z--pagesrb   )ÚtypeÚdefaultú[u   ] å¼€å§‹ï¼ˆæœ€å¤šu   é¡µï¼‰u     âš ï¸� æ— ç»“æžœz
[u
   ] æ€»è®¡: u    æ�¡rd   rT   Údater0   z  [rc   z] é(   z...rN   T)ÚendÚflushu
   âš ï¸� ç©ºu   âœ… u   å­—r¶   )r´   rµ   r™   rT   r·   r¸   r¹   r²   r³   rg   z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?u
   ] å®Œæˆ�: u   æ�¡, æ­£æ–‡æˆ�åŠŸu   , ç©ºz
  DB: raw=z	, search=)ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsrs   Ú	SITE_NAMEÚpagesr…   rO   Ú	enumerater�   r¡   r8   rÃ   r»   r¼   r½   Úfetchonerw   )rÌ   ÚparserÚargsrÀ   Údb_itemsÚsuccessÚfailedÚir‚   r™   rT   Údate_strrœ   r    ÚvdbÚcntÚcnt2s                    r@   r   r   ó   s  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜	¬°QÐÔ7Ø×ÑÓ€DÜ	ˆAŒiˆ[Ð)¨$¯*©*¨°VÐ
<Ô=Ü�4—:‘:Ó€EÙÜÐ"Ô#ØÜ	ˆC”	ˆ{˜*¤S¨£Z L°Ð
5Ô6Ø€HØÐ€GˆfÜ˜UÓ#ò ‰ˆˆ4Ø�6‰lˆØ�W‘ˆØ—8‘8˜F BÓ'ˆÜ��A�a‘C�5˜˜5  "˜:˜, cÐ*°¸4Õ@Ü% c›?Ñˆ
�DÙÜ�,ÔØ�a‰K‰Fä�Dœ˜T›˜ 3Ð'Ô(Ø�q‰LˆGØ�‰Ü"°#¸cØÒ( 5°hÙ%)�t˜D˜S‘z¨r¸dñ
õ 	ðô& ˆxÔô �/‰/Ð+°RÔ
8€CØ
�+‰+ÐFÌÈÓ
U×
^Ñ
^Ó
`ÐabÑ
c€CØ�;‰;ÐJÌYÈLÓY×bÑbÓdÐefÑg€DØ‡I�I„KÜ	ˆC”	ˆ{˜*¤S¨£] OÐ3DÀWÀIÈUÐSYÐRZÐ
[Ô\Ü	ˆJ�s�e˜9 T FÐ
+Õ,rA   Ú__main__)r0   )ÚsysÚosrC   rp   r»   ÚpathÚinsertrÑ   ro   Úplaywright.sync_apir   r�   rD   r   Úurllib.parser¬   rS   rP   r;   rK   rW   r…   r¡   r˜   r—   rÃ   r   Ú__name__© rA   r@   ú<module>rè      s‹   ðç !× !Ó !Ø ‡�‡��Ð&Ô 'à$€	ØX€å /Û Ý Û ò€ò0
€ò *€òò6ò>ò@ òD	)óòò.(-ðT ˆzÒÙ…Fð rA   