Ë
    LcTj  ã                   ó<  — 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m	Z	 ddl
m
Z
 dZdZdZd	Zd
dddœZdZd#d„Zd„ Zd„ Zd„ Zd„ Zd$d„Zedk(  rËdZdej2                  v rKej2                  j5                  d«      Zedz    eej2                  «      k  r eej2                  edz      «      Z ee«      \  ZZZ Z!Z" e#d«        e#de› d�«        e#de › de ez  dz  d›d�«        e#d e› deez  dz  d›d�«        e#d!e! e$e d«      z  d›�«        e#d"e"› �«       yy)%u.  
é„‚å°”å¤šæ–¯å¸‚äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Šçˆ¬è™«
URL: http://www.ordos.gov.cn/xw_127672/gsgg/
CMS: TRS
List: ul.yzgl_right_list > li > a[href] + span
Detail: div.xl_bt (title), div.xl_time (date), div.TRS_Editor (content)
Pagination: index.html (p1), index_1.html (p2)...index_6.html (p7) 13/page ~91
é    N)Úurljoin)ÚBeautifulSoup)Údatetimez/root/search.dbz&http://www.ordos.gov.cn/xw_127672/gsggu   é„‚å°”å¤šæ–¯å¸‚-å…¬ç¤ºå…¬å‘Šu	   å†…è’™å�¤zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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é   c                 ót   — t        j                  | t        |¬«      }d|_        t	        |j
                  d«      S )N)ÚheadersÚtimeoutzutf-8zhtml.parser)ÚrequestsÚgetÚHEADERSÚencodingr   Útext)Úurlr
   Úrs      ú/root/crawl_ordos_gsgg.pyÚget_soupr       s,   € Ü�‰�S¤'°7Ô;€AØ€A„JÜ˜Ÿ™ Ó/Ð/ó    c                 óN   — | j                  d«      }|r|j                  d¬«      S y)Nz	div.xl_btT©ÚstripÚ )Ú
select_oneÚget_text)ÚsoupÚdivs     r   Úextract_titler   %   s'   € Ø
�/‰/˜+Ó
&€CÙ
Ø�|‰| $ˆ|Ó'Ð'Ør   c                 ó¸   — | j                  d«      }|rGt        j                  d|j                  «       «      }|r!|j	                  d«      j                  dd«      S y)Nzdiv.xl_timeu2   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}[-/]\d{1,2}[-/]\d{1,2})é   ú/ú-r   )r   ÚreÚsearchr   ÚgroupÚreplace)r   Útime_divÚms      r   Úextract_dater(   +   sN   € Ø�‰˜}Ó-€HÙÜ�I‰IÐKÈX×M^ÑM^ÓM`ÓaˆÙØ—7‘7˜1“:×%Ñ% c¨3Ó/Ð/Ør   c                 ó|  ‡— | j                  d«      }|s| j                  d«      }|sdg fS |j                  ddg«      D ]  }|j                  «        Œ g }g }t        |j                  «      D �]  }|j
                  €$|j                  «       }|r|j                  |«       Œ4|j
                  j                  «       }|dk(  r(|j                  dd¬	«      }|sŒi|j                  |«       Œ{|d
k(  r-|j                  d
«      rŒ’|j                  t        |«      «       Œ­|dv sŒ²|j                  d
d¬«      }|r|j                  t        |«      «       Œâ|j                  dd¬	«      }|sŒø|j                  |«       �Œ |j                  dd¬«      D ]œ  }	|	d   }
t        j                  d|
t        j                  «      sŒ.t!        t"        › d�|
«      Š|	j                  d¬	«      xs t$        j&                  j)                  ‰«      }t+        ˆfd„|D «       «      rŒ‰|j                  ‰|dœ«       Œž dj-                  |«      |fS )u   ä»Ž div.TRS_Editor æ��å�–æ­£æ–‡zdiv#article div.TRS_Editorzdiv.xl_zw div.TRS_Editorr   ÚscriptÚstyleÚpú
Tr   Útable)r   ÚsectionF©Ú	recursiveÚa©Úhrefr4   z&\.(doc|docx|xls|xlsx|pdf|zip|rar|txt)$r    c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r   N© )Ú.0ÚxÚfull_urls     €r   ú	<genexpr>z"extract_content.<locals>.<genexpr>b   s   øè ø€ ÒA°�q˜‘x 8Õ+ÑAùs   ƒ)r   Útitleú

)r   Úfind_allÚ	decomposeÚlistÚchildrenÚnamer   ÚappendÚlowerr   Úfind_parentÚstrÚfindr"   r#   ÚIr   ÚBASE_URLÚosÚpathÚbasenameÚanyÚjoin)r   ÚeditorÚsÚpartsÚattachmentsÚelÚtxtÚtagÚtblr2   r4   r;   r9   s               @r   Úextract_contentrV   3   sú  ø€ à�_‰_Ð9Ó:€FÙØ—‘Ð!;Ó<ˆÙØ�2ˆvˆà�_‰_˜h¨Ð0Ó1ò ˆØ	�‰�ðð €EØ€Kä�6—?‘?Ó#ó &ˆØ�7‰7ˆ?Ø—(‘(“*ˆCÙØ—‘˜SÔ!ØØ�g‰g�m‰m‹oˆØ�#Š:Ø—+‘+˜d¨$�+Ó/ˆCÙØØ�L‰L˜ÕØ�GŠ^Ø�~‰~˜gÔ&ØØ�L‰Lœ˜R›Õ!ØÐ&Ò&à—'‘'˜'¨U�'Ó3ˆCÙØ—‘œS ›XÕ&à—k‘k $¨d�kÓ3�ÚØ—L‘L Ö%ð1&ð6 �_‰_˜S tˆ_Ó,ò FˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKÜ¤( ¨1˜~¨tÓ4ˆHØ—J‘J T�JÓ*ÒH¬b¯g©g×.>Ñ.>¸xÓ.HˆEäÓA°[ÔAÕAØ×"Ñ"¨8¸eÑ#DÕEðFð �;‰;�uÓ˜{Ð*Ð*r   c                 óæ  — | dk(  r
t         › d�}nt         › d| dz
  › d�}t        d|› �«       t        |«      }g }|j                  d«      }|st        d«       |S |j	                  dd	¬
«      D ]�  }|j                  dd¬«      }|sŒ|d   }|j                  d¬«      }|sŒ3|j                  d«      }	|	r|	j                  d¬«      nd}
t        t         › d�|«      }|j                  |||
dœ«       Œƒ |S )u   çˆ¬å�–å�•é¡µåˆ—è¡¨r   z/index.htmlz/index_z.htmlu     åˆ—è¡¨é¡µ: zul.yzgl_right_listu'     Ã— æœªæ‰¾åˆ°åˆ—è¡¨ ul.yzgl_right_listÚliFr0   r2   Tr3   r4   r   Úspanr   r    )r   r;   Údate)	rH   Úprintr   r   r=   rF   r   r   rB   )Úpage_numr   r   ÚitemsÚulrX   r2   r4   r;   rY   Údate_strr9   s               r   Ú
crawl_pager`   f   s  € à�1‚}Ü�
˜+Ð&‰ä�
˜' (¨1¡* ¨UÐ3ˆä	ˆM˜#˜Ð
Ô Ü�C‹=€DØ€Eà	�‰Ð-Ó	.€BÙÜÐ7Ô9Øˆà�k‰k˜$¨%ˆkÓ0ò ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆØ—
‘
 �
Ó&ˆÙØà�w‰w�v‹ˆÙ04�4—=‘= t�=Ô,¸"ˆäœh˜Z q˜>¨4Ó0ˆØ�‰ØØØñ
õ 	ðð$ €Lr   c                 ó&  — t        j                  t        «      }|j                  «       }t	        | t
        «      }d}d}d}d}d}t        d|dz   «      D �]k  }	t        |	«      }
|
D �]W  }|dz  }t        d|› d|d   d d › d�«       	 t        |d   «      }t        |«      xs |d   }t        |«      xs |d	   }t        |«      \  }}|rt        |j                  d
«      «      nd}|j                  «       rdnd}|rt!        |D �cg c]  }|d   ‘Œ	 c}«      nd}dj#                  |D �cg c]  }d|d   › d|d   › d�‘Œ c}«      }|}|r|d
|z   z  }|j%                  d|d   t&        ||r|j)                  dd«      nd||r|d d nd||f«       |j+                  «        |r|dz  }n|dz  }||z  }|t        |«      z  }�ŒZ �Œn |j/                  «        |||||fS c c}w c c}w # t,        $ r$}t        d|d   › d|› �«       |dz  }Y d }~�Œ§d }~ww xY w)Nr   r   z  [z] r;   é(   z...r   rZ   r<   r   r-   ú[z](ú)z´INSERT OR REPLACE INTO gov_raw
                    (page_url, site_name, title, date_rank, content, summary, publish_date, attachments)
                    VALUES (?,?,?,?,?,?,?,?)r!   éÈ   u     Ã— è¯¦æƒ…é¡µé”™è¯¯: z - )Úsqlite3ÚconnectÚDB_PATHÚcursorÚminÚTOTAL_PAGESÚranger`   r[   r   r   r(   rV   ÚlenÚsplitr   rE   rM   ÚexecuteÚ	SITE_NAMEr%   ÚcommitÚ	ExceptionÚclose)Ú	max_pagesÚconnÚcÚ
page_countÚtotalÚemptyÚhas_bodyÚtotal_segmentsÚtotal_attachmentsr,   r]   ÚitemÚdetail_soupr;   rZ   ÚcontentrQ   ÚsegmentsÚhas_body_flagr2   Úattachments_jsonÚattachments_strÚcontent_with_attachmentsÚes                           r   Úcrawlr†   Š   s[  € Ü�?‰?œ7Ó#€DØ�‰‹€AÜ�Y¤Ó,€JØ€EØ€EØ€HØ€NØÐä�1�j 1‘nÓ%ó ,ˆÜ˜1“ˆØó *	ˆDØ�Q‰JˆEÜ�C˜�w˜b  g¡¨s°Ð!3Ð 4°CÐ8Ô9ð'Ü& t¨E¡{Ó3�Ü% kÓ2ÒC°d¸7±m�Ü# KÓ0Ò@°D¸±L�Ü'6°{Ó'CÑ$�˜á9@œ3˜wŸ}™}¨VÓ4Ô5Àa�Ø%,§]¡]¤_¡¸!�áMX¤3¸KÖ'H°q¨¨'«
Ò'HÔ#IÐ^`Ð Ø"&§)¡)ÐT_Ö,`Èq¨q°°7±°¸B¸qÀ¹x¸jÈÒ-JÒ,`Ó"a�à+2Ð(Ù"Ø,°¸Ñ0HÑHÐ,à—	‘	ð 0ð ˜‘KÜØÙ-1�D—L‘L  bÔ)°rØ,Ù%,�G˜D˜S‘M°"ØØ$ð	2ôð —‘”á Ø ‘M‘Hà˜Q‘J�EØ (Ñ*�Ø!¤S¨Ó%5Ñ5Ò!òM*	ð,ð\ 	‡J�J„LØ�%˜ >Ð3DÐDÐDùòC (IùÚ,`øô6 ò ÜÐ.¨t°E©{¨m¸3¸q¸cÐBÔCØ˜‘
–ûðús8   ÂA=G#ÄGÄG#Ä'GÄ=A?G#Ç
G#Ç#	HÇ,HÈHÚ__main__z--pagesr   u)   
===== é„‚å°”å¤šæ–¯å¸‚ çˆ¬å�–å®Œæˆ� =====u   å…±çˆ¬å�–: u    æ�¡u   æœ‰æ­£æ–‡: u    æ�¡ (éd   z.1fz%)u   ç©ºæ­£æ–‡: u   å¹³å�‡æ®µè�½æ•°: u   é™„ä»¶æ•°: )é   )r   )%Ú__doc__r   r"   rf   ÚsysrI   Úurllib.parser   Úbs4r   r   rh   rH   rp   ÚGROUPr   rk   r   r   r(   rV   r`   r†   Ú__name__rt   ÚargvÚindexÚidxrm   Úintrx   ry   rz   r{   r|   r[   Úmaxr6   r   r   ú<module>r•      su  ðñó Û 	Û Û 
Û 	Ý  Ý Ý à
€Ø3€Ø*€	Ø€ð DØOØ0ñ€ð
 €ó0ò
òò1+òf"óH9Eðv ˆzÒØ€IØ�C—H‘HÑØ�h‰h�n‰n˜YÓ'ˆØ�‰7‘S˜Ÿ™“]Ò"Ù˜CŸH™H S¨1¡WÑ-Ó.ˆIá@EÀiÓ@PÑ=€Eˆ5�(˜NÐ,=Ù	Ð6Ô8Ù	ˆK˜�w˜dÐ
#Ô$Ù	ˆK˜�z ¨°©°sÑ(:¸3Ð'?¸rÐ
BÔCÙ	ˆK˜�w˜f U¨5¡[°¡_°SÐ$9¸Ð
<Ô=Ù	Ð˜n©S°¸!«_Ñ<¸SÐAÐ
BÔCÙ	ˆKÐ)Ð*Ð
+Õ,ð r   