Ë
    ¸¬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ZddlZddlmZ ddl	m
Z
 ddlZddlmZ ddlZ ej                  d«       dZdZd	Zd
Zej(                  j+                  dd«      ZdZddiZd„ Zd„ Zd„ Zd„ Zdd„Zedk(  rI ej>                  «       Z e jC                  de"d¬«       e jG                  «       Z$ ee$jJ                  ¬«       yy)uT  
æ–¹åŸŽåŽ¿æ°‘æ”¿å±€ - å…¬ç¤ºå…¬å‘Šçˆ¬è™«
URL: https://www.fangcheng.gov.cn/fcxmzj/gsgg/
CMS: å�—é˜³å¸‚æ”¿åºœç½‘ç«™ç¾¤ (t.nanyang.gov.cn)
åˆ—è¡¨: é�™æ€�HTMLåˆ†é¡µ index.html â†’ index_1.html (25æ�¡/é¡µ, å…±45æ�¡2é¡µ)
è¯¦æƒ…: /YYYY/MM-DD/NUMBER.html, æ­£æ–‡åœ¨ <div class="content" id="content">
æ—¥è·‘: --max-pages 1 (å¢žé‡�å�–æœ€æ–°ä¸€é¡µ)
é    N)Údatetime)Úurljoin)ÚBeautifulSoupÚignorezhttps://www.fangcheng.gov.cnu   æ–¹åŸŽåŽ¿æ°‘æ”¿å±€u   å…¬ç¤ºå…¬å‘Šu	   æ²³å�—çœ�ÚDB_PATHz/mnt/data/search.dbé   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                  ó    — t        j                  «       } | j                  j                  t        «       | j                  t        › d�d¬«       | S )Nz/fcxmzj/gsgg/é   ©Útimeout)ÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚBASE_URL)Úss    ú)/root/gov_crawler/crawl_fangcheng_gsgg.pyÚget_sessionr       s>   € Ü×ÑÓ€AØ‡I�I×Ñ”WÔà‡E�EŒXˆJ�mÐ
$¨b€EÔ1Ø€Hó    c                 ój  — |dk(  r
t         › d�}nt         › d|dz
  › d�}g }	 | j                  |d¬«      }d|_        |j                  }t	        |d«      }|j                  d	«      D �]  }|j                  d
«      }|sŒ|j                  dd«      }	|j                  d«      xs |j                  d¬«      xs dj                  «       }
|
r|	rt        |
«      dk  rŒt|	j                  d«      rt         › |	› �}	n+|	j                  d«      st         › d|	j                  d«      › �}	d}|j                  d«      }|r;|j                  d¬«      }t        j                  d|«      }|r|j                  d«      }|j                  |	|
|dœ«       �Œ" |S # t         $ r}t#        d|› d|› �d¬«       g cY d}~S d}~ww xY w)u   èŽ·å�–åˆ—è¡¨é¡µé   z/fcxmzj/gsgg/index.htmlz/fcxmzj/gsgg/index_z.htmlr
   r   úutf-8úhtml.parserzdiv.zfxxgk_zdgkc ul liza[href]ÚhrefÚ ÚtitleT)Ústripé   ú/ÚhttpÚbz(\d{4}-\d{2}-\d{2}))Úurlr   Údateu     [é”™è¯¯] åˆ—è¡¨é¡µ u    è¯·æ±‚å¤±è´¥: ©ÚflushN)r   r   ÚencodingÚtextr   ÚselectÚ
select_oneÚget_textr   ÚlenÚ
startswithÚlstripÚreÚsearchÚgroupÚappendÚ	ExceptionÚprint)ÚsessionÚpager$   ÚitemsÚrespÚhtmlÚsoupÚliÚa_tagr   r   Úpublish_dateÚb_tagÚtxtÚmÚes                   r   Ú
fetch_listrC   (   s·  € àˆq‚yÜ�
Ð1Ð2‰ä�
Ð-¨d°1©f¨X°UÐ;ˆà€Eð$Ø�{‰{˜3¨ˆ{Ó+ˆØˆŒØ�y‰yˆä˜T =Ó1ˆØ—+‘+Ð6Ó7ó 	ˆBØ—M‘M )Ó,ˆEÙØØ—9‘9˜V RÓ(ˆDØ—Y‘Y˜wÓ'ÒK¨5¯>©>À¨>Ó+EÒKÈ×RÑRÓTˆEÙ¡¬¨E«
°QªØØ�‰˜sÔ#Ü"˜ D 6Ð*‘Ø—_‘_ VÔ,Ü"˜ 1 T§[¡[°Ó%5Ð$6Ð7�ð ˆLØ—M‘M #Ó&ˆEÙØ—n‘n¨4�nÓ0�Ü—I‘IÐ4°cÓ:�ÙØ#$§7¡7¨1£:�Là�L‰LØØØ$ñö ð-	ð6 ˆøÜò ÜÐ% d V¨?¸1¸#Ð>ÀdÕKØ�	ûðús   ¢E'F
 Æ
	F2ÆF-Æ'F2Æ-F2c                 óB  — 	 | j                  |d¬«      }d|_        |j                  }d}t        j                  d|«      }|r|j                  d«      j                  «       }d}t        j                  d|«      }|r|j                  d«      j                  «       }d}|j                  d«      }|d	k\  r¯|j                  d
|«      dz   }	d}
|	}|t        |«      k  rJ|
d	kD  rE|||dz    dk(  r|
dz  }
|dz  }n|||dz    dk(  r|
dz  }
|dz  }n|dz  }|t        |«      k  r|
d	kD  rŒE|
d	k(  r||	|dz
   n||	|	dz    }|j                  «       rt        |j                  «       «      }|rt        |«      dk  rd}|||fS # t        $ r}t        d|› d|› �d¬«       Y d}~yd}~ww xY w)u'   èŽ·å�–è¯¦æƒ…é¡µæ ‡é¢˜ã€�æ—¥æœŸå’Œæ­£æ–‡r
   r   r   r   z<div class="title">([^<]+)r   u"   æ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})zclass="content" id="content"r   ú>é   z<divé   z</div>iˆ  é   u     [é”™è¯¯] è¯¦æƒ…é¡µ z: Tr&   N)r   r   r   )r   r(   r)   r0   r1   r2   r   Úfindr-   Úclean_content_htmlr4   r5   )r6   Ú
detail_urlr9   r:   r   rA   r>   ÚbodyÚidxÚstartÚdepthÚiÚrawrB   s                 r   Úfetch_detailrR   W   sÃ  € ð,Ø�{‰{˜:¨rˆ{Ó2ˆØˆŒØ�y‰yˆð ˆÜ�I‰IÐ3°TÓ:ˆÙØ—G‘G˜A“J×$Ñ$Ó&ˆEð ˆÜ�I‰IÐ;¸TÓBˆÙØŸ7™7 1›:×+Ñ+Ó-ˆLð ˆØ�i‰iÐ6Ó7ˆØ�!Š8Ø—I‘I˜c 3Ó'¨!Ñ+ˆEØˆEØˆAØ”c˜$“i’- E¨A¢IØ˜˜!˜A™#�; &Ò(Ø˜Q‘J�EØ˜‘F‘AØ˜!˜A˜a™C�[ HÒ,Ø˜Q‘J�EØ˜‘F‘Aà˜‘F�Að ”c˜$“i’- E¨A£Ið &+¨a¢Z�$�u˜Q˜q™S‘/°T¸%ÀÀdÁ
Ð5KˆCØ�y‰yŒ{Ü)¨#¯)©)«+Ó6�á”s˜4“y 2’~ØˆDà�l DÐ(Ð(øäò ÜÐ% j \°°A°3Ð7¸tÕDÜûðús   ‚D E8 Ä#AE8 Å8	FÆFÆFc                 óò  — | syt        | d«      }|j                  d«      D ]<  }|j                  dd«      }|sŒ|j                  d«      rŒ*t	        t
        |«      |d<   Œ> |j                  d«      D ]`  }|j                  dd«      }|sŒ|j                  d«      rŒ*|j                  d«      rŒ<|j                  d	«      rŒNt	        t
        |«      |d<   Œb t        |«      }t        j                  d
d|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       S )u   æ¸…æ´—æ­£æ–‡ HTMLr   r   ÚimgÚsrcr"   Úar   ú#Ú
javascriptz\sstyle="[^"]*"z<span[^>]*>|</span>z<strong[^>]*>|</strong>z<b[^>]*>|</b>z<font[^>]*>|</font>z\n{3,}z

)
r   Úfind_allr   r.   r   r   Ústrr0   Úsubr   )Úhtml_contentr;   rT   rU   rV   r   Úresults          r   rJ   rJ   ˆ   sF  € áØä˜ }Ó5€Dð �}‰}˜UÓ#ò 0ˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~ fÕ-Ü ¤¨3Ó/ˆC�ŠJð0ð �]‰]˜3Óò 0ˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™¨Õ/¸¿¹ÈÕ8LÐUY×UdÑUdÐeqÕUrÜ¤¨$Ó/ˆAˆfŠIð0ô
 �‹Y€Fä�V‰VÐ&¨¨FÓ3€FÜ�V‰VÐ*¨B°Ó7€FÜ�V‰VÐ.°°FÓ;€FÜ�V‰VÐ$ b¨&Ó1€FÜ�V‰VÐ*¨B°Ó7€FÜ�V‰V�I˜v vÓ.€FØ�<‰<‹>Ðr   c                 ó  — t        «       }t        j                  t        «      }|j	                  d«       |j	                  d«       t        «       }|j	                  dt        f«      }|D ]  }|j                  |d   «       Œ t        dt        |«      › dt        › d�d¬	«       d
}| rt        | |«      nd
}t        d|› d|› d�d¬	«       d}d}	d}
t        d|dz   «      D �]¹  }t        d|› d|› d�dd¬«       t        ||«      }|st        dd¬	«       Œ5d}|D �]M  }|d   }||v r|	dz  }	Œ|d   }|d   }|s|	dz  }	Œ%t        ||«      \  }}}|r|n|}|r|s|}|rt        j                  dd|«      n|}t        j                  dd|«      j!                  «       d d }|rd|v rdnd}	 |j	                  dt        |||d d |d d |d d |r|ndd t"        t$        |f«      }|j&                  dkD  ru|j	                  d!|f«      j)                  «       }|r&|d   }	 |j	                  d"||d d t        |d d# f«       |j                  |«       |j-                  «        |dz  }|dz  }n|	dz  }	�ŒP t        d%|› d&|› d'�d¬	«       ||k  s�Œ¥t1        j2                  d(«       �Œ¼ |j5                  «        t        d)|› d*|	› d+|
› �d¬	«       |S # t        j*                  $ r Y Œ¤w xY w# t.        $ r}t        d$dd¬«       |
dz  }
Y d }~�Œçd }~ww xY w),NzPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALz.SELECT page_url FROM gov_raw WHERE site_name=?r   u   å·²æœ‰ u    æ�¡ u    è®°å½•Tr&   é   u   å…±çº¦ u    é¡µ, çˆ¬å�–å‰� u    é¡µr   u   [ç¬¬ r!   u    é¡µ] r   )Úendr'   u	   æ— æ•°æ�®r$   r   r%   z<[^>]+>ú z\s+i,  z<tablezõINSERT OR IGNORE INTO gov_raw
                    (site_name, source_url, page_url, title, publish_date,
                     summary, content, status, category, group_name, has_table)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)iô  é
   Úactivez'SELECT id FROM gov_raw WHERE page_url=?zLINSERT INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)éÈ   Úxú+u    æ�¡ (ç´¯è®¡ ú)g      à?u   
å®Œæˆ�! æ–°å¢ž u	   , è·³è¿‡ u	   , é”™è¯¯ )r   Úsqlite3Úconnectr   ÚexecuteÚsetÚ	SITE_NAMEÚaddr5   r-   ÚminÚrangerC   rR   r0   r[   r   ÚCATEGORYÚGROUPÚrowcountÚfetchoneÚIntegrityErrorÚcommitr4   ÚtimeÚsleepÚclose)Ú	max_pagesr   ÚdbÚexistingÚcurÚrowÚtotal_pagesÚpages_to_fetchÚ	total_newÚ
total_skipÚtotal_errorr7   r8   Úpage_newÚitemÚfull_urlr   r>   Ú	det_titleÚdet_daterL   Úfinal_titleÚsummaryÚ	has_tableÚridrB   s                             r   ÚcrawlrŒ   ¦   ss  € Ü‹€Aä	�‰œÓ	!€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+ä‹u€HØ
�*‰*ÐEÌ	À|Ó
T€CØò ˆØ�‰�S˜‘VÕðô 
ˆG”C˜“M�? %¬	 {°'Ð
:À$ÕGð €KÙ4=”S˜ KÔ0À1€NÜ	ˆG�K�=Ð 0°Ð0@ÀÐ
EÈTÕRà€IØ€JØ€Kä�a˜¨!Ñ+Ó,ó ?ˆÜ��d�V˜1˜^Ð,¨FÐ3¸À4ÕHÜ˜1˜dÓ#ˆÙÜ�+ TÕ*ØàˆØó 3	!ˆDØ˜E‘{ˆHØ˜8Ñ#Ø˜a‘�
Øà˜‘MˆEØ ™<ˆLáØ˜a‘�
Øô )5°Q¸Ó(AÑ%ˆI�x Ù'0™)°eˆKÙ¡Ø'�ñ 8<”b—f‘f˜Z¨¨dÔ3ÀˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGá! h°$Ñ&6™¸AˆIð!Ø—j‘jð "@ô ˜x¨°;¸tÀÐ3DÀlÐSVÐTVÐFWØ˜D˜S�M©4¡4°RØœh¬¨yðBó�ð —<‘< !Ò#ØŸ*™*Ð%NÐQYÐP[Ó\×eÑeÓg�CÙØ! !™f˜ð!ØŸJ™JÐ'uØ(+¨[¸¸#Ð->Ä	È7ÐSWÐTWÈ=Ð'Yô[ð —L‘L Ô*Ø—I‘I”KØ ‘N�IØ ‘M‘Hà !‘O�Jùða3	!ôj 	��(�˜=¨¨°1Ð5¸TÕBØ�.Ô Ü�J‰J�sŽOð?ðB ‡H�H„JÜ	Ð˜i˜[¨	°*°¸YÀ{ÀmÐ
TÐ\`ÕaØÐøô%  '×5Ñ5ò !Ù ð!ûô ò !Ü˜ ¨$Õ/Ø˜qÑ –ûð!ús=   Æ&A-KÈ KÈ41KËKËKËKËKË	LË%K>Ë>LÚ__main__z--max-pages)ÚtypeÚdefault)ry   )N)&Ú__doc__ÚsysÚosr0   rv   rh   ÚargparseÚjsonr   Úurllib.parser   r   Úbs4r   ÚwarningsÚfilterwarningsr   rl   rp   rq   Úenvironr   r   Ú	PAGE_SIZEr   r   rC   rR   rJ   rŒ   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsry   © r   r   ú<module>r£      sâ   ðñ÷ 2× 1× 1Ó 1Ý Ý  Û Ý ã Ø €× Ñ ˜Ô !à)€Ø €	Ø€Ø€Ø
�*‰*�.‰.˜Ð$9Ó
:€Ø€	ð ð  Dð€ò
ò,ò^.òbó<Zðz ˆzÒØ$ˆX×$Ñ$Ó&€FØ
×Ñ˜¨C¸ÐÔ>Ø×ÑÓ€DÙ	�D—N‘NÖ#ð	 r   