Ë
    Í«£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Zddl	Zddl
mZ ddlZdZedz   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 e!dk(  r e «        yy)u;   æ°¸ç™»åŽ¿äººæ°‘æ”¿åºœ - æ³•å®šä¸»åŠ¨å…¬å¼€å†…å®¹ (col16682)é    N)ÚBeautifulSoupzhttps://www.yongdeng.gov.cnz/col/col16682/index.htmlu"   æ°¸ç™»åŽ¿-æ³•å®šä¸»åŠ¨å…¬å¼€å†…å®¹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_yongdeng.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                  «       S )N)Úheadersé   )Útimeout)r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecode)ÚurlÚreqs     r   Úfetchr*   "   sG   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CÜ�>‰>×!Ñ! #¨rÐ!Ó2×7Ñ7Ó9×@Ñ@ÓBÐBr   c                 ó  — g }t        j                  d| t         j                  «      D ]Þ  }|j                  d«      }t	        |d«      }|j                  d«      }|sŒ4|r|j                  dd¬«      nd}|sŒN|d	   j                  «       }|j                  d
«      r	t        |z   }|j                  dd«      xs |j                  dd¬«      }|j                  d«      }	|	r|	j                  dd¬«      nd}
|j                  |||
dœ«       Œà |S )z&Extract items from the datastore CDATAz&<record><!\[CDATA\[(.*?)\]\]></record>r   r   Úlir   T©r	   Nr	   ú/Útitler
   ú ©ÚstripÚb)r/   r(   Údate)ÚreÚfinditerÚDOTALLÚgroupr   Úfindr2   r   ÚBASE_URLr   Úget_textÚappend)ÚhtmlÚitemsÚmÚrecord_htmlÚsoupr,   r   r	   r/   r3   Údate_strs              r   Úextract_items_from_pagerC   &   sö   € à€Eä�[‰[ÐBÀDÌ"Ï)É)ÓTò FˆØ—g‘g˜a“jˆä˜[¨-Ó8ˆØ�Y‰Y�t‹_ˆÙØÙ')ˆB�G‰G�C˜dˆGÔ#¨tˆÙØØ�‰y�‰Ó ˆØ�?‰?˜3ÔÜ˜d‘?ˆDØ—‘�g˜rÓ"ÒA a§j¡j°¸D jÓ&Aˆà�G‰G�C‹LˆÙ23�1—:‘:˜c¨�:Ô.¸ˆØ�‰˜u¨T¸8ÑDÕEð#Fð$ €Lr   c                 óÌ  ‡‡— t        | d«      }d}|j                  rI|j                  j                  j                  «       }t	        j
                  dd|«      j                  «       }|sQ|j                  dd¬«      }|r<|j                  dd¬	«      j                  d
«      d   j                  «       }|r|d d nd}d}|j                  dd¬«      }|r7t	        j                  d|j                  «       «      }|r|j                  d«      }|j                  dd¬«      }|s||dg dœS g }	g }
|j                  g d¢d¬«      D �]Ž  }|j                  dk(  rÒ|j                  d«      rŒ%|j                  dd¬	«      Š|j                  dd¬«      }|rn|d   Š‰j                  d«      r	t        ‰z   Št!        ˆfd„dD «       «      r;|
j#                  |j                  dd¬	«      xs ‰j                  d«      d   ‰dœ«       ‰sŒ¾t!        ˆfd„dD «       «      rŒÓ|	j#                  ‰«       Œå|j                  dk(  r't%        |t        «      }|s�Œ|	j#                  |«       �Œ|j                  dk(  s�Œ,|j'                  dd«      }|j'                  d d«      }|s�ŒT|j                  d«      r	t        |z   }|	j#                  d!|xs d"z   d#z   |z   d$z   «       �Œ‘ d%j)                  |	«      }||||
dœS )&Nr   r
   u3   æ°¸ç™»åŽ¿äººæ°‘æ”¿åºœ\s+æ³•å®šä¸»åŠ¨å…¬å¼€å†…å®¹\s*ÚdivÚ
zfxxgk_con)Úclass_r0   Tr1   u   å�‘å¸ƒæ—¥æœŸr   éÈ   u%   å�‘å¸ƒæ—¥æœŸ[ï¼š:](\d{4}-\d{2}-\d{2})r   )r/   r4   ÚcontentÚattachments)Úpr   r   )Ú	recursiverK   r   r   r-   r	   r.   c              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w©N)ÚlowerÚendswith)Ú.0ÚextÚahrefs     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>g   s"   øè ø€ Òi°s�u—{‘{“}×-Ñ-¨c×2Ñiùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxéÿÿÿÿ)Únamer(   c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wrN   © )rQ   ÚkÚtexts     €r   rT   zparse_detail.<locals>.<genexpr>k   s   øè ø€ Òc Q�q˜D”yÑcùs   ƒ)u   å½“å‰�ä½�ç½®u   é¦–é¡µu   å­—å�·u   æ‰“å�°u   å…³é—­r   r   Úaltz![Úimagez](ú)z

)r   r/   Ústringr2   r5   Úsubr9   r;   ÚsplitÚsearchr8   r   rV   Úfind_parentr   r:   Úanyr<   r   r   Újoin)r=   rA   r/   ÚtÚlinesÚ	date_textÚconr?   Úcontent_divÚpartsrJ   ÚchildÚa_tagÚtbl_htmlr   r[   rI   rS   rZ   s                    @@r   Úparse_detailrn   >   s·  ù€ Ü˜˜}Ó-€Dð €EØ‡z‚zØ�J‰J×Ñ×#Ñ#Ó%ˆä—‘ÐMÈrÐSTÓU×[Ñ[Ó]ˆÙØ�I‰I�e LˆIÓ1ˆÙØ—J‘J˜s¨$�JÓ/×5Ñ5°nÓEÀaÑH×NÑNÓPˆEÙ#(�E˜$˜3‘K¨bˆEð €IØ
�)‰)�E ,ˆ)Ó
/€CÙ
Ü�I‰IÐ>ÀÇÁÃÓOˆÙØŸ™ ›
ˆIð —)‘)˜E¨,�)Ó7€KÙØ¨	¸bÐQSÑTÐTà€EØ€Kà×%Ñ%Ò&;ÀtÐ%ÓLó IˆØ�:‰:˜ÒØ× Ñ  Ô)ØØ—>‘> #¨T�>Ó2ˆDØ—J‘J˜s¨�JÓ.ˆEÙØ˜f™�Ø×#Ñ# CÔ(Ü$ uÑ,�EÜÓiÐ>hÔiÔiØ×&Ñ&°·±¸sÈ$°Ó0OÒ0gÐSX×S^ÑS^Ð_bÓScÐdfÑSgÐpuÑ'vÔwÚäÓcÐ*bÔcÔcØØ—‘˜TÕ"Ø�Z‰Z˜7Ò"Ü)¨%´Ó:ˆHÛØ—‘˜XÖ&Ø�Z‰Z˜5Ô Ø—)‘)˜E 2Ó&ˆCØ—)‘)˜E 2Ó&ˆCÛØ—>‘> #Ô&Ü" S™.�CØ—‘˜T S¢^¨GÑ4°tÑ;¸cÑAÀCÑGÖHð7Ið: �k‰k˜%Ó €GØ I¸'ÐR]Ñ^Ð^r   c                  óÞ  — t        j                  t        «      } | j                  «       }t	        t
        «      }t        |«      }t        |«      }t        d|«       t        rt        nd}t        «       }|j                  dt        f«      D ]  }|j                  |d   «       Œ t        dt        |«      «       d}d}	d}
t        |«      D �]5  \  }}|d   }||v r|	dz  }	Œ||dz  k\  rt        d	«        �n	 t	        |«      }t        |«      }|d
   xs |d
   }|d   xs |d   }|d   }|d   }|s|
dz  }
t        d|d d «       |rt!        j"                  |d¬«      nd}t%        j&                  dd|«      }t%        j&                  dd|«      }t%        j&                  dd|«      }|d d xs |j)                  «       }|j                  d|t        ||||||f«       | j+                  «        |dz  }t        d|d d d|«       �Œ8 t        d«       t        t.        dt        d«       t        d |d!|	d"|
«       | j1                  «        y # t,        $ r}t        d|d
   d d d|«       Y d }~�Œžd }~ww xY w)#NzTotal items in datastore:éc   z.SELECT page_url FROM gov_raw WHERE site_name=?r   z	Existing:r(   r   é   z  Reached max items limitr/   r4   rI   rJ   z  WARN empty:r    F)Úensure_asciiz[]z\s+r0   z!\[.*?\]\(.*?\)r
   z\|.*?\|rH   zŒINSERT OR REPLACE INTO gov_raw (title, site_name, page_url, publish_date, content, summary, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?)z  OKú|z  ERRz)
========================================ú(r]   zNew:zSkip:zEmpty:)Úsqlite3ÚconnectÚDBÚcursorr*   ÚLIST_URLrC   ÚlenÚprintÚ_MAX_PGÚsetÚexecuteÚ	SITE_NAMEÚaddÚ	enumeratern   ÚjsonÚdumpsr5   r_   r2   ÚcommitÚ	ExceptionÚSITE_DISPLAYÚclose)ÚconnÚcr=   Ú	all_itemsÚtotal_countÚpages_to_fetchÚexistingÚrowÚ	new_countÚ
skip_countÚempty_countÚidxÚitemr(   Údetailr/   rg   rI   rJ   Úattachments_jsonÚ	text_onlyÚsummaryÚes                          r   Úmainr™   }   sq  € Ü�?‰?œ2Ó€DØ�‰‹€Aä”‹?€DÜ'¨Ó-€IÜ�i“.€KÜ	Ð
% {Ô3å '•W¨R€Nä‹u€HØ�y‰yÐIÌIÈ<ÓXò ˆØ�‰�S˜‘VÕðä	ˆ+”s˜8“}Ô%à€IØ€JØ€Kä˜yÓ)ó &7‰	ˆˆTØ�5‰kˆØ�(‰?Ø˜!‰OˆJØð ˜¨Ñ+Ò+ÜÐ-Ô.Úð	7Ü˜“:ˆDÜ! $Ó'ˆFà˜7‘OÒ4 t¨G¡}ˆEØ˜v™Ò6¨$¨v©,ˆIØ˜YÑ'ˆGØ  Ñ/ˆKáØ˜qÑ �Ü�o u¨S¨b zÔ2áNYœtŸz™z¨+ÀEÕJÐ_cÐÜŸ™˜v s¨GÓ4ˆIÜŸ™Ð1°2°yÓAˆIÜŸ™˜z¨2¨yÓ9ˆIØ   #�Ò/¨%×6Ñ6Ó8ˆGà�I‰Ið _Øœ	 3¨	°7¸GÐEUÐW`Ðaôð �K‰KŒMØ˜‰NˆIÜ�&˜%  ˜* c¨9Ö5ðI&7ôP 
ˆ/ÔÜ	Œ,˜œY¨Ô,Ü	ˆ&�)˜W j°(¸KÔHØ‡J�J…Løô ò 	7Ü�'˜4 ™=¨¨"Ð-¨s°A×6Ò6ûð	7ús   Ã6D	IÉ	I,ÉI'É'I,Ú__main__)r
   )"Ú__doc__r5   ÚsysÚosr‚   r=   Úhtml_modÚurllib.requestr   Úurllib.errorÚbs4r   ru   r:   ry   r   r†   Úenvironr   rw   r$   r|   r�   ÚargvÚir   rz   Úintr   r*   rC   rn   r™   Ú__name__rX   r   r   ú<module>r§      sÙ   ðá Aß *× *Ó *ß #Ý Û à(€ØÐ0Ñ0€Ø0€	Ø&€Ø‡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òò0=_ò~?ðB ˆzÒÙ…Fð r   