Ë
    ¸¬ujv'  ã                   ó  — 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mZ ddlZddlm	Z	 ddl
mZ dZedz   ZdZd	Zd
ZdZddiZ ej&                  «       Zej*                  j-                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u  
æ–°å’ŒåŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š çˆ¬è™« (v2 - æ”¹è¿›ç‰ˆ)
CMS: é˜¿å…‹è‹�åœ°åŒºè¡Œæ”¿å…¬ç½²ç½‘ (Boshan CMS)
åˆ—è¡¨: dataList JSON åµŒå…¥åœ¨HTMLä¸­ï¼ˆ10é¡µÃ—15æ�¡=150æ�¡ï¼‰
      é¡µ11+éœ€API(sessionè®¤è¯�, æš‚ä¸�å�¯ç”¨)
è¯¦æƒ…: div.bt_content æ­£æ–‡å®¹å™¨
é    N)Údatetime)ÚBeautifulSoup)Úurljoinzhttps://www.xjxinhe.gov.cnz/xwdt/gsgg/index.htmlu   æ–°å’ŒåŽ¿äººæ°‘æ”¿åºœÚgsggu   æ–°ç–†é˜¿å…‹è‹�z/mnt/data/search.dbz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 óV   — | syt        j                  dd| «      } | j                  «       S )NÚ z(&middot;|&nbsp;|\s)+ú )ÚreÚsubÚstrip)Útexts    ú'/root/gov_crawler/crawl_xjxinhe_gsgg.pyÚ
clean_textr   '   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 ó~  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]m  }|j                  sŒ|j                  dk(  r'|j	                  d¬«      }|sŒ5|j                  |«       ŒG|j                  dk(  r|j                  t        |«      «       Œq|j                  d	v r„|j                  dd¬
«      D ]:  }|j                  d«      rŒ|j	                  d¬«      }|sŒ*|j                  |«       Œ< |j                  dd¬
«      D ]  }|j                  t        |«      «       Œ �Œ|j                  dk(  s�Œ|j                  dd«      }|j                  dd«      }	|s�Œ<|j                  d«      r	t        |z   }|j                  d|	› d|› d�«       �Œp dj                  |«      S )uF   æ��å�–æ­£æ–‡ï¼Œå�ªå¤„ç�†ç›´æŽ¥å­�å…ƒç´ é�¿å…�é‡�å¤�ï¼Œè¡¨æ ¼ä¿�æŒ�HTMLr   úhtml.parserÚscriptÚstyleÚpT©r   Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltú/z![ú](ú)z

)r   Ú	decomposeÚchildrenÚnameÚget_textÚappendÚstrÚfind_allÚfind_parentÚgetÚ
startswithÚBASE_URLÚjoin)
Úhtml_contentÚsoupÚtagÚpartsÚchildÚtr   Útblr   r   s
             r   Úclean_content_htmlr5   .   s’  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðà€EØ—‘ó 1ˆØ�zŠzØØ�:‰:˜ÒØ—‘ T�Ó*ˆAÚØ—‘˜Q•Ø�Z‰Z˜7Ò"Ø�L‰Lœ˜U›Õ$Ø�Z‰ZÐ8Ñ8Ø—^‘^ C°4�^Ó8ò $�Ø—=‘= Ô)ØØ—J‘J T�JÓ*�ÚØ—L‘L •Oð$ð —~‘~ g¸�~Ó>ò '�Ø—‘œS ›XÕ&ò'à�Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ—>‘> #Ô&Ü" S™.�CØ—‘˜r #  b¨¨¨QÐ/Ö0ð11ð2 �;‰;�uÓÐr   c                  ó€  — 	 t         j                  t        d¬«      } d| _        | j                  dk7  rt        d| j                  › �«       g S | j                  }|j                  d«      }|dk  rt        d«       g S ||d	 }d}t        |«      D ]3  \  }}|d
k(  r|dz  }Œ|dk(  sŒ|dz  }|dk(  sŒ"|t        d«      |dz    } n t        j                  «      }g }	|D ]”  }
|
j                  dg «      D ]}  }t        |j                  dd«      «      }|j                  dd«      }|j                  dd«      }|r|sŒG|	j                  ||||j                  dd«      |j                  dd«      dœ«       Œ Œ– t        dt        |	«      › dt        |«      › d�«       |	S # t        $ r}t        d|› �«       g cY d	}~S d	}~ww xY w)u-   ä»ŽHTMLä¸­æ��å�–æ‰€æœ‰åµŒå…¥çš„dataListæ•°æ�®é   ©Útimeoutúutf-8éÈ   u   åˆ—è¡¨é¡µ HTTP z	dataList=r   u   åˆ—è¡¨é¡µ æœªæ‰¾åˆ°dataListNú[é   ú]ÚinfolistÚtitler   ÚurlÚdaytimeÚsourceÚsummary)r@   rA   ÚdaterC   rD   u   åˆ—è¡¨é¡µ: è§£æž�åˆ° u    æ�¡ (åµŒå…¥u   é¡µ)u   åˆ—è¡¨é¡µ å¼‚å¸¸: )Úsessionr*   ÚLIST_URLÚencodingÚstatus_codeÚprintr   ÚfindÚ	enumerateÚlenÚjsonÚloadsr   r&   Ú	Exception)ÚrespÚhtmlÚidxÚrestÚdepthÚiÚcÚdata_strÚdataÚresultÚ	page_dataÚitemr@   rA   Údate_strÚes                   r   Ú
fetch_listr_   S   sÚ  € ð-Ü�{‰{œ8¨Rˆ{Ó0ˆØˆŒØ×Ñ˜sÒ"Ü�O D×$4Ñ$4Ð#5Ð6Ô7ØˆIØ�y‰yˆð �i‰i˜Ó$ˆØ�Š7ÜÐ/Ô0ØˆIØ�C�DˆzˆØˆÜ˜d“Oò 	‰DˆAˆqØ�CŠxØ˜‘
‘Ø�c“Ø˜‘
�Ø˜A“:Ø#¤C¨Ó$4°Q°q±SÐ9�HÙð	ô �z‰z˜(Ó#ˆØˆØò 	ˆIØ!Ÿ™ j°"Ó5ò �Ü" 4§8¡8¨G°RÓ#8Ó9�Ø—h‘h˜u bÓ)�ØŸ8™8 I¨rÓ2�Ù¡%ØØ—‘Ø"ØØ$Ø"Ÿh™h x°Ó4Ø#Ÿx™x¨	°2Ó6ñõ ñð	ô 	Ð%¤c¨&£k ]°,¼sÀ4»y¸kÈÐNÔOØˆøÜò ÜÐ" 1 #Ð&Ô'Ø�	ûðús7   ‚A
F Á.F Á<(F Â%
F Â0C)F Æ	F=Æ#F8Æ2F=Æ8F=c                 ó  — t        | d«      }d}d}d}d}|j                  d«      }|rt        |j                  «       «      }t	        j
                  d| «      }|r!|j                  d«      j                  dd«      }|s9t	        j
                  d| «      }|r!|j                  d«      j                  dd«      }t	        j
                  d	| «      }	|	r|	j                  d«      j                  «       }|j                  d
d¬«      }
|
s|j                  d
d¬«      }
|
s|j                  d
d¬«      }
|
rt        t        |
«      «      }|
r½|
j                  dd¬«      D ]§  }|d   }t	        j
                  d|t        j                  «      sŒ.|j                  d¬«      xs |}|j                  d«      st        t        |«      n|}d|› d|› d�}|j!                  |j#                  d|› d�«      «       t        t        |
«      «      }Œ© ||||fS )u?   è§£æž�è¯¦æƒ…é¡µï¼Œè¿”å›ž (title, publish_date, source, content)r   r   Úh1u2   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})r=   r   ú-u2   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})u%   æ�¥æº�[ï¼š:]\s*([^<>\n]+?)(?:</|\s*$)r   Ú
bt_content)Úclass_Úcontentzarticle-contentÚaT)Úhrefrg   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r   Úhttpr<   r    r!   r	   )r   rK   r   r%   r
   ÚsearchÚgroupÚreplacer   r5   r'   r(   ÚIr+   r   r,   Úreplace_withÚ
new_string)rR   rA   r/   r@   Úpublish_daterC   re   ra   Ú
date_matchÚ	src_matchÚcontent_divÚa_tagrg   Úa_textÚfull_urlÚlink_mds                   r   Úparse_detailrw   †   sï  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð 
�‰�4‹€BÙ	Ü˜2Ÿ;™;›=Ó)ˆô —‘ÐPÐRVÓW€JÙØ!×'Ñ'¨Ó*×2Ñ2°3¸Ó<ˆÙÜ—Y‘YÐTÐVZÓ[ˆ
ÙØ%×+Ñ+¨AÓ.×6Ñ6°s¸CÓ@ˆLô —	‘	ÐBÀDÓI€IÙØ—‘ Ó#×)Ñ)Ó+ˆð —)‘)˜E¨,�)Ó7€KÙØ—i‘i ¨i�iÓ8ˆÙØ—i‘i Ð.?�iÓ@ˆÙÜ$¤S¨Ó%5Ó6ˆñ Ø ×)Ñ)¨#°DÐ)Ó9ò 	?ˆEØ˜‘=ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØŸ™¨d˜Ó3Ò;°t�Ø:>¿/¹/È&Ô:Qœ7¤8¨TÔ2ÐW[�Ø˜f˜X R¨ z°Ð3�à×"Ñ" 4§?¡?°Q°w°i¸q°>Ó#BÔCÜ,¬S°Ó-=Ó>‘ð	?ð �, ¨Ð/Ð/r   c                 óB  — | d   j                  dd«      }|xs | d   j                  dd«      }|xs | j                  dd«      }|xs | j                  dt        «      }|j                  dd«      }|j                  dd«      }	|dd	 }
t        }d
|› d|› d|	› d|› d|› d|› d|
› dt        › d�}|dz   }	 t	        j
                  dt        g|ddd¬«      }|j                  dk(  r`|j                  j                  «       }	 t        |j                  «       «      }|dkD  rPd|› d�}t	        j
                  dt        g|ddd¬«       yd|j                  vrt        d|j                  dd	 › �«       y# t        $ r d}Y Œcw xY w# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)u   å†™å…¥gov_raw + FTS gov_searchrA   ú'z''r@   rE   r   rC   Nr;   zœINSERT OR IGNORE INTO gov_raw 
        (page_url, title, content, publish_date, source_url, site_name, summary, group_name, industry)
    VALUES 
        ('z', 'u   ', 'æ”¿åºœå…¬å‘Š');
zDSELECT CASE WHEN changes() > 0 THEN last_insert_rowid() ELSE 0 END;
Úsqlite3Tr7   )ÚinputÚcapture_outputr   r9   r   z‡INSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary)
SELECT rowid, title, site_name, summary FROM gov_raw WHERE rowid = z;
zUNIQUE constraintz	    [DB] u       [DB] é”™è¯¯: F)rk   r*   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr   ÚintÚ
ValueErrorÚstderrrJ   rP   )r\   Údetail_titleÚpub_daterC   re   Úpage_urlr@   ro   Úsource_nameÚcontent_saferD   Ú	site_nameÚsql_rawÚcombined_sqlrZ   ÚoutÚrowidÚfts_sqlr^   s                      r   Úinsert_articler’   º   só  € à�E‰{×"Ñ" 3¨Ó-€HØÒ*˜T '™]×3Ñ3°C¸Ó>€EØÒ3˜tŸx™x¨°Ó3€LØÒ9˜DŸH™H X¬yÓ9€KØ×%Ñ% c¨4Ó0€KØ—?‘? 3¨Ó-€LØ�D�Sˆk€GÜ€Iðð ˆ*�D˜˜˜t L >°°l°^À4ÈÀzÐQUÐV_ÐU`Ð`dÐelÐdmÐmqÔrwÐqxð yð€Gð
 ð ñ €Lð'Ü—‘ØœÐ ØØ d°Bô
ˆð
 ×Ñ Ò!Ø—-‘-×%Ñ%Ó'ˆCðÜ˜CŸI™I›KÓ(�ð �qŠyðDØDIÀ7ð Kð�ô —‘ 	¬7Ð3¸7ÐSWÐ^bÐlnÕoØà"¨&¯-©-Ñ7Ü˜	 &§-¡-°°Ð"5Ð!6Ð7Ô8ð øô ò Ø’ðûô ò 'ÜÐ! ! Ð%×&Ð&Øûð'úsC   Â3A	E= Ã=E, Ä+E= Å)E= Å,E:Å7E= Å9E:Å:E= Å=	FÆFÆFc                  ó–  — t        d«       t        «       } | st        d«       y t        dt        | «      › d�«       t        «       }	 t	        j
                  dt        dgddd¬	«      }|j                  d
k(  rL|j                  j                  «       r2t        |j                  j                  «       j                  d«      «      }t        dt        |«      › �«       d
}d
}t        | «      D ]ø  \  }}|d   }||v r|dz  }Œt        d|dz   › dt        | «      › d|d   d d › d�d¬«       	 t        j                  |d¬«      }d|_        t%        |j&                  |«      \  }
}}}|j                  «       st        d«       |dz  }Œ™t)        ||
|||«      r,|dz  }t        dt        |j                  «       «      › d�«       n|dz  }t        d«       t!        j"                  d«       Œú t        d|› d |› d�«       t        d!«       y # t        $ r Y �ŒKw xY w# t        $ r.}	t        d|	› �«       t!        j"                  d«       Y d }	~	�Œ[d }	~	ww xY w)"Nu(   === æ–°å’ŒåŽ¿ - å…¬ç¤ºå…¬å‘Š çˆ¬è™« ===
u   æ— æ–‡ç« åˆ—è¡¨u   åˆ—è¡¨æ€»è®¡: u    æ�¡rz   zCSELECT page_url FROM gov_raw WHERE page_url LIKE '%xjxinhe.gov.cn%'Tr7   )r|   r   r9   r   ú
u   å·²çŸ¥URL: rA   r=   z  [r   z] r@   é2   z...r	   )Úendr8   r:   zERR u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)g333333Ó?u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rJ   r_   rM   Úsetr   r€   r�   r‚   rƒ   r   ÚsplitrP   rL   rF   r*   rH   ÚtimeÚsleeprw   r   r’   )ÚarticlesÚ
known_urlsrZ   ÚaddedÚskippedrV   rf   rA   Úrr^   Úd_titleÚd_dateÚd_sourcere   s                 r   Úmainr£   ç   s?  € Ü	Ð5Ô7ô ‹|€HÙÜÐÔ ØÜ	ˆNœ3˜x›=˜/¨Ð
.Ô/ô “€JðÜ—‘ØœÐ!fÐgØ d°Bô
ˆð ×Ñ Ò! f§m¡m×&9Ñ&9Ô&;Ü˜VŸ]™]×0Ñ0Ó2×8Ñ8¸Ó>Ó?ˆJô 
ˆKœ˜J›Ð(Ð
)Ô*ð €EØ€GÜ˜(Ó#ò ‰ˆˆ1Ø�‰hˆØ�*ÑØ�q‰LˆGØä��A�a‘C�5˜œ#˜h›-˜¨¨1¨W©:°c°r¨?Ð*;¸3Ð?ÀSÕIð	Ü—‘˜C¨�Ó,ˆAØ ˆAŒJô .:¸!¿&¹&À#Ó-FÑ*ˆ�˜ 7Ø�}‰}ŒÜÐ"Ô#Ø�q‰LˆGØä˜!˜W f¨h¸Ô@Ø�Q‰JˆEÜ�Dœ˜WŸ]™]›_Ó-Ð.¨dÐ3Õ4à�q‰LˆGÜÐ0Ô1ä�
‰
�3�ð9ô< 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôM ò Úðûô" ò 	Ü�D˜˜�*ÔÜ�J‰J�qŒMÝûð	ús+   ÁA;H Ä'HÈ	HÈHÈ	IÈ#IÉIÚ__main__)Ú__doc__r
   ÚsysrN   r™   r   r   ÚrequestsÚbs4r   Úurllib.parser   r,   rG   r}   ÚCATEGORYr~   r�   ÚHEADERSÚSessionrF   ÚheadersÚupdater   r5   r_   rw   r’   r£   Ú__name__© r   r   ú<module>r±      sº   ðñó 
Û 
Û Û Û Ý ã Ý Ý  ð (€ØÐ-Ñ-€Ø#€	Ø€Ø€Ø
€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò!òJ/òf00òh)òZ9ðx ˆzÒÙ…Fð r   