Ë
    è‡zjä,  ã                   ó8  — 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	Zddl	m
Z
 ddlmZ dZdZdZdZed	z   Zd
dddddddœZdZdZdZ ej,                  «       Zde_        ej2                  e_        ddddœZd!d„Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"d k(  r e!«        yy)"uö  èŽ±å·žå¸‚äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š (col23203) çˆ¬è™«
CMS: JPAAS (jcms, çƒŸå�°èŽ±å·ž)
åˆ—è¡¨: /api-gateway/jpaas-publish-server/front/page/build/unit?parseType=bulidstatic&webId=154&tplSetId=kUVXvNhbixMZJJ7baLQ9I&tagId=å�³ä¾§æ–‡ç« åˆ—è¡¨&editType=null&pageId=23203&paramJson={"pageNo":N,"pageSize":20}
  å“�åº” JSON data.html: <li class="bt-main-r-ul-li"> <a target="_blank" href="/col/col23203/art/2026/art_hash.html" title="å®Œæ•´æ ‡é¢˜">æ˜¾ç¤ºæ–‡æœ¬</a><span>YYYY-MM-DD</span></li>
  æ€»æ•° count=4263 â†’ 214é¡µ Ã— 20æ�¡
è¯¦æƒ…: /col/col23203/art/YYYY/art_hash.html
  æ­£æ–‡ div#zoom (ç›´æŽ¥ p å­�å…ƒç´ ), é™„ä»¶ <a data-link=çœŸå®žè·¯å¾„> (href æ˜¯åŠ å¯†ä¸‹è½½API)
  çº¯PDFåž‹: zoom æ— æ–‡æœ¬, pdfUrls JS å�˜é‡�å�« fileURL â†’ è½¬é™„ä»¶ + å� ä½�æ­£æ–‡
é    N©Úurljoin)ÚBeautifulSoupu   èŽ±å·žå¸‚-é€šçŸ¥å…¬å‘Šzcrawl_laizhou_tzgg.pyu   å±±ä¸œzhttp://www.laizhou.gov.cnz7/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ154ÚkUVXvNhbixMZJJ7baLQ9IÚcolumnu   å�³ä¾§æ–‡ç« åˆ—è¡¨ÚnullÚ23203)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdéÖ   z/mnt/data/search.dbz+/root/gov_crawler/laizhou_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_laizhou_tzgg.pyÚhttp_getr5   -   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    r4   Úclean_titler<   ;   s_   € à�M‰M˜* bÓ)×1Ñ1°(¸BÓ?×GÑGÈÐRTÓU€EÜ�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó€  — t        j                  | ddœdd¬«      }t        t        «      }||d<   t        dz   t
        j                  j                  |«      z   }t        |«      }|sy	 t        j                  |«      }|j                  d	«      sy|j                  d
i «      j                  dd«      S # t        $ r Y yw xY w)u%   è°ƒç”¨ JPAAS API èŽ·å�–åˆ—è¡¨é¡µ HTMLé   )ÚpageNoÚpageSizeF)ú,ú:)Úensure_asciiÚ
separatorsÚ	paramJsonú?r   ÚsuccessÚdataÚhtml)ÚjsonÚdumpsÚdictÚ
QUERY_BASEÚAPI_URLr    ÚparseÚ	urlencoder5   Úloadsr(   Úget)ÚpagerF   Úqdr.   rJ   Úds         r4   Úfetch_list_pagerW   C   s¯   € ä—
‘
 d¸Ñ;È%Ð\fÔg€IÜ	ŒjÓ	€BØ€B€{�OÜ
�C‰-œ&Ÿ,™,×0Ñ0°Ó4Ñ
4€CÜ�C‹=€DÙØðÜ�J‰J�tÓˆð �5‰5�ÔØØ�5‰5�˜Ó× Ñ  ¨Ó,Ð,øô	 ò Ùðús   Á(B1 Â1	B=Â<B=c                 ó¢  — g }t        j                  d| «      D ]³  }|j                  d«      |j                  d«      }}t        t        |«      }t        |j                  «       «      }| |j                  «       |j                  «       dz    }t        j                  d|«      }|r|j                  d«      nd}	|sŒ |j                  |||	f«       Œµ |S )u(   ä»Žåˆ—è¡¨ HTML æ��å�– (url, title, date)z1href="([^"]*?art/[^"]*?\.html)"\s+title="([^"]*)"r   é   i,  z+<span[^>]*>\s*(\d{4}-\d{2}-\d{2})\s*</span>r   )
r8   ÚfinditerÚgroupr   ÚBASE_URLr<   r:   ÚendÚsearchÚappend)
rJ   ÚitemsÚmÚhrefÚtr.   r;   ÚafterÚdmÚdates
             r4   Ú
parse_listrg   U   s²   € à€EÜ�[‰[ÐMÈtÓTò 	-ˆØ—'‘'˜!“*˜aŸg™g a›jˆaˆÜ”h Ó%ˆÜ˜AŸG™G›IÓ&ˆà�Q—U‘U“W˜QŸU™U›W s™]Ð+ˆÜ�Y‰YÐEÀuÓMˆÙ ˆr�x‰x˜Œ{ bˆÚØ�L‰L˜#˜u dÐ+Õ,ð	-ð €Lr=   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¬«      }	|	s||dg fS |	j                  d«      D ]  }
|
j                  «        Œ |	j                  d«      D ]  }|j                  «        Œ g }t        «       }t        j                  d| «      }i }|D ]$  \  }}t        ‰|«      }|j                  «       ||<   Œ& |j                  «       D ]/  \  }}||vsŒ|j                  |«       |j                  d||f«       Œ1 |	j                  dd¬«      D ]®  }|j                  d¬«      }|j!                  d«      xs |d   }t        j                  d|«      s6d|j#                  «       v s$d|j#                  «       v s|j%                  d«      sŒyt        ‰|«      }||v rŒŠ|j                  |«       |j                  |||f«       Œ° |j                  ddd¬«      D ]µ  }|j                  d¬«      xs |j!                  dd«      xs d}|j!                  d«      xs |d   }d|j#                  «       v s)d|j#                  «       v st        j                  d|«      sŒ€t        ‰|«      }||v rŒ‘|j                  |«       |j                  |||f«       Œ· |D �]   \  }}}|€Œ|j!                  ||«      }|j'                  d|d¬«      }|r|n|j)                  d «      d!   |_        |j,                  �–|j,                  j                  d"t        j.                  d#«      ¬$«      D ]c  }|t1        |j,                  j2                  «      dt1        |j,                  j2                  «      j5                  |«       v sŒT|j                  «        Œe |j7                  |«       �Œ |D ��ch c]  \  }}}|’Œ
 c}}Š$g }|	j                  d%¬&«      D ]ß  }|j8                  d'k(  r|j                  t;        |«      «       Œ-|j8                  d(v r~|j                  dd¬«      }|sŒQ|j                  d'«      }t=        ˆ$ˆfd)„|j                  dd¬«      D «       «      }|s|r|j                  t;        |«      «       Œ§|j                  |«       Œ¹|j                  dd¬«      }|sŒÏ|j                  |«       Œá t        «       }g }|D ]X  } t        j>                  d*dt        j>                  d+d| «      «      }!|!sŒ2|!|vsŒ7|j                  |!«       |j                  | «       ŒZ d,jA                  |«      }"|D ]  \  }}}||"vsŒ|"d-|› d.|› d/�z  }"Œ |s6|r4|D ���cg c]  \  }}}d0|› d.|› d/�‘Œ }#}}}|#rd1d,jA                  |#«      z   }"t        j>                  d2d|"«      }"t        j>                  d3d,|"«      j                  «       }"|||"|fS c c}}w c c}}}w )4u/   æ��å�– (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})ÚdivÚzoom)ÚidÚscriptÚstylez>pdfUrls\.push\(\{name:\s*'([^']*)',\s*fileURL:\s*'([^']*)'\}\)NÚa)rb   z	data-linkrb   z6(?i)\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|ofd)(\?|$)ÚdownloadÚattachu   é™„ä»¶Úarticleattach)Úclass_rb   r;   u   é™„ä»¶ä¸‹è½½z(?i)\.(pdf|doc|docx|xls|xlsx)Ú_blank)rb   Útargetú/éÿÿÿÿÚimgz(?i)\.(gif|png|jpg|jpeg))ÚsrcF)Ú	recursiveÚtable)Úprj   ri   Úh2Úh3ÚulÚolÚlic              3   óR   •K  — | ]  }t        ‰|d    «      ‰v s|d    ‰v r|–— Œ  y­w)rb   Nr   )Ú.0ro   Úattached_hrefsÚpage_urls     €€r4   ú	<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>z<p><a href="u1   [æœ¬å…¬å‘Šæ­£æ–‡ä¸ºPDFé™„ä»¶ï¼Œè¯·ä¸‹è½½æŸ¥çœ‹]

u   æ‰“å�°æœ¬é¡µ[^\n]*z\n{3,})!r   r8   r^   r<   r[   ÚfindÚget_textÚfind_allÚ	decomposeÚsetÚfindallr   r:   r`   Úaddr_   rS   ÚlowerÚ
startswithÚnew_tagÚsplitÚstringÚparentÚcompileÚlistÚcontentsÚindexÚreplace_withÚnameÚstrÚanyr9   Újoin)%rJ   r…   Úsoupr;   Úmtri   rf   Úmpre   ÚcmÚsÚstÚattachmentsÚseen_attÚpdf_mÚpdf_mapÚfnameÚfurlÚabs_urlro   Útxtrb   Ú	real_nameÚnew_aÚsibÚ_ÚpartsÚelÚinner_tablesÚel_has_attachÚseenÚfinal_partsr|   ÚkeyÚcontentÚ	pdf_linksr„   s%    `                                  @r4   Úextract_detailrº   e   sr  ù€ ä˜˜}Ó-€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Ð<¸dÓCˆÙØ—8‘8˜A“;ˆDð 
�‰�5˜VˆÓ	$€BÙØ�d˜B Ð"Ð"ð �[‰[˜Ó"ò ˆØ	�‰�ðà�k‰k˜'Ó"ò ˆØ
�‰�ðð €KÜ‹u€Hä�J‰JÐXÐZ^Ó_€EØ€GØò )‰ˆˆtÜ˜( DÓ)ˆØ Ÿ;™;›=ˆ�Òð)ð "Ÿ-™-›/ò 7‰ˆ�Ø˜(Ò"Ø�L‰L˜Ô!Ø×Ñ  e¨WÐ5Õ6ð7ð
 �[‰[˜ 4ˆ[Ó(ò 2ˆØ�j‰j˜tˆjÓ$ˆØ�u‰u�[Ó!Ò. Q v¡YˆÜ�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Ø˜(Ñ"ØØ�L‰L˜Ô!Ø×Ñ  3¨Ð0Õ1ð2ð �]‰]˜3 ¸Tˆ]ÓBò 2ˆØ�j‰j˜tˆjÓ$ÒL¨¯©¨g°rÓ(:ÒL¸nˆØ�u‰u�[Ó!Ò. Q v¡YˆØ�t—z‘z“|Ñ# z°T·Z±Z³\Ñ'AÄRÇYÁYÐOoÐquÕEvÜ˜h¨Ó-ˆGØ˜(Ñ"ØØ�L‰L˜Ô!Ø×Ñ  3¨Ð0Õ1ð2ð 'ó 
‰ˆˆ3�Øˆ9ØØ—K‘K ¨Ó-ˆ	Ø—‘˜S w°x�Ó@ˆÙ$-‘y°7·=±=ÀÓ3EÀbÑ3IˆŒØ�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ñ
 ™;Ødo×pÐpÑQ`ÐQRÐTWÐY`�| G 9Ð,>¸s¸eÀ8ÒLÐpˆ	ÒpÙØKÈfÏkÉkÐZcÓNdÑdˆGô �f‰fÐ*¨B°Ó8€GÜ�f‰f�Y ¨Ó0×6Ñ6Ó8€GØ�$˜ Ð,Ð,ùóe @ùôV qs   ÑY1ØY7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 �]Æ  }	t        |	«      }
|
s t        d|	› d	�t         j                  ¬
«       Œ1t        |
«      }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,        t.        t0        |df«      }|j2                  }|j                  d||t,        |f«       |j5                  «        |dz  }t        d|› d|d d › �«       t9        j:                  d«       �Œm �ŒÉ |j=                  «        t        d|› d|› d|› d||z   |z   › �«       y # t        j6                  $ r |dz  }Y Œcw xY w) Nr   r   z--pages=ú=z--pagesé   )r   u     [WARN] ç¬¬u   é¡µèŽ·å�–å¤±è´¥, è·³è¿‡r   u     ç¬¬u   é¡µ: æ‰¾åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?rˆ   r   é
   éÈ   r‡   ú 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Úlenr‘   Úintr“   Úsqlite3ÚconnectÚDB_PATHÚcursorr   rW   r)   r+   rg   ÚexecuteÚfetchoner5   rº   r8   r9   r:   Ú	SITE_NAMEÚSCRIPT_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitÚIntegrityErrorr,   r-   Úclose)Ú	max_pagesÚargsr0   ro   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skiprT   rJ   r`   r.   r;   rf   ÚdhtmlÚd_titleÚd_dater¸   r¥   ÚsummaryÚ	has_tableÚcurÚrids                           r4   Ú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™Ó'ó 'ˆÜ˜tÓ$ˆÙÜ�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 	ð'ðR 	‡J�J„LÜ	ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øô ×)Ñ)ò Ø˜Q‘’	ðús   ÈA8KËK.Ë-K.Ú__main__)é   é   )#Ú__doc__r*   r8   r,   rÅ   ÚsslÚurllib.requestr    rK   Úurllib.parser   Úbs4r   rË   rÌ   rÍ   r\   rO   rN   ÚTOTAL_PAGESrÇ   ÚOUTPUT_FILEÚcreate_default_contextr%   Úcheck_hostnameÚ	CERT_NONEÚverify_moder#   r5   r<   rW   rg   rº   rà   Ú__name__© r=   r4   ú<module>rñ      s×   ðñ÷ G× F× F× FÝ  Ý à$€	Ø%€Ø€
Ø&€Ø
ÐNÑ
N€àØØ'ØØ!ØØñ€
ð €Ø
€Ø;€à €c× Ñ Ó"€Ø€Ô Ø—-‘-€„ð @ØOØ0ñ€óòò-ò$ò C-òL=}ð@ ˆzÒÙ…Fð r=   