Ë
    V_ŠjÉ2  ã                   óÌ   — 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Z	dZ
dZdZdZd	Zd
ZddddœZg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uÙ   
ç›Šé˜³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - çŽ¯ä¿�å½±å“�è¯„ä»· çˆ¬è™«
CMS: ç›Šé˜³æ”¿åºœç«™ç¾¤è‡ªå®šä¹‰CMS
List: /yyshjbhj/3452/3467/default.htm (P1), default_{N-1}.htm (PN)
Detail: /yyshjbhj/3452/3467/content_XXXXXX.html
æ¯�é¡µ15æ�¡
é    N)ÚBeautifulSoupz/root/search.dbu+   ç›Šé˜³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯ä¿�å½±å“�è¯„ä»·u   çŽ¯ä¿�å½±å“�è¯„ä»·u   æ¹–å�—zhttp://www.yiyang.gov.cnz/yyshjbhj/3452/3467é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zzh-CN,zh;q=0.9z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8)z
User-AgentzAccept-LanguageÚAccept)
u   ã€�æ‰“å�°æœ¬é¡µã€‘u   ã€�å…³é—­çª—å�£ã€‘u   æ‰“å�°æœ¬é¡µu   å…³é—­çª—å�£u   è½¬è½½åˆ†äº«ï¼šu   æµ�è§ˆé‡�ï¼šu   ç›¸å…³é™„ä»¶ï¼šu   ç›¸å…³ç¨¿ä»¶ï¼šu   æ‰«ä¸€æ‰«åœ¨æ‰‹æœºæ‰“å¼€u	   é™„ä»¶ï¼šc                 óÖ  — | j                   }| j                  j                  dd«      }d|j                  «       v s$d|j                  «       v sd|j                  «       v r|j	                  dd¬«      S |dd	 j                  «       }d
|v sd|v sd|v r|j	                  dd¬«      S 	 |dd j	                  d«      }d|vr|j	                  dd¬«      S 	 |j	                  dd¬«      S #  Y ŒxY w)z0Handle GB2312 encoding properly using raw bytes.zContent-TypeÚ Úgb2312Úgbkz
charset=gbÚreplace)ÚerrorsNiÐ  s   gb2312s   gbks
   charset=gbiô  u   ï¿½zutf-8)ÚcontentÚheadersÚgetÚlowerÚdecode)ÚrÚrawÚctÚ	raw_lowerÚ
sample_gbks        ú&/root/gov_crawler/crawl_yiyang_hjyx.pyÚdecode_respr   #   sñ   € à
�)‰)€Cà	
�‰�‰�~ rÓ	*€BØ�2—8‘8“:Ñ ¨"¯(©(«*Ñ!4¸ÈÏÉË
Ñ8RØ�z‰z˜%¨	ˆzÓ2Ð2à�E�T�
× Ñ Ó"€IØ�IÑ ¨9Ñ!4¸ÈÑ8RØ�z‰z˜%¨	ˆzÓ2Ð2ðØ˜˜#�Y×%Ñ% eÓ,ˆ
à˜:Ñ%Ø—:‘:˜e¨I�:Ó6Ð6ð &ð
 �:‰:�g iˆ:Ó0Ð0øðÙús   Â%*C$ Ã$C(c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ÚtableÚargsÚkwargss      r   Útable_to_mdr   <   s   € äˆu‹:Ðó    c                 ó�  — g }| j                   D �]$  }t        |t        «      r%|j                  «       }|sŒ'|j	                  |«       Œ9|j
                  dk(  r¬|j                  dd«      j                  «       }|j                  d¬«      }|rc|ra|j                  d«      r|n4|j                  d«      r	t        |z   nt        dz   |j                  d«      z   }|j	                  d|› d	|› d
�«       Œß|sŒâ|j	                  |«       Œô|j
                  dv r*|j                  dd¬«      }|s�Œ|j	                  |«       �Œ,|j
                  dk(  r’|j                  dd«      }|s�ŒQ|j                  dd«      }	|j                  d«      r|n4|j                  d«      r	t        |z   nt        dz   |j                  d«      z   }
|j	                  |	r	d|	› d	|
› d
�nd|
› d
�«       �ŒÍ|j
                  dk(  r|j	                  d«       �Œït        |d«      s�Œý|j                  dd¬«      }|s�Œ|j	                  |«       �Œ' dj                  |«      S )z8Render a <p> preserving <a> links and <img> as markdown.ÚaÚhrefr   T©ÚstripÚhttpú/ú[ú](ú))ÚbÚstrongÚspanÚfontú ÚimgÚsrcÚaltú![ú![](Úbrú
Úget_text)ÚcontentsÚ
isinstancer   r#   ÚappendÚnamer   r5   Ú
startswithÚBASE_URLÚlstripÚhasattrÚjoin)Úp_tagÚ
detail_urlÚpartsÚelemÚtr!   ÚtextÚfullr/   r0   Úfull_srcs              r   Úrender_paragraphrG   @   s   € à€EØ—‘ó  ˆÜ�dœCÔ Ø—
‘
“ˆAÚØ—‘˜Q•Ø�Y‰Y˜#ÒØ—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,ˆDÙ™Ø#Ÿ™¨vÔ6‘tÐPT×P_ÑP_Ð`cÔPd¼XÈº_ÔjrÐuxÑjxÐ{÷  |Gñ  |Gð  HKó  |Lñ  kL�Ø—‘˜q   b¨¨¨aÐ0Õ1ÚØ—‘˜TÕ"Ø�Y‰YÐ9Ñ9Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–Ø�Y‰Y˜%ÒØ—(‘(˜5 "Ó%ˆCÛØ—h‘h˜u bÓ)�Ø"%§.¡.°Ô"8™3ÐQT×Q_ÑQ_Ð`cÔQd¼xÈ#º~ÔjrÐuxÑjxÐ{~÷  |Fñ  |Fð  GJó  |Kñ  kK�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTØ�Y‰Y˜$ÒØ�L‰L˜ÖÜ�T˜:Ö&Ø—‘˜c¨�Ó.ˆAÛØ—‘˜Q–ð9 ð: �8‰8�E‹?Ðr   c           	      óÌ  ‡— g }t        «       }| j                  ddg«      D ]  }|j                  «        Œ | j                  D �]Å  }|j                  €Œ|j                  j                  «       }|dk(  r!t        ||«      }|sŒ?|j                  |«       ŒQ|dk(  rA|j                  d¬«      }t        |«      dk  rŒwt        |«      }	|	sŒ…|j                  |	«       Œ—|dk(  r¹|j                  d	d
«      }
|
sŒ±t        |«      |vsŒ¿|j                  t        |«      «       |j                  dd
«      }|
j                  d«      r|
n4|
j                  d«      r	t        |
z   nt        dz   |
j!                  d«      z   }|j                  |r	d|› d|› d�nd|› d�«       �ŒU|dv �re|j                  g d¢d¬«      D �]J  }t        |«      |v rŒ|j                  t        |«      «       |j                  dk(  r!t        ||«      }|sŒJ|j                  |«       Œ\|j                  dk(  rA|j                  d¬«      }t        |«      dk  rŒŒt        |«      }	|	sŒš|j                  |	«       Œ¬|j                  dk(  sŒ¼|j                  d	d
«      }
|
sŒÑ|j                  dd
«      }|
j                  d«      r|
n4|
j                  d«      r	t        |
z   nt        dz   |
j!                  d«      z   }|j                  |r	d|› d|› d�nd|› d�«       �ŒM �Œ¿|dk(  s�ŒÆ�ŒÈ g }|D ]C  Št#        ˆfd„t$        D «       «      rŒt'        j(                  d‰«      rŒ3|j                  ‰«       ŒE dj+                  |«      S )z-Extract paragraphs + tables from content div.ÚscriptÚstyleÚpr   Tr"   é   r.   r/   r   r0   r$   r%   r1   r'   r(   r2   )ÚdivÚsectionÚcenter)rK   r   r.   )Ú	recursiveÚwbrc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0ÚskrK   s     €r   ú	<genexpr>z"extract_content.<locals>.<genexpr>¡   s   øè ø€ Ò,˜2ˆr�QŒwÑ,ùs   ƒu   ^(æ�¥æº�|å�‘å¸ƒæ—¥æœŸ)[ï¼š:]\s*z

)ÚsetÚfind_allÚ	decomposeÚchildrenr9   r   rG   r8   r5   Úlenr   r   ÚidÚaddr:   r;   r<   ÚanyÚ
SKIP_TEXTSÚreÚmatchr>   )Úcontent_divr@   rA   Ú	processedÚsÚchildÚtnÚtxtÚall_textÚmdr/   r0   rF   ÚsubÚfilteredrK   s                  @r   Úextract_contentrl   c   s_  ø€ à€EÜ“€Ià×!Ñ! 8¨WÐ"5Ó6ò ˆØ	�‰�ðð ×%Ñ%ó 2ˆØ�:‰:ÐØØ�Z‰Z×ÑÓˆà�Š9Ü" 5¨*Ó5ˆCÚØ—‘˜SÕ!à�7Š]Ø—~‘~¨D�~Ó1ˆHÜ�8‹}˜rÒ!ØÜ˜UÓ#ˆBÚØ—‘˜RÕ à�5Š[Ø—)‘)˜E 2Ó&ˆCÚ”r˜%“y¨	Ò1Ø—‘œb ›iÔ(Ø—i‘i  rÓ*�Ø"%§.¡.°Ô"8™3ÐQT×Q_ÑQ_Ð`cÔQd¼xÈ#º~ÔjrÐuxÑjxÐ{~÷  |Fñ  |Fð  GJó  |Kñ  kK�Ø—‘¹˜r #  b¨¨
°!Ñ4À4ÈÀzÐQRÐASÖTàÐ/Ò/Ø—~‘~Ò&;Àt�~ÓLó ]�Ü�c“7˜iÑ'ØØ—‘œb ›gÔ&Ø—8‘8˜s’?Ü*¨3°
Ó;�CÚØŸ™ SÕ)Ø—X‘X Ò(Ø"Ÿ|™|°$˜|Ó7�HÜ˜8“} rÒ)Ø Ü$ SÓ)�BÚØŸ™ RÕ(Ø—X‘X Ó&ØŸ'™' %¨Ó,�CÚØ!Ÿg™g e¨RÓ0˜Ø*-¯.©.¸Ô*@¡3ÐY\×YgÑYgÐhkÔYlÄxÐRUÂ~Ôrzð  ~Añ  sAð  DG÷  DNñ  DNð  ORó  DSñ  sS˜ØŸ™Á r¨#¨¨b°°
¸!Ñ%<È4ÐPXÈzÐYZÐI[Ö\ò)]ð, �5Œ[Ùðe2ðh €HØò ˆÜÓ,¤Ô,Ô,ØÜ�8‰8Ð6¸Ô:ØØ�‰˜Õðð �;‰;�xÓ Ð r   c                 óú  — g }t        «       }| j                  dd¬«      D ]Ø  }|d   }t        j                  d|t        j                  «      sŒ.|j                  d«      r
t        |z   }n,|j                  d«      st        dz   |j                  d«      z   }|j                  d¬«      xs& |j                  d«      d	   j                  d
«      d   }||vsŒ´|j                  |«       |j                  ||dœ«       ŒÚ |S )Nr    T)r!   r!   z&\.(pdf|doc|docx|xls|xlsx|rar|zip|txt)$r%   r$   r"   éÿÿÿÿú?r   )r9   Úurl)rW   rX   r`   ÚsearchÚIr:   r;   r<   r5   Úsplitr]   r8   )ÚsoupÚattsÚseenr    r!   r9   s         r   Úextract_attachmentsrw   ¬   sÝ   € Ø€DÜ‹5€DØ�]‰]˜3 Tˆ]Ó*ò 
9ˆØ�‰yˆÜ�9‰9Ð>ÀÄbÇdÁdÕKØ�‰˜sÔ#Ü $‘‘Ø—_‘_ VÔ,Ü #‘~¨¯©°CÓ(8Ñ8�Ø—:‘: D�:Ó)ÒN¨T¯Z©Z¸«_¸RÑ-@×-FÑ-FÀsÓ-KÈAÑ-NˆDØ˜4ÒØ—‘˜”Ø—‘ T°$Ñ7Õ8ð
9ð €Kr   c                 óp  — 	 t        j                  | t        d¬«      }t        |«      }t        |d«      }d}|j                  dddi¬«      }|r$|j                  d	«      r|d	   j                  «       }|s'|j                  d
d¬«      }|r|j                  d¬«      }|s|}|s%|j                  d«      }	|	r|	j                  d¬«      }d}
|j                  dddi¬«      }|r'|j                  d	«      r|d	   j                  «       d d }
|j                  d
dd¬«      }|sdD ]  }|j                  d
|¬«      }|sŒ n t        |«      }|rt        || «      }nd}t        |j                  «       «      dk  r$d| › d|› d�}|r|D ]  }|d|d   › d|d   › d�z  }Œ ||
||fS # t        $ r}d d d g fcY d }~S d }~ww xY w)Né   ©r   Útimeoutúhtml.parserr   Úmetar9   ÚArticleTitle)Úattrsr   rM   z
xr-b-title©Úclass_Tr"   ÚtitleÚPubDateé
   údetail-textÚzoom)r�   r\   )r…   zarticle-contentr   rD   z<p><a href="z">z</a></p>u   

é™„ä»¶ï¼š[r'   rp   r(   )Úrequestsr   ÚHEADERSr   Ú	Exceptionr   Úfindr#   r5   rw   rl   r[   )rp   Ú
list_titler   ÚhtmlÚert   r‚   ÚmtÚdtÚ	title_tagÚdate_strri   rb   ÚclsÚattachmentsr   r    s                    r   Úfetch_detailr”   ¿   sû  € ð$Ü�L‰L˜¤g°rÔ:ˆÜ˜1‹~ˆô ˜˜}Ó-€Dð €EØ	�‰�6 &¨.Ð!9ˆÓ	:€BÙ	ˆb�f‰f�YÔØ�9‘×#Ñ#Ó%ˆÙà�Y‰Y�u \ˆYÓ2ˆÙØ—K‘K d�KÓ+ˆEÙàˆÙØ—I‘I˜gÓ&ˆ	ÙØ×&Ñ&¨TÐ&Ó2ˆEð €HØ	�‰�6 &¨)Ð!4ˆÓ	5€BÙ	ˆb�f‰f�YÔØ�i‘=×&Ñ&Ó(¨¨"Ð-ˆð —)‘)˜E¨-¸F�)ÓC€KÙàHò 	ˆCØŸ)™) E°#˜)Ó6ˆKÚÙð	ô
 & dÓ+€KáÜ! +¨sÓ3‰àˆô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆÙØ ò E�Ø˜^¨A¨f©I¨;°b¸¸5¹¸
À!ÐDÑD‘ðEð �(˜G [Ð0Ð0øôi ò $Ø�T˜4 Ð#Õ#ûð$ús   ‚'F Æ	F5Æ%F0Æ*F5Æ0F5c                 ó\  — | dk(  rt         › t        › d�}nt         › t        › d| dz
  › d�}	 t        j                  |t        d¬«      }t        |«      }t        |d
«      }|j                  dd¬«      }|sg S g }|j                  d«      D ]÷  }|j                  d«      D ]á  }	|	j                  d«      }
|
sŒ|
j                  dd«      }|rd|vrŒ0|
j                  dd«      xs |
j                  d¬«      }|rt        |«      dk  rŒg|j                  d«      r
t         |z   }n%|j                  d«      r|}nt         › t        › d|› �}|	j                  d«      }|r|j                  d¬«      nd}|j                  |||f«       Œã Œù |S # t        $ r}t        d| › d|› �«       g cY d	}~S d	}~ww xY w)z)Extract articles from page N (1-indexed).é   z/default.htmz	/default_z.htmry   rz   ú  Page z error: Nr|   rM   zlbcc-nrr€   ÚulÚlir    r!   r   Úcontent_r‚   Tr"   r   r%   r$   r+   )r;   Ú	LIST_PATHr‡   r   rˆ   r   r‰   Úprintr   rŠ   rX   r5   r[   r:   r8   )Úpage_numrp   r   rŒ   r�   rt   Úlist_divÚarticlesr˜   r™   r    r!   r‚   Úfull_urlÚ	date_spanÚdates                   r   Úextract_list_pager£   ü   s¿  € à�1‚}Ü�
œ9˜+ \Ð2‰ô �
œ9˜+ Y¨x¸!©|¨n¸DÐAˆðÜ�L‰L˜¤g°rÔ:ˆÜ˜1‹~ˆô
 ˜˜}Ó-€Dð �y‰y˜ yˆyÓ1€HÙØˆ	à€HØ×Ñ Ó%ò 5ˆØ—+‘+˜dÓ#ò 	5ˆBØ—‘˜“ˆAÙØØ—5‘5˜ Ó$ˆDÙ˜:¨TÑ1Øà—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEÙœC ›J¨šNØð �‰˜sÔ#Ü# d™?‘Ø—‘ Ô(Ø‘ä&˜Z¬	 {°!°D°6Ð:�ð Ÿ™ ›ˆIÙ5>�9×%Ñ%¨DÐ%Ô1ÀBˆDà�O‰O˜U H¨dÐ3Õ4ñ1	5ð5ð6 €OøôO ò Ü�˜�z ¨!¨Ð-Ô.Ø�	ûðús   ¬'F Æ	F+ÆF&Æ F+Æ&F+c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r   Úinit_dbrª   3  s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó:  — |r|d d n|}t        j                  dd|«      j                  «       }|rt        j                  |d¬«      nd}t        d«      D ]Y  }	 | j                  dt        |||j                  «       |||t        |t        f
«      }	| j                  «        |	j                  d	kD  c S  y# t        j                  $ rU}
d
t        |
«      v r|dk  rt        j                   d«       Y d }
~
Œœt#        d|
› �t$        j&                  ¬«       Y d }
~
 yd }
~
ww xY w)NéÈ   z\s+r-   F)Úensure_asciiz[]é   zÕINSERT OR IGNORE INTO gov_raw
                   (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
                   VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)r   Úlockedé   z  DB error: )Úfile)r`   rj   r#   ÚjsonÚdumpsÚranger¨   Ú	SITE_NAMEÚCATEGORYÚGROUPÚcommitÚrowcountr¥   ÚOperationalErrorr   ÚtimeÚsleeprœ   ÚsysÚstderr)r©   r‚   Úpage_urlÚpublish_dater   r“   ÚsummaryÚatt_jsonÚattemptÚcurr�   s              r   Úsave_articlerÅ   :  sý   € Ù&ˆg�d�s‰m¨E€GÜ�f‰f�V˜S 'Ó*×0Ñ0Ó2€GÙ>IŒt�z‰z˜+°EÕ:Èt€HÜ˜“8ò ˆð	Ø—,‘,ð<ô ˜H h°·±³¸|Ø˜'¤8¨X´uð>ó	ˆCð �K‰KŒMØ—<‘< !Ñ#Ò#ðð" øô ×'Ñ'ò 	Øœ3˜q›6Ñ! g°¢kÜ—
‘
˜1”ÜÜ�L  Ð$¬3¯:©:Õ6Ýûð	ús   ÁAB2Â2DÃ'DÃ1DÄDc            
      óä  — t         } t        t        j                  «      dkD  r	 t	        t        j                  d   «      } t        dt        › d| › �«       t        «       }d}d}t        d| dz   «      D ]Ý  }t        |«      }|st        d|› d�«        n¿|t        |«      z  }|D ]Œ  \  }}}|r|d	k  rŒ|j                  d
|f«      }	|	j                  «       rŒ3t        ||«      \  }
}}}|
xs |}|xs |}|xs	 d|› d|› d�}|xs g }t        ||||||«      r|dz  }t        j                   d«       ŒŽ t        d|› dt        |«      › d|› d�«       Œß |j#                  «        |j%                  «        t        d|› d|› �«       y # t
        $ rb t        j                  d   dv rIt        t        j                  «      dkD  r-	 t	        t        j                  d   «      } n# t
        $ r Y nw xY wY �Œ®w xY w)Nr–   )z--max-pagesr°   z	Scraping z, max pages: r   r—   z: 0 articles (end)z
2020-01-01z)SELECT id FROM gov_raw WHERE page_url = ?r&   r'   r(   g333333Ó?z: z found, z new so farz
Done! Total found: z, New: )Ú	MAX_PAGESr[   r½   ÚargvÚintÚ
ValueErrorrœ   rµ   rª   r´   r£   r¨   Úfetchoner”   rÅ   r»   r¼   r¸   Úclose)Ú	max_pagesr©   Ú	total_newÚtotal_foundÚpnrŸ   r‚   r¿   r¢   rÄ   Ú	det_titleÚdet_dateÚdet_contentÚdet_attsÚfinal_titleÚ
final_dateÚfinal_contentÚ
final_attss                     r   ÚmainrÙ   T  s  € Ü€IÜ
Œ3�8‰8ƒ}�qÒð	ÜœCŸH™H Q™KÓ(ˆIô 
ˆI”i�[ ¨i¨[Ð
9Ô:ä‹9€DØ€IØ€Kä�A�y 1‘}Ó%ò MˆÜ$ RÓ(ˆÙÜ�G˜B˜4Ð1Ð2Ô3Ùà”s˜8“}Ñ$ˆà%-ò 	Ñ!ˆE�8˜Tá˜˜|Ò+Øð —,‘,ÐJÈXÈKÓXˆCØ�|‰|Œ~Øä9EÀhÐPUÓ9VÑ6ˆI�x ¨hØ#Ò, uˆKØ!Ò) TˆJØ'ÒI¨Q¨{¨m¸2¸h¸ZÀqÐ+IˆMØ!š RˆJä˜D +¨x¸À]ÐT^Ô_Ø˜Q‘�	ä�J‰J�s�Oð'	ô* 	�˜�t˜2œc (›m˜_¨H°Y°K¸{ÐKÕLð;Mð> 	‡K�K„MØ‡J�J„LÜ	Ð! + ¨g°i°[Ð
AÕBøô_ ò 	Ü�x‰x˜‰{Ð.Ñ.Ü”s—x‘x“= 1Ò$ðÜ$'¬¯©°©Ó$4™	øÜ%ò Ùðýð	ús5   ¤F Æ:G/Æ?GÇG/Ç	G(Ç%G/Ç'G(Ç(G/Ç.G/Ú__main__)r   )Ú__doc__r‡   r`   r²   r¥   r»   r½   Úbs4r   r§   rµ   r¶   r·   r;   r›   rÇ   rˆ   r_   r   r   rG   rl   rw   r”   r£   rª   rÅ   rÙ   Ú__name__rS   r   r   ú<module>rÞ      s¢   ðñ÷ .× -× -Ý à
€Ø9€	Ø€Ø€Ø%€Ø!€	Ø€	ð DØ'ØOñ€ò€
ò1ò2ò òFD!òRó&81òz2ònòò44Cðn ˆzÒÙ…Fð r   