Ë
    è‡zjÊ$  ã                   ó  — 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
mZ dZdZdZdZed	z   Zd
ZdZdZ ej(                  «       Zde_        ej.                  e_        ddddœZdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u”  æ¸Œå�£åŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (c18458) çˆ¬è™«
CMS: zzcms/DFS (æ ªæ´²æ”¿åºœç½‘ç«™ç¾¤)
åˆ—è¡¨: /c18458/index.html + /c18458/pages/{N}.html  15æ�¡/é¡µ, å…±149é¡µâ‰ˆ2235æ�¡
è¯¦æƒ…: /c18458/{YYYYMMDD}/i{id}.html
è¯¦æƒ…é¡µ: meta ArticleTitle/PubDate/ContentSource + div.details-content.article-content-body æ­£æ–‡
é™„ä»¶: æ­£æ–‡å¤–, å��è®®ç›¸å¯¹ //img.zhuzhou.gov.cn/zzcms/DFS/file/... (urljoin å¤„ç�†)
é    N©Úurljoin)ÚBeautifulSoupu   æ¸Œå�£åŒº-é€šçŸ¥å…¬å‘Šzcrawl_lukou_tzgg.pyu   æ¹–å�—zhttp://www.lukou.gov.cnz/c18458/index.htmlé•   z/mnt/data/search.dbz)/root/gov_crawler/lukou_tzgg_output.jsonlFzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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-Languagec                 ó´  — t        |«      D ]p  }	 t        j                  j                  | t        ¬«      }t        j                  j                  ||t        ¬«      }|j                  «       j                  dd¬«      c S  y
# t        $ rN}||dz
  k(  r't        d| › d|› �t        j                  ¬	«       Y d }~ y
t        j                  d«       Y d }~ŒÆd }~ww xY w)N)Úheaders)ÚtimeoutÚcontextzutf-8Úreplace)Úerrorsé   u     [WARN] è¯·æ±‚å¤±è´¥ z: ©ÚfileÚ g      ø?)ÚrangeÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)Úurlr
   ÚretriesÚiÚreqÚrespÚes          ú%/root/gov_crawler/crawl_lukou_tzgg.pyÚhttp_getr(   "   s¹   € Ü�7‹^ò 	ˆð	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°wÌÐ)ÓLˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ð		ð øô ò 	Ø�G˜a‘KÒÜÐ.¨s¨e°2°a°SÐ9ÄÇ
Á
ÕKÝÜ�J‰J�s�O‰Oûð		ús   �A+B Â 	CÂ	)CÂ8CÃCc                 óâ   — | j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )u:   strip &middot;&nbsp; å®žä½“å‰�ç¼€ å’Œçœ�ç•¥å�·æˆªæ–­å�Žç¼€z&middot;r   z&nbsp;õ   Â·u   ^[\s\xa0Â·\u00b7]+z\s*\.{3,}\s*$)r   ÚreÚsubÚstrip)Útitles    r'   Úclean_titler/   0   s_   € à�M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐRTÓU€EÜ�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó¦  — g }t        j                  d| «      D ]µ  }|j                  d«      |j                  d«      }}t        t        |«      }t        |j                  «       «      }t        j                  d|«      }|r7|j                  d«      › d|j                  d«      › d|j                  d«      › �nd}|sŒ¢|j                  |||f«       Œ· |S )u%   ä»Žåˆ—è¡¨é¡µæ��å�– (url, title, date)z=href="([^"]*?/c18458/\d{8}/i\d+\.html)"[^>]*>\s*([^<]{2,80})<r   é   z"/(\d{4})(\d{2})(\d{2})/i\d+\.html$ú-é   r   )	r+   ÚfinditerÚgroupr   ÚBASE_URLr/   r-   ÚsearchÚappend)	ÚhtmlÚitemsÚmÚhrefÚtr!   r.   ÚdmÚdates	            r'   Ú
parse_listrA   8   s¸   € à€Eä�[‰[ÐYÐ[_Ó`ò -ˆØ—'‘'˜!“*˜aŸg™g a›jˆaˆÜ”h Ó%ˆÜ˜AŸG™G›IÓ&ˆä�Y‰YÐ<¸dÓCˆÙ?A�"—(‘(˜1“+�˜a §¡¨£˜}¨A¨b¯h©h°q«k¨]Ñ;ÀrˆÚØ�L‰L˜#˜u dÐ+Õ,ð-ð €Lr0   c           
      ó@  ‡‡— t        | d«      }d}t        j                  d| «      }|rt        |j	                  d«      «      }|s.|j                  d«      }|rt        |j                  d¬«      «      }d}t        j                  d| «      }|r|j	                  d«      }|s)t        j                  d	| «      }|r|j	                  d«      }|j                  d
d¬«      xs( |j                  d
d¬«      xs |j                  d
d¬«      }	|	s||dg fS |	j                  g d¢«      D ]  }
|
j                  «        Œ |	j                  d
«      D ]H  }dj                  |j                  dg «      «      }d|v sd|v sd|v s	d|v sd|v sŒ9|j                  «        ŒJ |	j                  d«      D ]  }|j                  «        Œ |	j                  t        j                  dt        j                  «      ¬«      D ]  }
|
j                  «        Œ g }|j                  dd¬«      D ]®  }|d   }|j                  d¬«      }t        j                  d|«      s6d|j                  «       v s$d|j                  «       v s|j                  d «      sŒft        ‰|«      }|j                  d!«      s|j                  d"«      rd#|z   n|}|j!                  |||f«       Œ° |D ]ê  \  }}}|j#                  d|d$¬%«      }|r|n|j%                  d&«      d'   |_        |j(                  �–|j(                  j                  d)t        j                  d*«      ¬+«      D ]c  }|t+        |j(                  j,                  «      d(t+        |j(                  j,                  «      j/                  |«       v sŒT|j                  «        Œe |j1                  |«       Œì |D ��ch c]  \  }}}|’Œ
 c}}Šg }|	j                  d,¬-«      D ]ß  }|j2                  d.k(  r|j!                  t5        |«      «       Œ-|j2                  d/v r~|j                  dd¬«      }|sŒQ|j                  d.«      }t7        ˆˆfd0„|j                  dd¬«      D «       «      }|s|r|j!                  t5        |«      «       Œ§|j!                  |«       Œ¹|j                  dd¬«      }|sŒÏ|j!                  |«       Œá t9        «       }g }|D ]X  }t        j:                  d1dt        j:                  d2d|«      «      }|sŒ2||vsŒ7|j=                  |«       |j!                  |«       ŒZ d3j                  |«      }|D ]  \  }}}||vsŒ|d4|› d5|› d6�z  }Œ t        j:                  d7d|«      }t        j:                  d8d3|«      j?                  «       }||||fS c c}}w )9u/   æ��å�– (title, date, content_html, attachments)zhtml.parserr   z/<meta\s+name="ArticleTitle"\s+content="([^"]+)"r   Úh1T)r-   z5<meta\s+name="PubDate"\s+content="(\d{4}-\d{2}-\d{2})u(   å�‘å¸ƒæ—¶é—´[:ï¼š]\s*(\d{4}-\d{2}-\d{2})Údivzdetails-content)Úclass_zarticle-content-bodyzdetails-wrap)rC   Úh2Úh3ú Úclassr   ÚbackÚbfunsÚdtcodeÚewmÚstylezdisplay\s*:\s*none)rN   Úa)r=   r=   z6(?i)\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|ofd)(\?|$)ÚdownloadÚattachu   é™„ä»¶)zhttp://zhttps://z//zhttp:Ú_blank)r=   Útargetú/éÿÿÿÿNÚimgz(?i)\.(gif|png|jpg|jpeg))ÚsrcF)Ú	recursiveÚtable)ÚprD   rC   rF   rG   ÚulÚolÚlic              3   óR   •K  — | ]  }t        ‰|d    «      ‰v s|d    ‰v r|–— Œ  y­w)r=   Nr   )Ú.0rO   Úattached_hrefsÚpage_urls     €€r'   ú	<genexpr>z!extract_detail.<locals>.<genexpr>�   s8   øè ø€ ò  ØÜ˜8 Q v¡YÓ/°>ÑAØ�V‘9 Ñ.ô ñ ùs   ƒ$'ú\s+ú<[^>]+>z

z

<p><a href="z" target="_blank">z</a></p>u   æ‰“å�°æœ¬é¡µ[^\n]*z\n{3,}) r   r+   r8   r/   r6   ÚfindÚget_textÚfind_allÚ	decomposeÚjoinÚgetÚcompileÚIÚlowerÚ
startswithr   r9   Únew_tagÚsplitÚstringÚparentÚlistÚcontentsÚindexÚreplace_withÚnameÚstrÚanyÚsetr,   Úaddr-   ) r:   ra   Úsoupr.   ÚmtrC   r@   Úmpr?   ÚcmÚhÚdÚclsÚsÚattachmentsrO   r=   ÚtxtÚabs_urlÚnew_aÚsibÚ_ÚpartsÚelÚinner_tablesÚel_has_attachÚseenÚfinal_partsrZ   ÚkeyÚcontentr`   s     `                             @r'   Úextract_detailr’   H   sƒ  ù€ ä˜˜}Ó-€Dð €EÜ	�‰ÐEÀtÓ	L€BÙ	Ü˜BŸH™H Q›KÓ(ˆÙØ�Y‰Y�t‹_ˆÙÜ §¡°$ Ó 7Ó8ˆEð €DÜ	�‰ÐKÈTÓ	R€BÙ	Ø�x‰x˜‹{ˆÙÜ�Y‰YÐBÀDÓIˆÙØ—8‘8˜A“;ˆDð 
�‰�5Ð!2ˆÓ	3ò  
R°t·y±yÀÐOe°yÓ7fò  
RÐjn×jsÑjsÐtyð  CQÐjsó  kR€BÙØ�d˜B Ð"Ð"ð �[‰[Ò+Ó,ò ˆØ	�‰�ðà�[‰[˜Óò ˆØ�h‰h�q—u‘u˜W bÓ)Ó*ˆØ�c‰>˜V s™]¨g¸©nÀÈCÁÐSXÐ\_ÒS_Ø�K‰K�Mðð �[‰[˜Ó!ò ˆØ	�‰�ðà�[‰[œrŸz™zÐ*?ÄÇÁÓFˆ[ÓGò ˆØ	�‰�ðð €KØ�]‰]˜3 Tˆ]Ó*ò 2ˆØ�‰yˆØ�j‰j˜tˆjÓ$ˆÜ�9‰9ÐNÐPTÔUÐYcÐgk×gqÑgqÓgsÑYsÐwð  DH÷  DNñ  DNó  DPñ  xPð  TW÷  Tbñ  Tbð  ckõ  TlÜ˜h¨Ó-ˆGØ×%Ñ%Ð&=Ô>Ø/6×/AÑ/AÀ$Ô/G˜' GÒ+ÈW�Ø×Ñ  3¨Ð0Õ1ð2ð 'ò ‰ˆˆ3�Ø—‘˜S w°x�Ó@ˆÙ!‘s w§}¡}°SÓ'9¸"Ñ'=ˆŒØ�8‰8ÐØ—x‘x×(Ñ(¨´B·J±JÐ?ZÓ4[Ð(Ó\ò $�Øœ$˜qŸx™x×0Ñ0Ó1Ð2S´4¸¿¹×8IÑ8IÓ3J×3PÑ3PÐQRÓ3SÐTÒTØ—M‘M•Oð$ð 	
�‰�uÕðð 4?×?¡- ! Q¨’gÓ?€Nð €EØ�k‰k EˆkÓ*ò "ˆØ�7‰7�gÒØ�L‰Lœ˜R›Õ!Ø�W‰WÐHÑHØ—+‘+˜b¨�+Ó-ˆCÙØØŸ;™; wÓ/ˆLÜô  ØŸ;™; s°˜;Ó6ô ó ˆMñ
 ™}Ø—‘œS ›WÔ%ØØ�L‰L˜Õà—+‘+˜b¨�+Ó-ˆCÚØ—‘˜SÕ!ð)"ô. ‹5€DØ€KØò "ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÚ�3˜d’?Ø�H‰H�SŒMØ×Ñ˜qÕ!ð	"ð �k‰k˜+Ó&€GØ&ò S‰ˆˆ3�Ø˜'Ò!ØÐ)¨'¨Ð2DÀSÀEÈÐRÑR‰GðSô
 �f‰fÐ*¨B°Ó8€GÜ�f‰f�Y ¨Ó0×6Ñ6Ó8€GØ�$˜ Ð,Ð,ùóY @s   Î;Vc                  ó  — d} t         j                  dd  }d}|t        |«      k  ru||   }|j                  d«      rt	        |j                  dd«      d   «      } n,|dk(  r'|dz   t        |«      k  rt	        ||dz      «      } |dz  }|dz  }|t        |«      k  rŒut        j                  t        d¬«      }|j                  «       }d}d}d}t        d| dz   «      D �]Þ  }	|	dk(  rt        }
nt        › d|	› d	�}
t        |
«      }|s t        d
|	› d�t         j                  ¬«       ŒIt!        |«      }t        d|	› dt        |«      › d�«       |D �]j  \  }}}|j#                  d|f«       |j%                  «       r|dz  }Œ1t        |«      }|s|dz  }ŒDt'        ||«      \  }}}}|r1t        t)        j*                  dd|«      j-                  «       «      dk  r|dz  }ŒŽ|s|}|s|}t)        j*                  dd|«      d d }t)        j*                  dd|«      j-                  «       }d|v rdnd}	 |j#                  d||||||t.        t0        t2        |df«      }|j4                  }|j#                  d||t.        |f«       |j7                  «        |dz  }t        d|› d|d d › �«       t;        j<                  d«       �Œm �Œá |j?                  «        t        d|› d|› d |› d!||z   |z   › �«       y # t        j8                  $ r |dz  }Y Œcw xY w)"Nr   r   z--pages=ú=z--pagesé   )r
   z/c18458/pages/z.htmlu     [WARN] ç¬¬u   é¡µèŽ·å�–å¤±è´¥, è·³è¿‡r   u     ç¬¬u   é¡µ: æ‰¾åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?rd   r   é
   éÈ   rc   rH   z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z    [z] é-   gš™™™™™Ù?u	   
æ–°å¢ž: u
     é‡�å¤�: u     è¿‡çŸ­/404: u
     æ€»è®¡: ) r   ÚargvÚlenrn   Úintrp   Úsqlite3ÚconnectÚDB_PATHÚcursorr   Ú
LIST_FIRSTr7   r(   r   r   rA   ÚexecuteÚfetchoner’   r+   r,   r-   Ú	SITE_NAMEÚSCRIPT_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚIntegrityErrorr   r    Úclose)Ú	max_pagesÚargsr#   rO   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚpageÚlist_urlr:   r;   r!   r.   r@   ÚdhtmlÚd_titleÚd_dater‘   r„   ÚsummaryÚ	has_tableÚcurÚrids                            r'   Úmainrº   ²   s,  € Ø€IÜ�8‰8�A�Bˆ<€DØ	€AØ
Œc�$‹iŠ-Ø�‰GˆØ�<‰<˜
Ô#Ü˜AŸG™G C¨›O¨AÑ.Ó/‰IØ�)Š^  A¡¬¨D«	Ò 1Ü˜D  Q¡™KÓ(ˆIØ�‰FˆAØ	ˆQ‰ˆð Œc�$‹i‹-ô �?‰?œ7¨BÔ/€DØ�‰‹€AØ€IØ€IØ€Jä�a˜ Q™Ó'ó +ˆØ�1Š9Ü!‰Hä"˜ >°$°°uÐ=ˆHÜ˜Ó!ˆÙÜ�L  Ð&=Ð>ÄSÇZÁZÕPØÜ˜4Ó ˆÜ��d�V˜<¬¨E«
 |°4Ð8Ô9Ø %ó  	ÑˆC�˜Ø�I‰IÐ?À#ÀÔHØ�z‰zŒ|Ø˜Q‘�	ØÜ˜S“MˆEÙØ˜a‘�
ØÜ4BÀ5È#Ó4NÑ1ˆG�V˜W kÙœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOØ˜a‘�
ØÙØ�ÙØ�Ü—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGØ%¨Ñ0™°aˆIðØ—i‘ið AØ˜g w°°S¸&Ä)Ì[ÔZdÐfoÐqrÐsóu�ð —m‘m�Ø—	‘	ÐpØ ¬°GÐ<ô>à—‘”Ø˜Q‘�	Ü˜˜f˜X R¨°°¨ ~Ð6Ô7ô �J‰J�sŽOòA 	ð+ðZ 	‡J�J„LÜ	ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øô ×)Ñ)ò Ø˜Q‘’	ðús   È*A8K+Ë+LÌLÚ__main__)é   r4   ) Ú__doc__r   r+   r   rœ   ÚsslÚurllib.requestr   Úurllib.parser   Úbs4r   r£   r¤   r¥   r7   r    ÚTOTAL_PAGESrž   ÚOUTPUT_FILEÚcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder   r(   r/   rA   r’   rº   Ú__name__© r0   r'   ú<module>rÊ      s±   ðñ÷ 3× 2× 2Ý  Ý à$€	Ø#€Ø€
Ø$€ØÐ,Ñ,€
Ø€Ø
€Ø9€à €c× Ñ Ó"€Ø€Ô Ø—-‘-€„ð @ØOØ0ñ€óòòò g-òTA}ðH ˆzÒÙ…Fð r0   