Ë
    9JŠjƒ  ã                   ó˜  — 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Z
dZdZdZd	Zd
dddœZdZd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zdefd„Zedk(  rxdej2                  v ZerdneZdej2                  v rKej2                  j9                  d«      Zedz    eej2                  «      k  r eej2                  edz      «      Z eee¬«       yy)u�   
å‘¼å’Œæµ©ç‰¹å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯å¢ƒä¿¡æ�¯å…¬å¼€
http://ztpd.nmgnews.com.cn/hhhtsh/hjxxgk/index.shtml
å†…è’™å�¤æ–°é—»ç½‘ CMS (è‡ªå®šä¹‰)
é    N)ÚBeautifulSoup)Úurljoinz/root/search.dbu"   å‘¼å’Œæµ©ç‰¹å¸‚-çŽ¯å¢ƒä¿¡æ�¯å…¬å¼€u	   å†…è’™å�¤z)http://ztpd.nmgnews.com.cn/hhhtsh/hjxxgk/é   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-Languagez›INSERT OR IGNORE INTO gov_raw 
    (site_name, page_url, title, publish_date, summary, content, category, attachments)
    VALUES (?, ?, ?, ?, '', ?, ?, ?)c                  ó|   — dd l } | j                  t        «      }|j                  d«       |j                  d«       |S )Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)r   Úconns     ú/root/gov_crawler/crawl_nmg.pyÚinit_dbr      s2   € ÛØ�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 óL   — t        j                  | t        |¬«      }d|_        |S )N)ÚheadersÚtimeoutzutf-8)ÚrequestsÚgetÚHEADERSÚencoding)Úurlr   Úrs      r   Úfetchr   $   s    € Ü�‰�S¤'°7Ô;€AØ€A„JØ€Hr   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_markdownr   *   s   € äˆu‹:Ðr   c                 óü   — g }| j                  dd¬«      }|r/|D ])  }|j                  dd¬«      }|sŒ|j                  |«       Œ+ n&| j                  dd¬«      }|r|j                  |«       dj                  |«      S )z8Extract text preserving <p> boundaries as 

 separators.ÚpT)Ú	recursiveú ©Ústripú

)Úfind_allÚget_textÚappendÚjoin)ÚelementÚpartsÚinner_psr!   Útxts        r   Úextract_text_paragraphsr/   .   s„   € à€EØ×Ñ ¨tÐÓ4€HÙØò 	"ˆAØ—*‘*˜S¨�*Ó-ˆCÚØ—‘˜SÕ!ñ	"ð
 ×Ñ˜s¨$ÐÓ/ˆÙØ�L‰L˜ÔØ�;‰;�uÓÐr   c                 ó®  — | dk(  r
t         dz   }nt         › d| › �}	 t        |«      }|j                  dk7  rt        d	|j                  › d
| › �d¬«       g S t        |j                  d«      }g }|j                  d«      D �]  }|j                  d«      D ]ô  }|j                  d«      }t        |«      dk\  sŒ#|d   j                  dt        j                  d«      ¬«      }	|	sŒO|	j                  dd«      j                  «       }
|	j                  d¬«      }t        j                  dd|«      j                  «       }|r|
sŒ«t!        t         |
«      }t        |«      dkD  r|d   j                  d¬«      nd}|j#                  |||dœ«       Œö �Œ t        d| › dt        |«      › d�d¬«       |S # t        $ r}t        d| › d|› �d¬«       g cY d }~S d }~ww xY w)Né   zindex.shtmlzindex.shtml?page=z  [ERROR] Page ú: T©ÚflushéÈ   z  [ERROR] HTTP z page úhtml.parserr   ÚtrÚtdé   r   Úazsystem/\d{4}©Úhrefr<   Ú r$   u   ^[\sâ€¢\xa0Â·]+)Útitler   Údateú  Page z items)ÚBASE_URLr   Ú	ExceptionÚprintÚstatus_coder   Útextr'   ÚlenÚfindÚreÚcompiler   r%   r(   Úsubr   r)   )Úpage_numr   r   ÚeÚsoupÚitemsr   r7   ÚtdsÚa_titler<   r>   Úfull_urlÚdate_strs                 r   Úextract_list_pagerS   >   sÊ  € Ø�1‚}Ü˜Ñ&‰ä�
Ð+¨H¨:Ð6ˆðÜ�#‹Jˆð 	‡}�}˜ÒÜ� §¡˜¨f°X°JÐ?ÀtÕLØˆ	ä˜Ÿ™ Ó/€DØ€Eð —‘˜wÓ'ó RˆØ—.‘. Ó&ò 	RˆBØ—+‘+˜dÓ#ˆCÜ�3‹x˜1‹}Ø˜a™&Ÿ+™+ c´·
±
¸?Ó0K˜+ÓL�ÙØØ—{‘{ 6¨2Ó.×4Ñ4Ó6�Ø×(Ñ(¨tÐ(Ó4�äŸ™Ð1°2°uÓ=×CÑCÓE�Ù¡DØÜ"¤8¨TÓ2�ä:=¸c»(ÀQº,˜3˜q™6Ÿ?™?°˜?Ô6ÈB�Ø—‘ u°XÀxÑPÕQò	RðRô$ 
ˆG�H�:˜R¤ E£
˜|¨6Ð
2¸$Õ?Ø€Løô= ò Ü� ˜z¨¨A¨3Ð/°tÕ<Ø�	ûðús   œF, Æ,	GÆ5GÇ	GÇGc                 ó>  — 	 t        | «      }|j                  dk7  ry t	        |j
                  d«      }d}|j                  dd	d
i¬«      }|r$|j                  d«      r|d   j                  «       }|s;|j                  dd	di¬«      }|r$|j                  d«      r|d   j                  «       }|s%|j                  d«      }|r|j                  d¬«      }d}|j                  dd	di¬«      }|rD|j                  d«      r3|d   j                  «       }|j                  dd«      j                  «       }|s;|j                  dd	di¬«      }|r$|j                  d«      r|d   j                  «       }d}	|j                  d«      }
|
s|j                  d«      }
|
�rg }|
j                  D ]­  }|j                  €Œ|j                  j                  «       }|dk(  r(|j                  dd¬«      }|sŒE|j                  |«       ŒW|dk(  r(|j                  dd¬«      }|sŒr|j                  |«       Œ„|dk(  r t!        |«      }|sŒ—|j                  |«       Œ©|dv sŒ®Œ¯ dj#                  |«      }	t%        j&                  dd|	«      }	t%        j&                  dd|	«      j                  «       }	g }|j)                  dd¬«      D ]u  }|d   }t%        j*                  d |t$        j,                  «      sŒ.|j                  d¬«      xs |j/                  d!«      d"   }t1        | |«      }|j                  ||d#œ«       Œw t3        |	j                  «       «      d$k  r	d%| › d&|› d'�}	||	||rt5        j6                  |d(¬)«      d*œS dd*œS # t        $ r}t        d| › d|› �d¬«       Y d }~y d }~ww xY w)+Nz
  [ERROR] r2   Tr3   r5   r6   r=   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚdescriptionÚh1r$   ÚPubDatez	 00:00:00Úpublishdatezdiv.article-contentzdiv.article-mainr!   r#   Údivr   )ÚscriptÚstyleÚbrr&   z\n{3,}u$   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€å½“å‰�é¡µé�¢r:   r;   r<   z"\.(pdf|doc|docx|xls|xlsx|rar|zip)$ú/éÿÿÿÿ)rV   r   é   z<p><a href="z">u!   </a></p>
ï¼ˆæœ¬æ–‡ä¸ºPDFé™„ä»¶ï¼‰F)Úensure_ascii)r>   rY   Úpub_dateÚattachments)r   rB   rC   rD   r   rE   rG   r   r%   r(   ÚreplaceÚ
select_oneÚchildrenrV   Úlowerr)   r   r*   rH   rJ   r'   ÚsearchÚ
IGNORECASEÚsplitr   rF   ÚjsonÚdumps)r   r   rL   rM   r>   Úmtr[   rf   ÚmdÚcontent_textÚbodyr,   ÚchildÚtnr.   Úattachments_listÚa_tagÚhÚatÚfus                       r   Úextract_detailr|   f   sŽ  € ðÜ�#‹Jˆð 	‡}�}˜ÒØÜ˜Ÿ™ Ó/€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙØ�Y‰Y�v f¨mÐ%<ˆYÓ=ˆÙ�"—&‘&˜Ô#Ø�y‘M×'Ñ'Ó)ˆEÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(ˆØ×#Ñ# K°Ó4×:Ñ:Ó<ˆÙØ�Y‰Y�v f¨mÐ%<ˆYÓ=ˆÙ�"—&‘&˜Ô#Ø˜)‘}×*Ñ*Ó,ˆHð €LØ�?‰?Ð0Ó1€DÙØ�‰Ð1Ó2ˆÚØˆØ—]‘]ò 	ˆEØ�z‰zÐ!ØØ—‘×!Ñ!Ó#ˆBØ�SŠyØ—n‘n S°�nÓ5�ÚØ—L‘L Õ%Ø�u’à—n‘n S°�nÓ5�ÚØ—L‘L Õ%Ø�w’Ü& uÓ-�ÚØ—L‘L Õ$ØÐ0Ò0Øð%	ð& —{‘{ 5Ó)ˆÜ—v‘v˜i¨°Ó>ˆÜ—v‘vÐEÀrÈ<ÓX×^Ñ^Ó`ˆð ÐØ—‘˜s¨�Ó.ò =ˆØ�&‰MˆÜ�9‰9Ð:¸A¼r¿}¹}ÕMØ—‘ d�Ó+Ò?¨q¯w©w°s«|¸BÑ/?ˆBÜ˜˜a“ˆBØ×#Ñ#¨R¸Ñ$;Õ<ð=ô ˆ<×ÑÓÓ  2Ò%Ø% c U¨"¨U¨GÐ3UÐVˆð ØØÙK[”t—z‘zÐ"2ÀÔGñ	ð ð bdñ	ð øôU ò Ü�
˜3˜%˜r ! Ð%¨TÕ2Üûðús   ‚M6 Í6	NÍ?NÎNFc                 ó8  — t        dt        › d|› �d¬«       t        «       }|j                  «       }dx}x}}t	        d|dz   «      D �]"  }t        |«      }|st        d|› d�d¬«        �n|dz  }|D ]¶  }	|	d	   |	d
   |	d   }}}
|j                  d|f«       |j                  «       r|dz  }Œ;t        |«      }|€|dz  }ŒN|d	   rt        |d	   «      t        |
«      kD  r|d	   }
|d   }|d   }|j                  t        t        ||
|xs |d   |t        |f«       |dz  }| sŒ°|dk\  sŒ¶ n |j                  «        | r|dk\  rt        d|› �d¬«        nt        j                  d«       �Œ% |j                  «        t        dt        › d|› d|› d|› �d¬«       |S )Nú[z] Starting, max_pages=Tr3   r   r1   r@   z empty, stopr>   r   r?   z)SELECT id FROM gov_raw WHERE page_url = ?rY   rg   rf   é
   z  Test: stop after z] Done. Inserted=z
, Skipped=z, Pages=)rC   Ú	SITE_NAMEr   ÚcursorÚrangerS   r   Úfetchoner|   rF   Ú
INSERT_SQLÚCATEGORYÚcommitÚtimeÚsleepÚclose)Ú	test_modeÚ	max_pagesr   ÚcurÚtotal_insertedÚtotal_skippedÚpages_crawledÚpnrN   Úitemr>   r   r?   ÚdetailrY   rg   s                   r   Úcrawlr“   »   sÜ  € Ü	ˆAŒiˆ[Ð.¨y¨kÐ
:À$ÕGÜ‹9€DØ
�+‰+‹-€CØ56Ð6€NÐ6�] ]Ü�A�y 1‘}Ó%ó ˆÜ! "Ó%ˆÙÜ�G˜B˜4˜|Ð,°DÕ9ÚØ˜ÑˆØò 	ˆDØ# G™}¨d°5©k¸4À¹<˜�3ˆEØ�K‰KÐCÀcÀVÔLØ�|‰|Œ~Ø Ñ"�ØÜ# CÓ(ˆFØˆ~Ø Ñ"�ØØ�gŠ¤3 v¨g¡Ó#7¼#¸e»*Ò#DØ˜w™�Ø˜YÑ'ˆGØ  Ñ/ˆKØ�K‰Kœ
Ü˜3  tÒ'A¨v°jÑ/AØœ ;ð%ô ð ˜aÑˆNÚ˜^¨rÓ1Ùð)	ð* 	�‰ŒÙ˜¨2Ò-ÜÐ'¨Ð'7Ð8ÀÕEÙÜ�
‰
�1Žð?ð@ 	‡J�J„LÜ	ˆAŒiˆ[Ð)¨.Ð)9¸ÀMÀ?ÐRZÐ[hÐZiÐ
jÐrvÕwØÐr   Ú__main__z--testé   z--max-pagesr1   )rŠ   r‹   )é   ) Ú__doc__ro   rH   Úsysr‡   r   Úbs4r   Úurllib.parser   r
   r€   r…   rA   Ú	MAX_PAGESr   r„   r   r   r   r/   rS   r|   r“   Ú__name__ÚargvrŠ   ÚmpÚindexÚidxrF   Úint© r   r   ú<module>r£      sõ   ðñ÷
 %× $Ó $Ý Ý  à
€Ø0€	Ø€Ø6€Ø€	ð DØOØ0ñ€ð(€
ò
óòòò %òPRðj  Yó 'ðT ˆzÒØ˜CŸH™HÐ$€IÙ‰˜Y€BØ˜Ÿ™Ñ Ø�h‰h�n‰n˜]Ó+ˆØ�‰7‘S˜Ÿ™“]Ò"Ù�S—X‘X˜c A™gÑ&Ó'ˆBÙ	�I¨Ö,ð r   