Ë
    ¸¬uj0$  ã                   óB  — 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 ej                  d«       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iZdZej(                  dd ZdZe ee«      k  r„ee   Zej1                  d«      r	  eej5                  dd«      d   «      Zn@edk(  r#edz    ee«      k  r	  eeedz      «      Zedz  Znej9                  «       r ee«      Zedz  Ze ee«      k  rŒ„dd„Zd„ Zd„ Zd„ Z d„ Z!e"dk(  r e!«        yy# e$ r Y Œ6w xY w# e$ r Y Œ_w xY w)uµ  
é“…å±±åŽ¿ç”Ÿæ€�çŽ¯å¢ƒå±€ - å…¬å‘Šå…¬ç¤º (gggs)
==================================
http://www.jxyanshan.gov.cn/ysxsthjj/gggs/yszwgk_xxgklist.shtml
UCAP CMS (createPageHTML åˆ†é¡µ, _N.shtml)
åˆ—è¡¨: ul#doclist > a[href="/ysxsthjj/gggs/YYYYMM/{uuid}.shtml"][title]
è¯¦æƒ…: meta ArticleTitle/PubDate, æ­£æ–‡ div#zoomcon (p.MsoNormal + Word è¡¨æ ¼ HTML)
é™„ä»¶: div.article-appendixs > ul.infoList (ç›¸å¯¹è·¯å¾„ urljoin è¯¦æƒ…URL ç»�å¯¹åŒ–)
é    NÚignore)ÚBeautifulSoup)Úurljoinzhttp://www.jxyanshan.gov.cnz9http://www.jxyanshan.gov.cn/ysxsthjj/gggs/yszwgk_xxgklistu%   é“…å±±åŽ¿ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šu   æ±Ÿè¥¿zcrawl_yanshan_gggs.pyz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36é   z--pages=ú=z--pagesc                 ó4  — t        |«      D ]3  }	 t        j                  | t        |¬«      }d|_        |j
                  c S  y # t        $ rK}t        d| d d ›d|›�t        j                  ¬«       ||dz
  k  rt        j                  d«       Y d }~Œ†d }~ww xY w)	N)ÚheadersÚtimeoutzutf-8z  [ERR] éZ   z: )Úfiler   é   )ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)ÚurlÚretriesr
   ÚattemptÚrÚes         ú'/root/gov_crawler/crawl_yanshan_gggs.pyÚfetchr    0   s„   € Ü˜“>ò ˆð	Ü—‘˜S¬'¸7ÔCˆAØ ˆAŒJØ—6‘6ŠMð	ð øô	 ò 	Ý c¨#¨2¢h±Ð2¼¿¹ÕDØ˜ 1™Ò$Ü—
‘
˜1”ÿøð	ús   �.AÁ	BÁABÂBc                 ó~   — t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )z2Strip entity/space prefixes and ellipsis suffixes.u   ^[\s\xa0Â·\u00b7]+Ú z\s*\.{3,}\s*$)ÚreÚsubÚstrip)Útitles    r   Úclean_titler'   =   s4   € ä�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó`  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  dd¬«      D ]r  }|d   }t        j                  d	|«      sŒt        t        |«      }|j                  d
«      xs |j                  d¬«      }|sŒW|j                  t        |«      |f«       Œt |S )z%Extract (title, url) from ul#doclist.úhtml.parserÚulÚdoclist©ÚidÚaT©Úhrefr1   z%/ysxsthjj/gggs/\d{6}/[a-f0-9]+\.shtmlr&   ©r%   )r   ÚfindÚfind_allr#   Úsearchr   ÚBASE_URLr   Úget_textÚappendr'   )ÚhtmlÚitemsÚsoupr,   r/   r1   Úfull_urlr&   s           r   Úextract_list_itemsr=   D   s³   € à€EÜ˜˜}Ó-€DØ�i‰i˜ ˆiÓ+€GÙØˆØ×Ñ˜c¨ÐÓ-ò 
5ˆØ�‰yˆä�y‰yÐAÀ4ÔHØÜœ8 TÓ*ˆà—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØØ�‰”k %Ó(¨(Ð3Õ4ð
5ð €Lr(   c           
      ób  ‡— t        | d«      }d}|j                  dddi¬«      }|r|j                  d«      r|d   }|s'|j                  dd	¬
«      }|r|j                  d¬«      }|s%|j                  d«      }|r|j                  d¬«      }t	        |«      }d}|j                  dddi¬«      }|r?|j                  d«      r.t        j                  d|d   «      }	|	rd|	j                  «       z  }|s_t        j                  d| «      }
|
rGd|
j                  d«      t        |
j                  d«      «      t        |
j                  d«      «      fz  }g }|j                  dd¬«      }|�r~|j                  dt        j                  d«      ¬
«      D ]  }|j                  «        Œ |j                  t        j                  dt
        j                  «      «      }|r|n|}|j                  d¬«      D ]õ  }|j                  dk(  r|j                  t!        |«      «       Œ-|j                  dv sŒ<|j                  dd¬«      Š‰rt#        ˆfd „d!D «       «      rkt!        |«      }|j                  dd¬«      D ]/  }|d"   sŒ	|d"   j%                  d#«      rŒt'        ||d"   «      |d"<   Œ1 |j                  t!        |«      «       ŒÐ|j                  d¬«      }|sŒå|j                  |«       Œ÷ d}|j                  dt        j                  d$«      ¬
«      }|rn|j                  dd¬«      D ]X  }|d"   }|j%                  d%«      st'        ||«      }|j                  d¬«      xs |j)                  d&«      d'   }|d(|›d)|›d*�z  }ŒZ t+        «       }g }|D ]X  }t        j,                  d+dt        j,                  d,d|«      «      }|sŒ2||v rŒ7|j/                  |«       |j                  |«       ŒZ d-j1                  |«      }|r(|j3                  «       |vr|d-z   |j3                  «       z   }d.|v rdnd/}||||fS )0zJExtract title, date, content (paragraphs 

, tables as HTML), attachments.r*   r"   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚdivÚzwtit)Úclass_Tr2   r&   ÚPubDatez(\d{4})-(\d{2})-(\d{2})z%s-%s-%su+   (\d{4})[-å¹´](\d{1,2})[-æœˆ](\d{1,2})[æ—¥]?z%s-%02d-%02dr   r   é   Úzoomconr-   z*info_ewm|qr_container|article-reldocumentsz^ucapcontent$F)Ú	recursiveÚtable)ÚprD   Úh1Úh2Úh3Úlir/   r0   c              3   óH   •K  — | ]  }|‰d    j                  «       v –— Œ y­w)r1   N)Úlower)Ú.0ÚxÚa_ins     €r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>Š   s)   øè ø€ ò  q¸a  T¨&¡\×%7Ñ%7Ó%9Ô 9ñ  qùs   ƒ")	z.pdfz.docz.docxz.xlsz.xlsxz.rarz.zipz/uploadzfiles/r1   )ÚhttpÚ
javascriptzarticle-appendixsrW   ú/éÿÿÿÿz<p><a href="z" target="_blank">z	</a></p>
z\s+ú<[^>]+>z

z<tabler   )r   r3   r   r7   r'   r#   r5   ÚgroupsÚgroupÚintr4   ÚcompileÚ	decomposeÚIr@   r8   ÚstrÚanyÚ
startswithr   ÚsplitÚsetr$   ÚaddÚjoinr%   ) r9   Úpage_urlr;   r&   Úmeta_tÚt_elÚttÚdateÚmeta_dÚmÚdmÚcontent_partsÚzoomÚnoiseÚucapÚ	containerÚelÚseg_htmlÚa2ÚtxtÚappendix_htmlÚappr/   r1   r@   ÚseenÚpartsrL   ÚkeyrC   Ú	has_tablerU   s                                   @r   Úextract_detailr€   Y   s  ø€ ä˜˜}Ó-€Dð €EØ�Y‰Y�v f¨nÐ%=ˆYÓ>€FÙ�&—*‘*˜YÔ'Ø�yÑ!ˆÙØ�y‰y˜ wˆyÓ/ˆÙØ—M‘M¨�MÓ-ˆEÙØ�Y‰Y�wÓˆÙØ—K‘K d�KÓ+ˆEÜ˜Ó€Eð €DØ�Y‰Y�v f¨iÐ%8ˆYÓ9€FÙ�&—*‘*˜YÔ'Ü�I‰IÐ0°&¸Ñ2CÓDˆÙØ §¡£
Ñ*ˆDÙÜ�Y‰YÐEÀtÓLˆÙØ! R§X¡X¨a£[´#°b·h±h¸q³kÓ2BÄCÈÏÉÐQRËÓDTÐ$UÑUˆDð €MØ�9‰9�U˜yˆ9Ó)€DÚà—]‘] 5´·±Ð<iÓ1j�]Ókò 	ˆEØ�O‰OÕð	ð
 �y‰yœŸ™Ð$4´b·d±dÓ;Ó<ˆÙ ‘D dˆ	Ø×$Ñ$¨uÐ$Ó5ò 	2ˆBØ�w‰w˜'Ò!Ø×$Ñ$¤S¨£WÕ-Ø—‘Ð@Ò@à—w‘w˜s¨�wÓ.�ÙœCó  qØ oô qô qô  # 2›w�HØ Ÿk™k¨#°D˜kÓ9ò G˜Ø˜f›:¨b°©j×.CÑ.CÐDZÕ.[Ü)0°¸2¸f¹:Ó)F˜B˜všJðGð "×(Ñ(¬¨R«Õ1àŸ+™+¨D˜+Ó1�CÚØ%×,Ñ,¨SÕ1ð#	2ð( €MØ
�)‰)�E¤"§*¡*Ð-AÓ"Bˆ)Ó
C€CÙ
Ø—‘˜c¨�Ó-ò 	[ˆAØ�V‘9ˆDØ—?‘? 6Ô*Ü˜x¨Ó.�Ø—:‘: D�:Ó)Ò@¨T¯Z©Z¸«_¸RÑ-@ˆDÙÊtÒUYÐZÑZ‰Mð	[ô ‹5€DØ€EØò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �k‰k˜%Ó €Gñ ˜×,Ñ,Ó.°gÑ=Ø˜FÑ" ]×%8Ñ%8Ó%:Ñ:ˆà Ñ(‘¨a€IØ�'˜4 Ð*Ð*r(   c                  óÊ  — g } t        «       }t        dt        dz   «      D ]»  }|dk(  r	dt        z  n
dt        |fz  }t	        |«      }|st        d|z  «        n…t        |«      }t        d|t        |«      fz  «       |D ]/  }|d   |vsŒ|j                  |d   «       | j                  |«       Œ1 t        j                  d«       |dkD  sŒ¬t        |«      dk  sŒ» n t        dt        | «      z  «       t        j                  d	d
«      }t        j                  |d¬«      }|j!                  d«       |j#                  «       }	d}
d}t%        | «      D �]F  \  }\  }}t	        |«      }|s|dz  }Œt'        ||«      \  }}}}|s|}|r1t        t)        j*                  dd|«      j-                  «       «      dk  rt        d|d d z  «       |dz  }Œ|t)        j*                  dd|«      j-                  «       d d }|	j!                  d|||||t.        t0        t2        ||f
«       |	j4                  dkD  r*|	j!                  d|	j6                  |t.        |f«       |
dz  }
n|dz  }|dz   dz  dk(  rt        d|dz   t        | «      |
fz  «       t        j                  d«       �ŒI |j9                  «        |j;                  «        t        d|
|fz  «       t        dt.        t        fz  «       y )Nr   z%s.shtmlz%s_%d.shtmlz  [SKIP] Page %d failedzPage %d: %d itemsg333333Ó?é   zTotal unique items: %dÚ	SEARCH_DBz/mnt/data/search.dbé<   )r
   zPRAGMA busy_timeout=60000r   r[   r"   é
   z  [SKIP] empty content: %sé2   éÈ   zÑINSERT OR IGNORE INTO gov_raw
                     (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, summary)
                     VALUES (?,?,?,?,?,?,?,?,?,?)zSINSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES (?,?,?,?)z  progress %d/%d (new=%d)gš™™™™™É?u   æ–°å¢ž: %d æ�¡, è·³è¿‡: %du.   ç«™ç‚¹: %s | æ �ç›®: å…¬å‘Šå…¬ç¤º | é¡µæ•°: %d)rf   r   Ú
_MAX_PAGESÚLIST_URLr    r   r=   Úlenrg   r8   r   r   ÚosÚgetenvÚsqlite3ÚconnectÚexecuteÚcursorÚ	enumerater€   r#   r$   r%   Ú	SITE_NAMEÚ
GROUP_NAMEÚSCRIPT_NAMEÚrowcountÚ	lastrowidÚcommitÚclose)Ú	items_allÚ	seen_urlsÚpager   r9   r:   Úitrƒ   ÚconnÚcÚinsertedÚskippedÚiÚ
list_titleri   r&   rC   rm   r   Úsummarys                       r   Úmainr¤   ·   sÎ  € Ø€IÜ“€IÜ�aœ a™Ó(ò ˆØ'+¨q¢yˆjœ8Ò#°mÄxÐQUÐFVÑ6VˆÜ�S‹zˆÙÜÐ+¨dÑ2Ô3ÙÜ" 4Ó(ˆÜÐ! T¬3¨u«:Ð$6Ñ6Ô7Øò 	%ˆBØ�!‰u˜IÒ%Ø—‘˜b ™eÔ$Ø× Ñ  Õ$ð	%ô 	�
‰
�3Œà�!‹8œ˜E›
 R›Ùðô" 
Ð
"¤S¨£^Ñ
3Ô4ä—	‘	˜+Ð'<Ó=€IÜ�?‰?˜9¨bÔ1€DØ‡L�LÐ,Ô-Ø�‰‹€Aà€HØ€GÜ%.¨yÓ%9ó Ñ!ˆÑ!ˆJ˜Ü�X‹ˆÙØ�q‰LˆGØÜ*8¸¸xÓ*HÑ'ˆˆw˜˜iÙØˆEÙœ#œbŸf™f Z°°WÓ=×CÑCÓEÓFÈÒKäÐ.°°s¸°Ñ;Ô<Ø�q‰LˆGØÜ—&‘&˜ R¨Ó1×7Ñ7Ó9¸$¸3Ð?ˆØ	�	‰	ð 5ð ˜X u¨g°t¼YÌ
ÔT_ÐajÐlsÐtô	vð �:‰:˜Š>Ø�I‰IÐkØ—{‘{ E¬9°gÐ>ô@à˜‰M‰Hà�q‰LˆGØ�‰E�R‰<˜1ÒÜÐ-°°Q±¼¸I»ÈÐ0QÑQÔRÜ�
‰
�3Žð5ð8 	‡K�K„MØ‡J�J„LÜ	Ð
&¨(°GÐ)<Ñ
<Ô=Ü	Ð
:¼iÌÐ=TÑ
TÕUr(   Ú__main__)rH   é   )#Ú__doc__r   r‹   r#   r   r�   ÚwarningsÚfilterwarningsr   Úbs4r   Úurllib.parser   r6   r‰   r’   r“   r”   r   rˆ   Úargvr¡   rŠ   r/   rd   r^   re   Ú
ValueErrorÚisdigitr    r'   r=   r€   r¤   Ú__name__© r(   r   ú<module>r±      si  ðñ÷ "× !Ó !Û Ø €× Ñ ˜Ô !Û Ý Ý  à(€ØF€Ø3€	Ø€
Ø%€ØÐWÐ
X€ð €
Ø
‡x�x��€|€Ø€Ø‰#ˆd‹)‚mØˆQ‰€AØ‡|�|�JÔð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆiŠ˜A ™E¡C¨£IÒ-ð	Ù˜T ! a¡%™[Ó)ˆJð 	
ˆQ‰‰Ø	
�‰ŒÙ˜“Vˆ
Øˆ�F€Að ‰#ˆd‹)ƒmó$
òòò*[+ò|<Vð~ ˆzÒÙ…Fð øðg ò 	Ùð	ûð
 ò 	Ùð	ús$   Â D Â0D ÄDÄDÄDÄD