Ë
    ¸¬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mZ ddl	m
Z
 dZedz   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d„Zedk(  rbdZ eej<                  «      dkD  rAej<                  dd D ]/  ZejA                  d«      sŒ	  e!ejE                  d«      d   «      ZŒ1  ee¬«       yy# e#$ r Y ŒDw xY w)uÝ   
æ–°å’ŒåŽ¿äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤ çˆ¬è™«
CMS: é˜¿å…‹è‹�åœ°åŒºè¡Œæ”¿å…¬ç½²ç½‘ (Boshan CMS)
åˆ—è¡¨: dataList JSON åµŒå…¥åœ¨HTMLä¸­ï¼ˆ10é¡µÃ—15æ�¡=150æ�¡ï¼‰
è¯¦æƒ…: h1.main_5121 æ ‡é¢˜, div.content.main_5123#zoom æ­£æ–‡
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.xjxinhe.gov.cnz/zdxx/hms/hjbh/index.htmlu   æ–°å’ŒåŽ¿äººæ°‘æ”¿åºœu   æ–°ç–†é˜¿å…‹è‹�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_hjbh.pyÚ
clean_textr   #   s'   € ÙØÜ�6‰6Ð*¨C°Ó6€DØ�:‰:‹<Ðó    c                 óˆ  — | syt        | d«      } |ddg«      D ]  }|j                  «        Œ g }|j                  D �]r  }|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«      st        ||	«      n|	}|j                  d|
› d|› d�«       �Œu dj                  |«      S )u   æ��å�–æ­£æ–‡ï¼Œè¡¨æ ¼ä¿�ç•™HTMLr   úhtml.parserÚscriptÚstyleÚpT©r
   Útable)ÚdivÚsectionÚarticle)Ú	recursiveÚimgÚsrcÚaltÚhttpz![ú](ú)z

)r   Ú	decomposeÚchildrenÚnameÚget_textÚappendÚstrÚfind_allÚfind_parentÚgetÚ
startswithr   Újoin)Úhtml_contentÚ
detail_urlÚsoupÚtagÚpartsÚchildÚtr   Útblr   r   Úfull_srcs               r   Úclean_content_htmlr4   *   s—  € áØÜ˜ }Ó5€DÙ�X˜wÐ'Ó(ò ˆØ�‰�ðà€EØ—‘ó 6ˆØ�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ÛØ;>¿>¹>È&Ô;Qœ7 :¨sÔ3ÐWZ�Ø—‘˜r #  b¨¨
°!Ð4Ö5ð/6ð0 �;‰;�uÓÐr   c                  ó  — 	 t         j                  t        d¬«      } d| _        | j                  dk7  rt        d| j                  › �«       g S | j                  }t        j                  d|t        j                  «      }|st        d«       g S t        j                  |j                  d«      «      }g }|D ]ƒ  }|j                  d	g «      D ]l  }t        |j                  d
d«      «      }|j                  dd«      }|j                  dd«      }	|r|sŒG|j                  |||	|j                  dd«      dœ«       Œn Œ… 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var\s+dataList\s*=\s*(\[.*?\]);u   åˆ—è¡¨é¡µ æœªæ‰¾åˆ°dataListé   ÚinfolistÚtitler   ÚurlÚdaytimeÚsource)r=   r>   Údater@   u   åˆ—è¡¨é¡µ: u    æ�¡ (åµŒå…¥u   é¡µ)u   åˆ—è¡¨é¡µ å¼‚å¸¸: N)Úsessionr(   ÚLIST_URLÚencodingÚstatus_codeÚprintr   r   ÚsearchÚDOTALLÚjsonÚloadsÚgroupr   r$   ÚlenÚ	Exception)ÚrespÚhtmlÚmatchÚdataÚresultÚ	page_dataÚitemr=   r>   Údate_strÚes              r   Ú
fetch_listrW   M   sn  € ðÜ�{‰{œ8¨Rˆ{Ó0ˆØˆŒØ×Ñ˜sÒ"Ü�O D×$4Ñ$4Ð#5Ð6Ô7ØˆIØ�y‰yˆä—	‘	Ð<¸dÄBÇIÁIÓNˆÙÜÐ/Ô0ØˆIÜ�z‰z˜%Ÿ+™+ a›.Ó)ˆØˆØò 	ˆIØ!Ÿ™ j°"Ó5ò �Ü" 4§8¡8¨G°RÓ#8Ó9�Ø—h‘h˜u bÓ)�ØŸ8™8 I¨rÓ2�Ù¡%ØØ—‘Ø"ØØ$Ø"Ÿh™h x°Ó4ñ	õ ñð	ô 	�œC ›K˜=¨´S¸³Y°K¸tÐDÔEØˆøÜò ÜÐ" 1 #Ð&Ô'Ø�	ûðús+   ‚A
E! Á?E! ÂCE! Å!	FÅ*E?Å9FÅ?Fc           
      ó  — t        | d«      }d}d}d}d}|j                  dd¬«      }|rt        |j                  «       «      }|j                  dd¬«      }|r7t	        j
                  d|j                  «       «      }	|	r|	j                  d	«      }|j                  dd
¬«      }
|
r_t	        j
                  d|
j                  «       «      }	|	r |	j                  d	«      j                  «       }nt        |
j                  «       «      }|j                  dd¬«      }|rä|j                  dd¬«      }|r¸|j                  dd¬«      D ]�  }|d   }t	        j
                  d|t        j                  «      sŒ.|j                  d¬«      xs |}|j                  d«      st        t        |«      n|}|j                  |j                  d|› d|› d�«      «       Œ� t        t!        |«      |«      }|st        t!        |«      |«      }||||fS )u   è§£æž�è¯¦æƒ…é¡µr   r   Úh1Ú	main_5121)Úclass_ÚliÚ
main_51221z(\d{4}-\d{2}-\d{2})r;   Ú
main_51222u   æ�¥æº�[ï¼š:]\s*(.+)r   Úzoom)ÚidÚtabcsÚaT)Úhrefrc   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r   r   z [r   z) )r   Úfindr   r#   r   rG   rK   r
   r&   ÚIr)   r   ÚBASE_URLÚreplace_withÚ
new_stringr4   r%   )rO   r>   r-   r=   Úpublish_dater@   ÚcontentrY   Údate_liÚmÚsrc_liÚzoom_divra   Úa_tagrc   Úa_textÚfull_urls                    r   Úparse_detailrr   q   sÔ  € ä˜˜}Ó-€DØ€EØ€LØ€FØ€Gð 
�‰�4 ˆÓ	,€BÙ	Ü˜2Ÿ;™;›=Ó)ˆð �i‰i˜ \ˆiÓ2€GÙÜ�I‰IÐ,¨g×.>Ñ.>Ó.@ÓAˆÙØŸ7™7 1›:ˆLð �Y‰Y�t LˆYÓ1€FÙÜ�I‰IÐ,¨f¯o©oÓ.?Ó@ˆÙØ—W‘W˜Q“Z×%Ñ%Ó'‰Fä §¡Ó 1Ó2ˆFð �y‰y˜ 6ˆyÓ*€HÙØ—‘˜e¨G�Ó4ˆÙàŸ™¨°$˜Ó7ò U�Ø˜V‘}�Ü—9‘9ÐBÀDÌ"Ï$É$ÕOØ"Ÿ^™^°$˜^Ó7Ò?¸4�FØ>B¿o¹oÈfÔ>Uœw¤x°Ô6Ð[_�HØ×&Ñ& t§¡¸¸F¸8À2ÀhÀZÈrÐ7RÓ'SÕTðUô )¬¨U«°SÓ9ˆGÙÜ(¬¨X«¸Ó<ˆGà�, ¨Ð/Ð/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)Nr>   ú'z''r=   rA   r   r@   r:   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;
Úsqlite3Tr6   )ÚinputÚcapture_outputr   r8   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)Úreplacer(   Ú	SITE_NAMEÚGROUPÚ
subprocessÚrunÚDB_PATHÚ
returncodeÚstdoutr
   ÚintÚ
ValueErrorÚstderrrF   rM   )rT   Údetail_titleÚpub_dater@   rj   Úpage_urlr=   ri   Úsource_nameÚcontent_safeÚsummaryÚ	site_nameÚsql_rawÚcombined_sqlrR   ÚoutÚrowidÚfts_sqlrV   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 | dz  }|d | }t        d| › 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    é¡µ: u    æ�¡ru   zQSELECT page_url FROM gov_raw WHERE page_url LIKE '%xjxinhe.gov.cn/zdxx/hms/hjbh%'Tr6   )rw   r   r8   r   ú
u   å·²çŸ¥URL: r>   r;   z  [ú/z] r=   é2   z...r   )Úendr7   r9   zERR u   SKIP æ— æ­£æ–‡zOK (u   å­—)u   SKIP (é‡�å¤�æˆ–å…¥åº“å¤±è´¥)g333333Ó?u   
ç»“æžœ: æ–°å¢ž u    æ�¡, è·³è¿‡ u   === å®Œæˆ� ===)rF   rW   rL   Úsetr{   r|   r}   r~   r   r
   ÚsplitrM   Ú	enumeraterB   r(   rD   ÚtimeÚsleeprr   r   r�   )Ú	max_pagesÚarticlesÚcutoffÚ
known_urlsrR   ÚaddedÚskippedÚirb   r>   ÚrrV   Úd_titleÚd_dateÚd_sourcerj   s                   r   Úmainr§   Ì   sV  € Ü	Ð5Ô7Ü‹|€HÙÜÐÔ Øð ˜‰^€FØ˜˜Ð €HÜ	ˆG�I�;˜f¤S¨£] O°4Ð
8Ô9ä“€JðÜ—‘ØœÐ!tÐuØ 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�ð7ô: 
Ð˜e˜W M°'°¸$Ð
?Ô@Ü	Ð
ÕøôI ò Úðûô  ò 	Ü�D˜˜�*ÔÜ�J‰J�qŒMÝûð	ús+   ÁA;H Ä4HÈ	HÈHÈ	IÈ'#IÉIÚ__main__r;   z--pages=ú=)rœ   )r�   )$Ú__doc__r   ÚsysrI   rš   r{   ÚrequestsÚbs4r   Úurllib.parser   rf   rC   ry   rz   r}   ÚHEADERSÚSessionrB   ÚheadersÚupdater   r4   rW   rr   r�   r§   Ú__name__ÚpagesrL   ÚargvÚargr)   r€   r˜   r�   © r   r   ú<module>r¸      s!  ðñó 
Û 
Û Û Û ã Ý Ý  ð (€ØÐ1Ñ1€Ø#€	Ø€Ø
€ð ð  Dð€ð ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò òF!òH-0ò`(óV8ðv ˆzÒØ€EÙ
ˆ3�8‰8ƒ}�qÒØ—8‘8˜A˜B�<ò 	ˆCØ�~‰~˜jÕ)ðÙ §	¡	¨#£¨qÑ 1Ó2‘Eð	ñ 	�5Öð øð "ò Ùðús   Â8CÃC'Ã&C'