Ë
    H«£jž+  ã                   ót  — 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	m
Z
mZ ddlmZ ej                  j                  dd«       ddlmZ ddlZddlZdZd„ Zd	Zd
dddœZdZdZ ej4                  «       Zej8                  j;                  e«       d„ Zd„ Zd„ Z dd„Z!d„ Z"d„ Z#d„ Z$e%dk(  r e$«        yy)uß  æ²‚æ°´åŽ¿-ç»�æµŽå¼€å�‘åŒº-å…¬å‘Šå…¬ç¤ºçˆ¬è™«

Visual SiteBuilder 9 (å�šè¾¾VSB)
åˆ—è¡¨: /xzwgk1/bm_xz_jd_xxgk/zssydw/xjjkfq/fdzdgknr1/gggs.htm
      ç¬¬Né¡µ: gggs/{page_id}.htmï¼ˆé€’å‡�IDï¼‰
è¯¦æƒ…: /info/35725/XXXXX.htm
å†…å®¹: div.newscontent_s > p, table
æ ‡é¢˜: <a title="å®Œæ•´æ ‡é¢˜"> æˆ– <meta ArticleTitle>
æ—¥æœŸ: <meta PubDate> æˆ–åˆ—è¡¨é¡µ<span>

Usage:
  python3 crawl_yishui_jjkfq.py --pages 5    # å‰�5é¡µ
  python3 crawl_yishui_jjkfq.py --pages 1    # æ—¥è·‘å¢žé‡�
é    N)ÚBeautifulSoupÚTagÚNavigableString)Úurljoinz/root/gov_crawler)Úpush_to_searchdbz/root/search.dbc                  óÊ   — 	 t        j                  t        d¬«      } | j                  d«       | j                  d«       | S # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Né   ©ÚtimeoutzPRAGMA busy_timeout=30000zPRAGMA journal_mode=WALz  WARN DB connect: )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚ	ExceptionÚprint)ÚconnÚes     úcrawl_yishui_jjkfq.pyÚget_db_connectionr   #   sY   € ðÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/ØˆøÜò ÜÐ# A 3Ð'Ô(Üûðús   ‚>A Á	A"Á
AÁA"zhttps://www.yishui.gov.cnzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageõ&   æ²‚æ°´åŽ¿-ç»�æµŽå¼€å�‘åŒº-å…¬å‘Šå…¬ç¤ºz,xzwgk1/bm_xz_jd_xxgk/zssydw/xjjkfq/fdzdgknr1c                 óV   — t         j                  | d¬«      }d|_        |j                  S )Né   r
   zutf-8)ÚsessÚgetÚencodingÚtext)ÚurlÚresps     r   Ú
fetch_pager    =   s%   € Ü�8‰8�C ˆ8Ó$€DØ€D„MØ�9‰9Ðó    c                 ó  — g }t        j                  dt         j                  «      }|j                  | «      D ]Ê  }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|j	                  d«      j                  «       }|r|sŒed|vrŒj|}|j                  d«      rt        |dd z   }n,|j                  d	«      st        d
z   |j                  d
«      z   }|j                  |||dœ«       ŒÌ |S )u   è§£æž�åˆ—è¡¨é¡µzn<li[^>]*>.*?<span[^>]*>(\d{4}-\d{1,2}-\d{1,2})</span>\s*<a[^>]*href="([^"]+)"[^>]*title="([^"]*)"[^>]*>.*?</a>é   é   é   z/info/z../../../../../é   NÚhttpú/)Útitler   Úpub_date)
ÚreÚcompileÚDOTALLÚfinditerÚgroupÚstripÚ
startswithÚBASE_URLÚlstripÚappend)ÚhtmlÚitemsÚpatternÚmr*   Úhrefr)   r   s           r   Ú
parse_listr:   C   sö   € à€EÜ�j‰jð	Bô 	�	‰	ó	€Gð ×Ñ˜dÓ#ò IˆØ—7‘7˜1“:×#Ñ#Ó%ˆØ�w‰w�q‹z×ÑÓ!ˆØ—‘˜“
× Ñ Ó"ˆÙ™DØØ˜4ÑØØˆØ�?‰?Ð,Ô-Ü˜T " #˜YÑ&‰CØ—‘ Ô(Ü˜S‘. 4§;¡;¨sÓ#3Ñ3ˆCØ�‰˜u¨S¸hÑGÕHðIð €Lr!   c                 ó|  — t        | d«      }|j                  dd¬«      }|sy|j                  dd¬«      D �]  }|j                  d¬	«      }d
|v sd|v sŒ|d   }d|v r y|j	                  d«      rt
        |z   c S |j	                  d«      r�|j                  dd«      d   }|j                  d«      }d}	|j	                  d«      r|dd }|	dz  }	|j	                  d«      rŒ|	t        |«      k\  rt
        dz   |z   c S dj                  |d|	  «      dz   |z   }
|
c S |j                  dd«      d   }|dz   |z   c S  y)u#   ä»Žåˆ†é¡µåŒºåŸŸèŽ·å�–"ä¸‹é¡µ"é“¾æŽ¥úhtml.parserÚspanÚp_pages©Úclass_NÚaT©r9   ©r0   u   ä¸‹é¡µu	   ä¸‹ä¸€é¡µr9   Ú
javascriptr(   z../r#   r   r%   )
r   ÚfindÚfind_allÚget_textr1   r2   ÚrsplitÚsplitÚlenÚjoin)r5   Úcurrent_urlÚsoupÚpage_divrA   Útxtr9   Úbase_dirÚpartsÚcountÚresolveds              r   Úget_next_page_urlrT   ]   s^  € ä˜˜}Ó-€DØ�y‰y˜¨	ˆyÓ2€HÙØØ×Ñ˜s¨ÐÓ.ó )ˆØ�j‰j˜tˆjÓ$ˆØ�s‰?˜k¨SÒ0Ø�V‘9ˆDØ˜tÑ#ÙØ�‰˜sÔ#Ü $‘Ò&Ø�‰˜uÔ%Ø&×-Ñ-¨c°1Ó5°aÑ8�Ø Ÿ™ sÓ+�Ø�Ø—o‘o eÔ,Ø  ˜8�DØ˜Q‘J�Eð —o‘o eÕ,ð œC ›JÒ&Ü# c™>¨DÑ0Ò0ØŸ8™8 E¨'¨E¨6 NÓ3°cÑ9¸DÑ@�Ø’Ø"×)Ñ)¨#¨qÓ1°!Ñ4ˆHØ˜c‘> DÑ(Ò(ð))ð* r!   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<   rA   r9   Ú )r'   rD   ú#ÚimgÚsrc)r'   z//zdata:)	Úbs4r   ÚstrrF   r   r1   ÚurllibÚparser   )ÚtableÚbase_urlr   ÚtblrA   r9   rX   rY   s           r   Úhtml_table_to_htmlra   {   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€Or!   c                 ó„  — | j                  dg«      ryd}| j                  D �]>  }t        |t        «      r%t	        |«      j                  «       }|sŒ0||dz   z  }Œ9|j                  dk(  r|dz  }ŒN|j                  dk(  rS|j                  dd«      }|j                  dd«      }|sŒ„|j                  d	«      r|nt        ||«      }|d
|› d|› d�z  }Œ°|j                  dk(  rW|j                  dd«      }|j                  d¬«      }	|sŒæ|	sŒé|j                  d	«      r|nt        ||«      }
|d|	› d|
› d�z  }�Œ|j                  dv s�Œ&||j                  dd¬«      dz   z  }�ŒA t        j                  dd|«      j                  «       }|j                  dd«      }t        j                  dd|«      j                  «       }|S )u    ä»Ž <p> æ ‡ç­¾ä¸­æ��å�–çº¯æ–‡æœ¬r^   rV   ú Úbrú
rX   rY   Úaltr'   ú![ú](z) rA   r9   TrC   ú[)r=   ÚstrongÚbÚemÚuÚfontz[ \t]+õ   Â )rE   ÚchildrenÚ
isinstancer   r[   r0   Únamer   r1   r   rG   r+   ÚsubÚreplace)Úp_tagr_   rO   ÚchildÚtrY   rf   Úfull_srcÚa_hrefÚa_textÚ	full_hrefs              r   Ú_extract_p_textr|   Š   sª  € à‡z�z�7�)ÔØØ
€CØ—‘ó 9ˆÜ�eœ_Ô-Ü�E“
× Ñ Ó"ˆAÚØ�q˜3‘w‘‘Ø�Z‰Z˜4ÒØ�4‰K‰CØ�Z‰Z˜5Ò Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÚØ"%§.¡.°Ô"8™3¼gÀhÐPSÓ>T�Ø˜˜C˜5  8 *¨BÐ/Ñ/‘Ø�Z‰Z˜3ÒØ—Y‘Y˜v rÓ*ˆFØ—^‘^¨$�^Ó/ˆFÚš&Ø&,×&7Ñ&7¸Ô&?™FÄWÈXÐW]ÓE^�	Ø˜˜6˜( " Y K¨rÐ2Ñ2’Ø�Z‰ZÐEÓEØ�5—>‘> #¨T�>Ó2°SÑ8Ñ8ŠCð)9ô* �&‰&�˜C Ó
%×
+Ñ
+Ó
-€CØ
�+‰+�f˜cÓ
"€CÜ
�&‰&�˜C Ó
%×
+Ñ
+Ó
-€CØ€Jr!   c                 ó4  — | d   }	 t        |«      }t	        |d«      }d}|j                  d	d
t        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|s]|j                  d	d
t        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|s'|j                  dd¬«      }|r|j                  d¬«      }|s| d   }| j                  dd«      }|j                  d	d
t        j                  dt        j                  «      i¬«      }	|	rK|	j                  d«      r:t        j                  d|	d   j                  «       «      }
|
r|
j                  d«      }|j                  dd¬«      }d}g }|�rg }t        «       }|j                  g d¢d¬«      D �]=  }|j                  dd«      }d|j                  dd«      v rŒ+|j                   dk(  r|j#                  d«      rŒL|j                   dk(  rDt%        |«      dd  }||v rŒn|j'                  |«       t)        |«      }|sŒ�|j+                  |«       ŒŸ|j                   dk(  r!t-        ||«      }|sŒ½|j+                  |«       ŒÏ|j                   d!k(  sŒß|j                  d"d«      }|j                  d#d«      }|s�Œ|j/                  d$«      r|nt1        ||«      }|j+                  d%|› d&|› d'�«       �Œ@ d(j3                  |«      }|j                  d)d¬*«      D ]�  }|j                  d+d«      }|j                  d¬«      }|sŒ*|sŒ-t        j4                  d,|t        j                  «      sŒS|j/                  d$«      st1        ||«      }|j+                  ||d-œ«       |d.|› d/|› d0�z  }Œ‘ ||||fS # t        $ r4}t        d|› d|› �«       | d   | j                  dd«      dg fcY d}~S d}~ww xY w)1u   æŠ“å�–è¯¦æƒ…é¡µr   z  WARN skip: z - r)   r*   rV   Nr<   Úmetarr   ÚArticleTitle)ÚattrsÚcontentÚ	pageTitleÚh3zread-title-wrapr?   TrC   ÚPubDatez(\d{4}-\d{2}-\d{2})r#   ÚdivÚnewscontent_s)Úpr^   rX   )Ú	recursiveÚstylezdisplay:nonerc   r‡   r^   éd   rX   rY   rf   r'   rg   rh   ú)z

rA   rB   r9   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$)rr   r   u   

é™„ä»¶ï¼š<p><a href="z">z</a></p>)r    r   r   r   r   rE   r+   r,   ÚIr0   rG   Úmatchr/   ÚsetrF   rt   rr   Úfind_parentr[   Úaddra   r4   r|   r1   r   rK   Úsearch)Úitemr   r5   r   rM   r)   Úmtrƒ   r*   Úmdr8   Úcontent_viewr�   ÚattachmentsrQ   Úseen_tablesÚelemr‰   Ú	table_strÚmd_tablerO   rY   rf   rx   rA   r9   r   s                              r   Úfetch_detailr›   ª   sÖ  € à
ˆu‰+€Cð?Ü˜#‹ˆô
 ˜˜}Ó-€Dð €EØ	�‰�6 &¬"¯*©*°_ÄbÇdÁdÓ*KÐ!LˆÓ	M€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�v f¬b¯j©j¸ÄrÇtÁtÓ.LÐ%MˆYÓNˆÙ�"—&‘&˜Ô#Ø�y‘M×'Ñ'Ó)ˆEÙØ�Y‰Y�tÐ$5ˆYÓ6ˆÙØ—K‘K d�KÓ+ˆEÙØ�W‘ˆð �x‰x˜
 BÓ'€HØ	�‰�6 &¬"¯*©*°ZÄÇÁÓ*FÐ!GˆÓ	H€BÙ	ˆb�f‰f�YÔÜ�H‰HÐ+¨R°	©]×-@Ñ-@Ó-BÓCˆÙØ—w‘w˜q“zˆHð —9‘9˜U¨?�9Ó;€LØ€GØ€KâØˆÜ“eˆà ×)Ñ)Ò*?È4Ð)ÓPó 	:ˆDà—H‘H˜W bÓ)ˆEØ §¡¨s°BÓ!7Ñ7Øà�y‰y˜CÒ D×$4Ñ$4°WÔ$=Øà�y‰y˜GÒ#Ü ›I d s˜O�	Ø Ñ+ØØ—‘ 	Ô*Ü-¨dÓ3�ÚØ—L‘L Õ*Ø—‘˜cÒ!Ü% d¨CÓ0�ÚØ—L‘L Õ%Ø—‘˜eÓ#Ø—h‘h˜u bÓ)�Ø—h‘h˜u bÓ)�ÛØ&)§n¡n°VÔ&<™sÄ'È#ÈsÓBS�HØ—L‘L 2 c U¨"¨X¨J°aÐ!8Ö9ð5	:ð8 —+‘+˜eÓ$ˆð ×&Ñ& s°Ð&Ó6ò 	NˆAØ—5‘5˜ Ó$ˆDØ—:‘: D�:Ó)ˆDÚš¤§¡Ð+PÐRVÔXZ×X\ÑX\Õ!]Ø—‘ vÔ.Ü" 3¨Ó-�DØ×"Ñ"¨D¸Ñ#>Ô?ØÐ6°t°f¸B¸t¸fÀHÐMÑM‘ð	Nð �(˜G [Ð0Ð0øô_ ò ?Ü�˜c˜U # a SÐ)Ô*Ø�G‰}˜dŸh™h z°2Ó6¸¸BÐ>Õ>ûð?ús   ‡O Ï	PÏ#)PÐPÐPc                  óV  — t        j                  d¬«      } | j                  dt        dd¬«       | j	                  «       }|j
                  dkD  r|j
                  nd}g }t        › dt        › d	�}|}t        d
|d
z   «      D ]•  }t        d|› d|› d�«       	 t        |«      }t        |«      }|st        d«        n]t        dt        |«      › d�«       |j                  |«       t        ||«      }
|
st        d«        n|
}t!        j"                  d«       Œ— t        dt        |«      › d�«       |st        d«       y g }t%        |«      D ]Å  \  }}t        d|d
z   › dt        |«      › d|d   d d › d�«       t'        |«      \  }}}}|s|d   }t)        j*                  dd|«      j-                  «       }|r|d d nd}|d   |d   ||||t.        |rt1        j2                  |d¬«      ndd œ}|j5                  |«       t!        j"                  d!«       ŒÇ t        d"t        |«      › d#�«       |rt7        |t.        «       t9        «       }|rw	 |j;                  d$t.        f«      }|j=                  «       d   }|j;                  d%t.        f«      }|j=                  «       d   }t        d&|› d'|› d(�«       |j?                  «        t        d*«       y # t        $ r}	t        d|	› �«       Y d }	~	 �ŒÒd }	~	ww xY w# t        $ r}	t        d)|	› �«       Y d }	~	Œ^d }	~	ww xY w# |j?                  «        w xY w)+Nr   )Údescriptionz--pagesr   u   é¡µæ•°ï¼Œ0=å…¨é‡�)ÚtypeÚdefaultÚhelpé   r(   z	/gggs.htmr#   zPage z...z  empty, stopz  found z itemsz  WARN: z  no next page, stopg333333Ó?z
Total list: zNo items found, abortz  [z] r)   é(   z\s+rc   iô  rV   r   F)Úensure_ascii)r   Ú
source_urlr)   r�   Úsummaryr*   Ú	site_namer–   gš™™™™™É?z
Inserting z records...z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?zDB: z rows (FTS: z rows)z  WARN DB query: ÚDONE) ÚargparseÚArgumentParserÚadd_argumentÚintÚ
parse_argsÚpagesr2   Ú	LIST_PATHÚranger   r    r:   rJ   Úextendr   rT   ÚtimeÚsleepÚ	enumerater›   r+   rs   r0   Ú	SITE_NAMEÚjsonÚdumpsr4   r   r   r   ÚfetchoneÚclose)ÚparserÚargsÚ	max_pagesÚ	all_itemsÚlist_urlrL   Úpager5   r6   r   Únext_urlÚrecordsÚir’   r)   r*   r�   r–   r¥   Úrecordr   ÚcursorÚ	raw_countÚ	fts_counts                           r   ÚmainrÆ     s  € Ü×$Ñ$Ð1YÔZ€FØ
×Ñ˜	¬°QÐ=PÐÔQØ×ÑÓ€Dà"Ÿj™j¨1šn�—
’
°!€IØ€Iä�˜1œY˜K yÐ1€HØ€Kä�a˜ Q™Ó'ò ˆÜ��d�V˜1˜Y˜K sÐ+Ô,ð
	Ü˜kÓ*ˆDÜ˜tÓ$ˆEÙÜ˜Ô'ÙÜ�HœS ›Z˜L¨Ð/Ô0Ø×Ñ˜UÔ#ô
 % T¨;Ó7ˆÙÜÐ(Ô*ÙØˆÜ�
‰
�3�ð'ô* 
ˆNœ3˜y›>Ð*¨&Ð
1Ô2áÜÐ%Ô&Øà€GÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÔDÜ0<¸TÓ0BÑ-ˆˆx˜ +ÙØ˜‘MˆEÜ—‘�v˜s EÓ*×0Ñ0Ó2ˆÙ#*�'˜$˜3‘-°ˆà˜‘;Ø˜u™+ØØØØ Ü"ÙJUœ4Ÿ:™: kÀÕFÐ[]ñ	
ˆð 	�‰�vÔÜ�
‰
�3�ð%ô( 
ˆLœ˜W›˜ kÐ
2Ô3ÙÜ˜¤)Ô,äÓ€DÙð		Ø—\‘\Ð"RÔU^ÐT`ÓaˆFØŸ™Ó)¨!Ñ,ˆIØ—\‘\Ð"UÔXaÐWcÓdˆFØŸ™Ó)¨!Ñ,ˆIÜ�D˜˜ <°	¨{¸&ÐAÔBð �J‰JŒLä	ˆ&…Møôo ò 	Ü�H˜Q˜C�.Ô!Þûð	ûôd ò 	+ÜÐ% a SÐ)×*Ñ*ûð	+ûð �J‰J�LúsI   Â#KÂ;)KÉ
A&K2 Ë	K/ËK*Ë*K/Ë2	LË;LÌ	L ÌLÌL ÌL(Ú__main__)rV   )&Ú__doc__Úrequestsr+   Úsysrµ   r±   Úosr¨   rZ   r   r   r   Úurllib.parser   ÚpathÚinsertÚcrawler_libr   r   r\   r   r   r2   ÚHEADERSr´   r®   ÚSessionr   ÚheadersÚupdater    r:   rT   ra   r|   r›   rÆ   Ú__name__© r!   r   ú<module>rÖ      sÔ   ðñó Û 	Û 
Û Û Û 	Û ß 3Ñ 3Ý  à ‡�‡��Ð&Ô 'Ý (Û Û à
€òð '€ð DØOØ0ñ€ð 5€	Ø:€	à€x×ÑÓ€Ø ‡�× Ñ �GÔ òòò4ó<òò@T1ònLð^ ˆzÒÙ…Fð r!   