Ë
    Í«£jH   ã                   ó”  — 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
Z
dZedz   ZdZdZdZej                   j#                  d	d
«      ZddiZdZ eej,                  «      D ]=  \  ZZedk(  sŒedz    eej,                  «      k  sŒ% eej,                  edz      «      Z n dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"dk(  r e!«        yy)u$   å�—æ˜Œå¸‚äººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤é    N)ÚBeautifulSoupzhttps://www.nc.gov.cnz#/ncszf/hjbh02/2021zfxxgk_list.shtmlu   å�—æ˜Œå¸‚-çŽ¯å¢ƒä¿�æŠ¤u   å�—æ˜Œå¸‚äººæ°‘æ”¿åºœu   çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z--pagesé   c                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r	   r   r   s           úcrawl_nanchang.pyÚhtml_table_to_htmlr      sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                 ó<  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |d¬«      j                  «       j                  dd¬«      S # t        $ r+}t        d| › d|› �t        j                  ¬	«       Y d }~y
d }~ww xY w)N)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsz[WARN] fetch failed: ú - ©Úfiler
   )r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r   Úfetchr4   #   sƒ   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   §?A' Á'	BÁ0!BÂBc                 ó0   — | dk(  rt         S t        › d| › d�S )Nr   z/ncszf/hjbh02/2021zfxxgk_list_z.shtml)ÚLIST_URLÚBASE_URL)Úpages    r   Úget_list_urlr9   +   s"   € Øˆq‚yÜˆÜˆZÐ5°d°V¸6ÐBÐBr   c                 ó¼  — t        | d«      }g }|j                  d«      D ]¹  }|j                  dd¬«      }|sŒ|d   j                  «       }|j	                  dd«      xs |j                  d¬	«      }|j                  d
d¬«      }|r|j                  d¬	«      nd}|r|j                  d«      s	t        |z   }|j                  |j                  «       ||dœ«       Œ» |S )Nr   zul.pageList.newsList > lir   T©r	   r	   Útitler
   ©ÚstripÚspanÚtime)Úclass_r   )r<   r1   Údate)	r   ÚselectÚfindr>   r   Úget_textr   r7   Úappend)	ÚhtmlÚsoupÚitemsÚlir   r	   r<   r?   Ú	date_texts	            r   Úextract_itemsrL   0   sÓ   € Ü˜˜}Ó-€DØ€EØ�k‰kÐ5Ó6ò 
OˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆØ�w‰w�v fˆwÓ-ˆÙ15�D—M‘M¨�MÔ-¸2ˆ	Ù˜Ÿ™¨Ô/Ü˜d‘?ˆDØ�‰˜uŸ{™{›}°TÀ9ÑMÕNð
Oð €Lr   c                 ó´  — t        j                  d| «      }|rt        |j                  d«      «      S t	        | d«      }d}|j                  d«      D ]ƒ  }|j                  dd«      }|j                  d¬«      }|j                  «       rt        |«      }||kD  r|}t        j                  d	|«      }|sŒbt        |j                  d«      «      }||kD  sŒ‚|}Œ… |S )
NzcreatePageHTML[^,]+,\s*(\d+)r   r   zdiv#page_div a[href]r	   r
   Tr=   z_(\d+)\.shtml)	ÚreÚsearchÚintÚgroupr   rC   r   rE   Úisdigit)rG   ÚmrH   Úmax_pr   r	   ÚtextÚps           r   Úget_total_pagesrW   @   sÈ   € Ü
�	‰	Ð1°4Ó8€AÙÜ�1—7‘7˜1“:‹ÐÜ˜˜}Ó-€DØ€EØ�[‰[Ð/Ó0ò ˆØ�u‰u�V˜RÓ ˆØ�z‰z ˆzÓ%ˆØ�<‰<Œ>Ü�D“	ˆAØ�5ŠyØ�Ü�I‰IÐ&¨Ó-ˆÚÜ�A—G‘G˜A“J“ˆAØ�5‹yØ‘ðð €Lr   c                 ó.  ‡— t        | d«      }d}|j                  d«      }|r|j                  d¬«      }|s;|j                  dddi¬	«      }|r$|j	                  d
«      r|d
   j                  «       }|sU|j                  rI|j                  j                  j                  «       }t        j                  dd|«      j                  «       }d}|j                  dddi¬	«      }|r=|j	                  d
«      r,t        j                  d|d
   «      }|r|j                  d«      }|j                  d«      }	|	s|j                  d«      }	|	s%t        d|› �t        j                  ¬«       ||dg dœS g }
g }|	j                  g d¢d¬«      D �]:  }|j                   dk(  r|j#                  d«      rŒ%|j                   dk(  r|j#                  d«      rŒF|j                   dk(  �r|j                  dd¬«      }|j                  dd¬«      D ]Ò  }|d   j                  «       }t        j                  d|t        j$                  «      sŒ<|j                  d¬«      xs |j	                  dd«      }|j'                  d«      r	t(        |z   n-|j'                  d«      s|j+                  dd«      d    dz   |z   n|Št-        ˆfd!„|
D «       «      rŒ¿|
j/                  |‰d"œ«       ŒÔ |s�ŒU|j/                  |«       �Œh|j                   dk(  r#t1        ||«      }|s�Œ‡|j/                  |«       �Œš|j                   d#k(  s�Œ«|j	                  d$d«      }|j	                  d%d«      }|s�ŒÓ|j'                  d«      r	t(        |z   n-|j'                  d«      s|j+                  dd«      d    dz   |z   n|}|j/                  |r	d&|› d'|› d(�nd)|› d(�«       �Œ= t3        «       }g }|
D ]/  }|d*   |vsŒ|j5                  |d*   «       |j/                  |«       Œ1 ||d+j7                  |«      |dœS ),Nr   r
   zdiv.article-titleTr=   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentu    \s*-\s*å�—æ˜Œå¸‚äººæ°‘æ”¿åºœ\s*$ÚPubDatez(\d{4}-\d{2}-\d{2})r   z(div.article-content.article-content-bodyzdiv.detail_mainz[WARN] No content: r%   )r<   rB   r]   Úattachments)rV   r   r   )Ú	recursiverV   r   ú r   r;   r	   z\.(pdf|docx?|xlsx?|zip|rar)$Údownloadú/r   r   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r1   N© )Ú.0ÚattÚahrefs     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>{   s   øè ø€ ÒJ°s˜s 5™z¨UÕ2ÑJùs   ƒ)r<   r1   r   r   Úaltz![z](ú)z![](r1   z

)r   Ú
select_onerE   rD   r   r>   r<   ÚstringrN   ÚsubrO   rQ   r.   r/   r0   r   rZ   Úfind_parentÚIr   r7   ÚrsplitÚanyrF   r   ÚsetÚaddÚjoin)rG   r1   rH   r<   Út_divrY   rK   Ú	meta_daterS   Úbodyr_   ÚpartsÚelrU   r   r	   ÚatitleÚtbl_htmlr   rj   ÚseenÚuarg   rh   s                          @r   Úparse_detailr   T   sÞ  ø€ Ü˜˜}Ó-€DØ€EØ�O‰OÐ/Ó0€EÙØ—‘ T�Ó*ˆÙØ�y‰y˜¨°Ð'?ˆyÓ@ˆÙ�D—H‘H˜YÔ'Ø˜‘O×)Ñ)Ó+ˆEÙ�T—Z’ZØ—
‘
×!Ñ!×'Ñ'Ó)ˆÜ—‘Ð:¸BÀÓF×LÑLÓNˆØ€IØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ü�I‰IÐ,¨i¸	Ñ.BÓCˆÙØŸ™ ›
ˆIØ�?‰?ÐEÓF€DÙØ�‰Ð0Ó1ˆÙÜÐ# C 5Ð)´·
±
Õ;Ø¨	¸bÐQSÑTÐTØ€KØ€EØ�m‰mÒ1¸TˆmÓBó KˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9ØØ�7‰7�c‹>Ø—;‘;˜s¨$�;Ó/ˆDØ—[‘[ ¨4�[Ó0ò L�Ø˜‘y—‘Ó(�Ü—9‘9Ð<¸dÄBÇDÁDÕIØŸZ™Z¨d˜ZÓ3ÒL°q·u±u¸ZÈÓ7L�FØ/3¯©¸sÔ/CœH tšOÐtx÷  uDñ  uDð  EKô  uLÈ#Ï*É*ÐUXÐZ[ÓJ\Ð]^ÑJ_ÐbeÑJeÐhlÒJlð  RV�EÜÓJ¸kÔJÕJØ#×*Ñ*°VÀEÑ+JÕKðLó Ø—‘˜TÖ"Ø�W‰W˜ÒÜ)¨"¨cÓ2ˆHÛØ—‘˜XÖ&Ø�W‰W˜ÔØ—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÛØ(+¯©°sÔ(;”h ’nÐkn×kyÑkyð  {Aô  lBÀ#Ç*Á*ÈSÐRSÓBTÐUVÑBWÐZ]ÑB]Ð`cÒBcð  HK�Ø—‘±3˜r #  b¨¨¨QÑ/¸dÀ3À%Àq¸MÖJð3Kô4 ‹5€DØ	€BØò ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø�I‰I�c�Nðð  I¸&¿+¹+ÀeÓ:LÐ]_Ñ`Ð`r   c                  ó0  — t        t        d«      «      } | s0t        dt        j                  ¬«       t        j
                  d«       t        | «      }t        d|› �t        j                  ¬«       t        r9|t        kD  r0t        dt        › dt        › d�t        j                  ¬«       t        }g }t        d|dz   «      D ]€  }t        |«      }t        d|› d	|› �t        j                  ¬«       t        |«      } | sŒ=t        | «      }t        d
t        |«      › d�t        j                  ¬«       |j                  |«       Œ‚ t        dt        |«      › �t        j                  ¬«       t        j                  t        «      }|j                  d«       |j!                  «       }dx}x}	}
|D �]p  }|j                  d|d   f«       |j#                  «       rŒ+t        |d   «      } | sŒ<t%        | |d   «      }|d   xs |d   }|d   xs |d   }|d   }|d   }t'        j(                  ddt'        j(                  dd|«      «      j+                  «       }|d d }|s|	dz  }	d}|rVt'        j,                  d|«      }|r>t/        |j1                  d«      |j1                  d«      z   |j1                  d«      z   «      }|rt3        j4                  |d¬«      nd}	 |j                  d |t6        t8        |d   |||||f	«       |j:                  dkD  r|dz  }|
t        |«      z  }
�Œs |j?                  «        |jA                  «        t        d$t6        › d%|› d&|	› d'|
› d(�	«       y # t<        $ r/}t        d!|d d" › d#|› �t        j                  ¬«       Y d }~�Œäd }~ww xY w))Nr   z[ERROR] Cannot fetch list pager%   z[INFO] Total pages: z[INFO] Limiting to z pages (--pages=rk   z[INFO] Fetching page rc   z[INFO] Found z itemsz[INFO] Total items: zPRAGMA busy_timeout = 60000r   z'SELECT id FROM gov_raw WHERE page_url=?r1   r<   rB   r]   r_   z\s+ra   z<[^>]+>r
   éÈ   z(\d{4})-(\d{2})-(\d{2})é   é   F)Úensure_asciiz[]z™INSERT OR IGNORE INTO gov_raw (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?,?)z[ERROR] DB: r    r$   z

[RESULT] z: z new, z empty, z attachments)!r4   r9   r.   r/   r0   ÚexitrW   Ú_MAX_PGÚrangerL   ÚlenÚextendÚsqlite3ÚconnectÚDBÚexecuteÚcursorÚfetchoner   rN   rn   r>   rO   rP   rQ   ÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr-   ÚcommitÚclose)rG   Útotal_pagesÚ	all_itemsÚpgr1   rI   ÚconnÚcÚ	new_countÚempty_contentÚtotal_attachmentsÚitemÚdetailr<   rK   r]   r_   ÚplainÚsummaryÚ	date_rankrS   Úatt_jsonr3   s                          r   Úmainr¥   ‘   sM  € Ü”˜a“Ó!€DÙÜÐ.´S·Z±ZÕ@Ü�‰�ŒÜ! $Ó'€KÜ	Ð   Ð
.´S·Z±ZÕ@Ý�;¤Ò(ÜÐ#¤G 9Ð,<¼W¸IÀQÐGÌcÏjÉjÕYÜˆØ€IÜ�A�{ Q‘Ó'ò  ˆÜ˜2ÓˆÜÐ% b T¨¨;¨-Ð8¼s¿z¹zÕJÜ�S‹zˆÙØÜ˜dÓ#ˆÜ�œc %›j˜\¨Ð0´s·z±zÕBØ×Ñ˜Õð ô 
Ð ¤ Y£Ð 0Ð
1¼¿
¹
ÕCÜ�?‰?œ2Ó€DØ‡L�LÐ.Ô/Ø�‰‹€AØ45Ð5€IÐ5�Ð 1Øó FˆØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<ØÜ�T˜%‘[Ó!ˆÙØÜ˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ˜]Ñ+ˆÜ—‘�v˜s¤B§F¡F¨:°r¸7Ó$CÓD×JÑJÓLˆØ˜˜�+ˆÙØ˜QÑˆMØˆ	ÙÜ—	‘	Ð4°iÓ@ˆAÙÜ §¡¨£
¨Q¯W©W°Q«ZÑ 7¸!¿'¹'À!»*Ñ DÓE�	ÙBM”4—:‘:˜k¸Õ>ÐSWˆð	FØ�I‰Ið  rØœi¬°T¸%±[À)ÈWÐV]Ð_gÐirÐsôuà�z‰z˜AŠ~Ø˜Q‘�	Ø!¤S¨Ó%5Ñ5Ð!ùð7Fð< 	‡K�K„MØ‡J�J„LÜ	ˆKœ	�{ " Y K¨v°m°_ÀHÐM^ÐL_Ð_kÐ
lÕmøô	 ò 	FÜ�L  s¨  ¨C°¨sÐ3¼#¿*¹*×EÓEûð	Fús   ËAMÍ	NÍ&$NÎNÚ__main__)r
   )#Ú__doc__rN   r/   Úosr�   Úurllib.requestr   Úurllib.errorÚbs4r   rŠ   r7   r6   r’   ÚSITE_DISPLAYr“   Úenvironr   rŒ   r)   r†   Ú	enumerateÚargvÚir   rˆ   rP   r   r4   r9   rL   rW   r   r¥   Ú__name__re   r   r   ú<module>r²      sæ   ðá *ß × ß #Ý Û à"€ØÐ;Ñ;€Ø$€	Ø&€Ø€
Ø‡Z�Z‡^�^�KÐ!2Ó3€ØÐWÐ
X€à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó
òòCò
ò ò(;aòz9nðv ˆzÒÙ…Fð r   