Ë
    ¸¬ujt  ã                   óp  — 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ZdZdZej                  j!                  dd	«      Zd
diZd„ Zd„ Zd„ Zdd„Zedk(  rÈ eej2                  «      dkD  rej2                  d   ndZedk(  r” e«       5 Zej8                  j;                  ddg¬«      Zej?                  ed
   ¬«      Z e jC                  «       Z"e"jG                  ddd¬«       e"jI                  d«      Z% e&de%› �«       ejO                  «        ddd«       y ee«       yy# 1 sw Y   yxY w)uJ   ä»ªå¾�å¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Š çˆ¬è™« (ç¿°Web, Playwrightæ¸²æŸ“åˆ—è¡¨)é    N)ÚBeautifulSoup)Úsync_playwrightu"   ä»ªå¾�å¸‚äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šzhttps://www.yizheng.gov.cnz/xxfb/gsgg/index.htmlÚDB_PATHz/root/search.dbú
User-AgentúoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c            	      ó  — g } t        «       }d}t        «       5 }|j                  j                  ddg¬«      }|j	                  d¬«      }|j                  «       }	 |j                  t        t        z   dd¬	«       |j                  d
«      }|dk  rd}t        d|› d�«       t        d|dz   «      D ]Þ  }|dkD  r"t        d|› d�z   }		 |j                  |	dd¬	«       |j                  d«      }
|
st        d|› d�«        n“d}|
D ]W  }|d   }|j                  d«      s	t        |z   }||vsŒ'|j                  |«       | j                  |d   ||d   dœ«       |dz  }ŒY t        d|› d|› d�«       |dz  dk(  sŒÇt        d t        | «      › d!�«       Œà |j#                  «        	 d#d#d#«       | S #  |j                  |	dd¬	«       Y ŒêxY w# t         $ r}t        d"|› �«       Y d#}~ŒRd#}~ww xY w# |j#                  «        w xY w# 1 sw Y   | S xY w)$u0   ç”¨ Playwright é€�é¡µæ¸²æŸ“å¹¶æ��å�–åˆ—è¡¨æ•°æ�®é   Tú--no-sandbox©ÚheadlessÚargsr   ©Ú
user_agentÚnetworkidleé0u  ©Ú
wait_untilÚtimeoutaº  () => {
                let max = 1;
                document.querySelectorAll('.page-content a, .pagination a, .bt-pagination a').forEach(a => {
                    if (a.getAttribute('href') && a.getAttribute('href').includes('index_')) {
                        const n = parseInt(a.textContent);
                        if (!isNaN(n) && n > max) max = n;
                    }
                });
                return max;
            }é   é±   u	   ðŸ“‹ å…± u    é¡µz/xxfb/gsgg/index_z.htmli˜:  Úloada°  () => {
                    const result = [];
                    document.querySelectorAll('.bt-list-new').forEach(li => {
                        const a = li.querySelector('a');
                        const span = li.querySelector('.bt-list-time');
                        if (a) {
                            result.push({
                                title: (a.getAttribute('title') || a.textContent).trim(),
                                url: a.getAttribute('href'),
                                date: span ? span.textContent.trim() : ''
                            });
                        }
                    });
                    return result;
                }u     âš ï¸� ç¬¬u   é¡µæ— æ•°æ�®r   ÚurlÚhttpÚtitleÚdate©r   r   r   u
     ðŸ“„ ç¬¬u   é¡µ: u   æ�¡æ–°é2   u       å·²æ”¶é›† u    æ�¡...u     âš ï¸� Playwrighté”™è¯¯: N)Úsetr   ÚchromiumÚlaunchÚnew_contextÚnew_pageÚgotoÚBASEÚLISTÚevaluateÚprintÚrangeÚ
startswithÚaddÚappendÚlenÚ	ExceptionÚclose)Ú	all_itemsÚ	seen_urlsÚ	PAGE_SIZEÚpÚbrowserÚctxÚpageÚtotal_pagesÚpgÚpg_urlÚitemsÚ	new_countÚitemr   Úes                  ú"/root/gov_crawler/crawl_yizheng.pyÚfetch_all_listr>      sZ  € à€IÜ“€IØ€Iä	Ó	ð N˜aØ—*‘*×#Ñ#¨T¸Ð8HÐ#ÓIˆØ×!Ñ!ð Ið "ó 
ˆð �|‰|‹~ˆðG	à�I‰I”dœT‘k¨mÀUˆIÔKàŸ-™-ð 	)ó 	ˆKð ˜aÒØ!�ä�I˜k˜]¨$Ð/Ô0ä˜A˜{¨Q™Ó/ò .D�Ø˜’6Ü!Ð&7¸°t¸5Ð$AÑA�FðLØŸ	™	 &°]ÈE˜	ÔRð
 Ÿ™ð 'ó �ñ  Ü˜L¨¨¨LÐ9Ô:Ùà�	Ø!ò '�DØ˜u™+�CØŸ>™>¨&Ô1Ü" S™j˜Ø )Ò+Ø!Ÿ™ cÔ*Ø!×(Ñ(Ø%)¨'¡]Ø#&Ø$(¨¡Lñ*ô ð
 " Q™™	ð'ô ˜
 2 $ e¨I¨;°fÐ=Ô>à˜‘7˜a“<Ü˜N¬3¨y«>Ð*:¸'ÐBÕCð].Dðf �M‰M�O÷]Nð` ÐøðaLØŸ	™	 &°VÀU˜	ÖKûôT ò 	5ÜÐ/°¨sÐ3×4Ñ4ûð	5ûð �M‰M�Oú÷]Nð` Ðúsi   ™AH ÁA*GÃF,ÃAGÄ)AGÅ7GÆH Æ,GÇGÇ	G(ÇG#ÇG+Ç#G(Ç(G+Ç+G=Ç=H È H
c                  óÚ  — t        «       5 } | j                  j                  ddg¬«      }|j                  t        d   ¬«      }|j                  «       }|j                  t        t        z   dd¬«       |j                  d	«      }|j                  «        g }|D ]<  }|d
   }|j                  d«      s	t        |z   }|j                  |d   ||d   dœ«       Œ> |cddd«       S # 1 sw Y   yxY w)u$   å�ªèŽ·å�–ç¬¬ä¸€é¡µï¼ˆæ—¥å¢žé‡�ç”¨ï¼‰Tr
   r   r   r   r   r   r   a@  () => {
            const result = [];
            document.querySelectorAll('.bt-list-new').forEach(li => {
                const a = li.querySelector('a');
                const span = li.querySelector('.bt-list-time');
                if (a) {
                    result.push({
                        title: (a.getAttribute('title') || a.textContent).trim(),
                        url: a.getAttribute('href'),
                        date: span ? span.textContent.trim() : ''
                    });
                }
            });
            return result;
        }r   r   r   r   r   N)r   r   r    r!   ÚHEADERSr"   r#   r$   r%   r&   r.   r)   r+   )r2   r3   r4   r5   r9   Úresultr;   r   s           r=   Úfetch_first_pagerB   h   sæ   € ä	Ó	ð ˜aØ—*‘*×#Ñ#¨T¸Ð8HÐ#ÓIˆØ×!Ñ!¬W°\Ñ-BÐ!ÓCˆØ�|‰|‹~ˆØ�	‰	”$œ‘+¨-Àˆ	ÔGØ—‘ð ó ˆð 	�‰ŒØˆØò 	VˆDØ�u‘+ˆCØ—>‘> &Ô)Ü˜S‘j�Ø�M‰M D¨¡M¸#ÀtÈFÁ|ÑTÕUð		Vð
 ÷7÷ ò ús   ‹CC!Ã!C*c                 ó¨  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }dD ]C  }|j                  d|¬«      }|sŒ |dd	g«      D ]  }|j                  «        Œ t        |«      c S  d
D ]C  }|j                  d|¬«      }|sŒ |dd	g«      D ]  }|j                  «        Œ t        |«      c S  	 y#  Y yxY w)Né   )Úheadersr   zutf-8Úlxml)z
bt-contentz
bt-articlezarticle-contentÚcontentzpage-contentztheme-showcaseÚdiv)Úclass_ÚscriptÚstyle)ÚzoomzUCAP-CONTENT)ÚidÚ )	ÚrequestsÚgetr@   Úencodingr   ÚtextÚfindÚ	decomposeÚstr)r   ÚrÚsoupÚclsrH   ÚtagÚid_names          r=   Úparse_detailr[   ‡   sâ   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ü˜QŸV™V VÓ,ˆØoò 	 ˆCØ—)‘)˜E¨#�)Ó.ˆCÚÙ ¨'Ð2Ó3ò $�CØ—M‘M•Oð$ä˜3“x’ð	 ð 0ò 	 ˆGØ—)‘)˜E g�)Ó.ˆCÚÙ ¨'Ð2Ó3ò $�CØ—M‘M•Oð$ä˜3“x’ñ	 ð øðØØús$   ‚AC Á+C ÂC Â+C Ã
C ÃCÚfullc                 ó"  — | dk(  r#t        «       }t        dt        |«      › d�«       n"t        «       }t        dt        |«      › d�«       |sy t	        j
                  t        «      }d\  }}t        |«      D ]­  \  }}t        |d   «      }	 |j                  dt        |d   |d   |d	   |d
   ||d	   f«       |j                  dkD  r|dz  }n|dz  }|dz   dz  dk(  r3t        d|dz   › dt        |«      › d|› d|› �«       |j                  «        t        j                  d«       Œ¯ |j                  «        |j!                  «        t        dt        › d|› d|› dt        |«      › d�	«       y # t        $ r}t        d|› �«       Y d }~Œ·d }~ww xY w)NÚincrementalu   ðŸ“‹ å¢žé‡�æ¨¡å¼�: ç¬¬1é¡µ u   æ�¡u   
ðŸ“‹ å…±é‡‡é›† u    æ�¡)r   r   r   zÁ
                INSERT OR IGNORE INTO gov_raw
                (site_name, source_url, page_url, title, publish_date, content, summary)
                VALUES (?, ?, ?, ?, ?, ?, ?)
            r   r   r   r   u     â�Œ - é   u     ðŸ’¾ [ú/u   ] æ–°å¢žu   , è·³è¿‡g333333Ó?u   
âœ… u   : æ–°å¢žu   , å…±)rB   r'   r,   r>   Úsqlite3Úconnectr   Ú	enumerater[   ÚexecuteÚ	SITE_NAMEÚtotal_changesr-   ÚcommitÚtimeÚsleepr.   )	Úmoder9   ÚconnÚnewÚskipÚidxr;   Úbodyr<   s	            r=   Úrunrp   œ   s™  € Øˆ}ÒÜ Ó"ˆÜÐ+¬C°«J¨<°sÐ;Õ<äÓ ˆÜÐ!¤# e£* ¨TÐ2Ô3áØä�?‰?œ7Ó#€DØ�I€Cˆä˜uÓ%ò ‰	ˆˆTÜ˜D ™KÓ(ˆð	"Ø�L‰Lð ô ˜T %™[¨$¨u©+°t¸G±}Ø�v‘,  d¨7¡mð5ô	6ð ×!Ñ! AÒ%Ø�q‘‘à˜‘	�ð �!‰G�r‰>˜QÒÜ�H˜S ™U˜G 1¤S¨£Z L°¸¸¸XÀdÀVÐLÔMØ�K‰KŒMÜ�
‰
�3�ð'ð* 	‡K�K„MØ‡J�J„LÜ	ˆF”9�+˜X c U¨(°4°&¸¼cÀ%»j¸\ÈÐ
MÕNøô ò 	"Ü�H˜Q˜C�.×!Ñ!ûð	"ús   ÂAE-Å-	FÅ6F	Æ	FÚ__main__r   ÚtestTr
   r   r   z/https://www.yizheng.gov.cn/xxfb/gsgg/index.htmlr   r   r   zç() => Math.max(...Array.from(document.querySelectorAll('.page-content a, .pagination a')).filter(a => a.getAttribute('href') && a.getAttribute('href').includes('index_')).map(a => parseInt(a.textContent)).filter(n => !isNaN(n)), 1)zTotal pages: )r\   )(Ú__doc__ÚrerO   ra   ÚosÚsysrh   ÚjsonÚbs4r   Úplaywright.sync_apir   re   r$   r%   ÚenvironrP   r   r@   r>   rB   r[   rp   Ú__name__r,   Úargvrj   r2   r   r    r3   r!   r4   r"   r5   r#   r&   Útotalr'   r.   © ó    r=   ú<module>r€      sH  ðá Pß 1× 1× 1Ó 1Ý Ý /à0€	Ø#€Ø€Ø
�*‰*�.‰.˜Ð$5Ó
6€ð ð  Dð€òVòpò>ó*%OðN ˆzÒÙ˜cŸh™h›-¨!Ò+ˆ3�8‰8�AŠ;°€DØˆv‚~ÙÓð 	 !Ø—j‘j×'Ñ'°¸^Ð<LÐ'ÓMˆGØ×%Ñ%°¸Ñ1FÐ%ÓGˆCØ—<‘<“>ˆDØ�I‰IÐGÐTaÐkpˆIÔqØ—M‘Mð  #Pó  QˆEÙ�M % Ð)Ô*Ø�M‰MŒO÷	ð 	ñ 	ˆD�	ð ÷	ð 	ús   ÂBD,Ä,D5