Ë
    ¸¬ujî  ã                   óê   — d 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mZ dZ	dZ
dZdZ ej                  «        ed	¬
«      z
  j                  d«      ZdZddddœZd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u†   
å†…è’™å�¤è‡ªæ²»åŒºå�‘æ”¹å§” - é€šçŸ¥å…¬å‘Š çˆ¬è™«
https://fgw.nmg.gov.cn/xxgk/zxzx/tzgg/
TRS WCM, JS pagination, 34 pages x 15 items
é    N)ÚBeautifulSoup)ÚdatetimeÚ	timedeltaz/root/search.dbzhttps://fgw.nmg.gov.cnz&https://fgw.nmg.gov.cn/xxgk/zxzx/tzgg/u(   å†…è’™å�¤è‡ªæ²»åŒºå�‘æ”¹å§”-é€šçŸ¥å…¬å‘ŠiG  )Údaysú%Y-%m-%du   é€šçŸ¥å…¬å‘Š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)z
User-AgentÚAcceptzAccept-Languagec                  óò   — t        j                  t        dz   t        d¬«      } d| _        t        j                  d| j                  «      }|r+t        |j                  d«      «      }t        d|› d�«       |S y	)
z,Extract countPage from JS inside s_fenye divú
index.htmlé   ©ÚheadersÚtimeoutúutf-8zvar countPage\s*=\s*(\d+)é   zFound countPage = z from JSé2   )ÚrequestsÚgetÚLIST_URLÚHEADERSÚencodingÚreÚsearchÚtextÚintÚgroupÚprint)ÚrespÚmÚtotals      ú /root/gov_crawler/crawl_nmggw.pyÚget_total_pagesr!      sc   € ä�<‰<œ <Ñ/¼È"ÔM€DØ€D„Mä
�	‰	Ð.°·	±	Ó:€AÙÜ�A—G‘G˜A“J“ˆÜÐ" 5 '¨Ð2Ô3Øˆàó    c                 ó  — | dk(  r
t         dz   }nt         › d| › d�}t        j                  |t        d¬«      }d|_        t        |j                  d«      }g }|j                  d	d
¬«      }|s|S |j                  d«      D �]  }|j                  dd¬«      }|sŒ|d   }|j                  d¬«      }	t        |	«      dk  rŒ@|j                  d«      rt         › |dd › �}
n:|j                  d«      rt        › |› �}
n|j                  d«      r|}
n
t         › |› �}
d}|j                  d«      }|rGt        j                  d|j                  «       «      }|r!|j                  d«      j!                  dd«      }|j#                  |	|
|f«       �Œ |S )z•
    Parse list page. 0-indexed:
    page_num=0 -> index.html
    page_num>=1 -> index_{page_num}.html
    Returns [(title, full_url, date_str)]
    r   r
   Úindex_z.htmlr   r   r   úhtml.parserÚulÚnewsList©Úclass_ÚliÚaT)Úhrefr,   ©Ústripé   z./é   Nú/ÚhttpÚ Úspanú(\d{4}[-/]\d{1,2}[-/]\d{1,2})r   ú-)r   r   r   r   r   r   r   ÚfindÚfind_allÚget_textÚlenÚ
startswithÚBASE_URLr   r   r   ÚreplaceÚappend)Úpage_numÚurlr   ÚsoupÚitemsr&   r*   r+   r,   ÚtitleÚfull_urlÚdate_strr4   Údms                 r    Úparse_list_pagerG   )   s†  € ð �1‚}Ü˜Ñ%‰ä�
˜&  
¨%Ð0ˆä�<‰<˜¤W°bÔ9€DØ€D„MÜ˜Ÿ™ MÓ2€Dà€EØ	�‰�4 
ˆÓ	+€BÙØˆà�k‰k˜$Óó 2ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆØ—
‘
 �
Ó&ˆÜˆu‹:˜Š>Øð �?‰?˜4Ô Ü"˜ D¨¨ H :Ð.‰HØ�_‰_˜SÔ!Ü"˜ D 6Ð*‰HØ�_‰_˜VÔ$Ø‰Hä"˜ D 6Ð*ˆHð ˆØ�w‰w�v‹ˆÙÜ—‘Ð;¸T¿]¹]»_ÓMˆBÙØŸ8™8 A›;×.Ñ.¨s°CÓ8�à�‰�e˜X xÐ0Ö1ð72ð: €Lr"   c                 óº  — t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }|j                  d«      }|r|j                  d¬«      nd}t        j                  d	d
|«      j                  «       }|sd}|j                  dd¬«      }|s&|j                  dt        j                  d«      ¬«      }|s&|j                  dt        j                  d«      ¬«      }d
}|rû|j                  g d¢«      D ]  }|j                  «        Œ |j                  dd¬«      D ]  }|j                  «        Œ |j                  dd¬«      D ]  }|j                  «        Œ |j                  dd¬«      D ]  }	|	j                  «        Œ |j                  dd¬«      D ]  }
|
j                  «        Œ |j                  dd¬«      D ]  }|j                  «        Œ t        |«      }d
}|j                  d«      D ]:  }|j                  dd
«      j                  «       }|dv sŒ(|j                  dd
«      } n |s>|j                  d«      D ]*  }|j                  d«      dk(  sŒ|j                  dd
«      } n |sCt        j                   d|j
                  «      }|r!|j#                  d «      j%                  d!d"«      }|r|j%                  d!d"«      d#d$ }|||fS )%z,Get detail: (full_title, content_html, date)r   r   r   r%   rC   Tr-   u	   æ— æ ‡é¢˜u3   [-_\s]*å†…è’™å�¤è‡ªæ²»åŒºå�‘å±•å’Œæ”¹é�©å§”å‘˜ä¼š.*r3   ÚdivÚ
TRS_Editorr(   z(?i)content|article|textz(?i)zoom|content|article)Úid)ÚscriptÚstyleÚiframezarticle-share-groupz	share-boxzxl-infoÚh1zxl-titler4   ÚpageviewÚmetaÚname)ÚpublishdateÚpubdatezdc.dateÚdateÚcontentÚitempropÚdatePublishedr5   r   r1   r6   Né
   )r   r   r   r   r   r   r7   r9   r   Úsubr.   Úcompiler8   Ú	decomposeÚstrÚlowerr   r   r=   )r@   r   rA   Ú	title_tagÚ
full_titleÚcontent_divÚcontent_htmlÚtagÚshareÚinforO   ÚpvrE   rQ   rR   rF   s                   r    Úfetch_detailrg   ]   sÃ  € ä�<‰<˜¤W°bÔ9€DØ€D„MÜ˜Ÿ™ MÓ2€Dð —	‘	˜'Ó"€IÙ3<�×#Ñ#¨$Ð#Ô/À+€JÜ—‘ÐNÐPRÐT^Ó_×eÑeÓg€JÙØ ˆ
ð —)‘)˜E¨,�)Ó7€KÙØ—i‘i ¬b¯j©jÐ9TÓ.U�iÓVˆÙØ—i‘i ¬"¯*©*Ð5PÓ*Q�iÓRˆà€LÙØ×'Ñ'Ò(EÓFò 	ˆCØ�M‰M�Oð	ð !×)Ñ)¨%Ð8MÐ)ÓNò 	ˆEØ�O‰OÕð	à ×)Ñ)¨%¸Ð)ÓDò 	ˆEØ�O‰OÕð	à×(Ñ(¨°yÐ(ÓAò 	ˆDØ�N‰NÕð	à×&Ñ& t°JÐ&Ó?ò 	ˆBØ�L‰L�Nð	à×&Ñ& v°*Ð&Ó=ò 	ˆBØ�L‰L�Nð	ä˜;Ó'ˆð €HØ—‘˜fÓ%ò ˆØ�x‰x˜ Ó#×)Ñ)Ó+ˆØÐ@Ò@Ø—x‘x 	¨2Ó.ˆHÙð	ñ
 Ø—M‘M &Ó)ò 	ˆDØ�x‰x˜
Ó# Ó6ØŸ8™8 I¨rÓ2�Ùð	ñ Ü�Y‰YÐ7¸¿¹ÓCˆÙØ—x‘x “{×*Ñ*¨3°Ó4ˆHáØ×#Ñ# C¨Ó-¨c¨rÐ2ˆà�| XÐ-Ð-r"   c                  óZ  — t        j                  t        «      } | j                  «       }t	        «       }t        d|› �«       t        «       }|j                  dt        f«      D ]  }|j                  |d   «       Œ t        dt        |«      › �«       g }t        «       }t        |«      D ]“  }t        |«      }|st        d|dz   › d�«        nrd}	|D ]E  \  }
}}||v s||v rŒ|j                  |«       |r
|t        k  rŒ-|j                  |
||f«       |	dz  }	ŒG t        d|dz   › d|› d	t        |«      › d
|	› d�	«       Œ• t        dt        |«      › �«       d}t        |«      D ]á  \  }\  }
}}	 t!        |«      \  }}}|xs |}|rt        |«      t        |
«      k\  r|n|
}d}|r0	 t#        j$                  |d«      }t'        |j)                  «       «      }|j                  dt        |||||t*        df«       |j,                  dkD  r|dz  }|dz   dz  dk(  r0| j/                  «        t        d|dz   › dt        |«      › d|› �«       Œã | j/                  «        t        d|› dt        › �«       | j3                  «        y #  Y Œ­xY w# t0        $ r}t        d|› d	|› �«       Y d }~�ŒAd }~ww xY w)NzTotal pages: z.SELECT page_url FROM gov_raw WHERE site_name=?r   zExisting items in DB: z  Page r   z: 0 items (stopping)r1   z: z items, z new in rangez
Total items for detail: r   zÀINSERT OR IGNORE INTO gov_raw 
                        (site_name, title, page_url, publish_date, content, date_rank, category, summary)
                        VALUES (?, ?, ?, ?, ?, ?, ?, ?)r3   r   z  Progress: z, inserted: z  Error z
Done. Inserted z new items for )Úsqlite3ÚconnectÚDB_PATHÚcursorr!   r   ÚsetÚexecuteÚ	SITE_NAMEÚaddr:   ÚrangerG   ÚCUTOFF_DATEr>   Ú	enumeraterg   r   Ústrptimer   Ú	timestampÚCATEGORYÚrowcountÚcommitÚ	ExceptionÚclose)ÚconnÚcÚtotal_pagesÚexistingÚrowÚ	all_itemsÚ	seen_urlsÚprB   Ú	new_countrC   r@   rE   ÚinsertedÚiÚpage_urlÚ	list_dater`   rb   Údetail_dateÚ
final_dateÚfinal_titleÚ	date_rankÚdtÚes                            r    ÚmainrŽ   ˜   sÔ  € Ü�?‰?œ7Ó#€DØ�‰‹€Aä!Ó#€KÜ	ˆM˜+˜Ð
'Ô(ä‹u€HØ�y‰yÐIÌIÈ<ÓXò ˆØ�‰�S˜‘VÕðä	Ð"¤3 x£= /Ð
2Ô3à€IÜ“€Iä�;Óò [ˆÜ Ó"ˆÙÜ�G˜A˜a™C˜5Ð 4Ð5Ô6Ùàˆ	Ø$)ò 	Ñ ˆE�3˜Ø�iÑ 3¨(¡?ØØ�M‰M˜#ÔÙ˜H¤{Ò2ØØ×Ñ˜e S¨(Ð3Ô4Ø˜‰N‰Ið	ô 	�˜˜!™�u˜A˜k˜]¨"¬S°«Z¨L¸ÀÀÈ=ÐYÕZð![ô$ 
Ð&¤s¨9£~Ð&6Ð
7Ô8à€HÜ+4°YÓ+?ò .Ñ'ˆÑ'ˆE�8˜Yð	.Ü4@ÀÓ4JÑ1ˆJ˜ kØ$Ò1¨	ˆJÙ(2´s¸:³Ì#ÈeË*Ò7T™*ÐZ_ˆKàˆIÙðÜ!×*Ñ*¨:°zÓB�BÜ # B§L¡L£NÓ 3�Ið �I‰Ið ;ô   ¨h¸
ÀLÐR[Ô]eÐgiÐjôlð
 �z‰z˜AŠ~Ø˜A‘�à�A‘˜‰|˜qÒ Ø—‘”Ü˜ Q q¡S E¨¬3¨y«>Ð*:¸,ÀxÀjÐQÔRøð1.ð8 	‡K�K„MÜ	Ð˜h˜Z ´y°kÐ
BÔCØ‡J�J…Løð'Ùûô ò 	.Ü�H˜X˜J b¨¨Ð,×-Ò-ûð	.ús1   Å/6JÆ&/I>ÇA1JÉ>JÊ JÊ	J*ÊJ%Ê%J*Ú__main__)Ú__doc__r   r   ri   ÚosÚbs4r   r   r   rk   r<   r   ro   ÚnowÚstrftimerr   rv   r   r!   rG   rg   rŽ   Ú__name__© r"   r    ú<module>r—      s˜   ðñó Û 	Û Û 	Ý ß (à
€Ø#€Ø3€Ø6€	Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€Ø€ð DØOØ'ñ€òò2òh9.òvBðH ˆzÒÙ…Fð r"   