Ë
    ì¾jì$  ã                   ó6  — 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mZ ddlmZ dZddd	d
ddddœZdZdZddiZdZdZ ej,                  «       Zej0                  j3                  e«       d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"dk(  r e!«        yy)u-  
è“¬èŽ±åŒº-å»ºè®¾é¡¹ç›®çŽ¯è¯„å…¬ç¤º
API: /api-gateway/jpaas-publish-server/front/page/build/unit (GET)
åˆ—è¡¨: AJAXåŠ è½½ï¼Œ#å½“å‰�æ �ç›®åˆ—è¡¨ > .page-content > li > a[title] + span(YYYY-MM-DD)
åˆ†é¡µ: paramJson={"pageNo":N, "pageSize":25}, 1125æ�¡/45é¡µ
è¯¦æƒ…: div#zoom > p, @href .doc/.pdf é™„ä»¶
é    N)ÚBeautifulSoup)ÚHTTPAdapter)ÚRetryzQhttps://www.penglai.gov.cn/api-gateway/jpaas-publish-server/front/page/build/unitÚbulidstaticÚ152ÚawU93spIZ5G7CYnk12KGtÚcolumnõ   å½“å‰�æ �ç›®åˆ—è¡¨ÚnullÚ30455)Ú	parseTypeÚwebIdÚtplSetIdÚpageTypeÚtagIdÚeditTypeÚpageIdu   è“¬èŽ±åŒº-å»ºè®¾é¡¹ç›®çŽ¯è¯„z/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zhttps://www.penglai.gov.cné   c                 óŒ  — t        t        «      }| dkD  rt        j                  | ddœd¬«      |d<   	 t        j                  t        |d¬«      }|j                  «       }|d	   d
   }t        j                  d|«      }|rt        |j                  d«      «      nd}||fS # t        $ r}t        d| › d|› �«       Y d}~yd}~ww xY w)u   é€šè¿‡APIèŽ·å�–åˆ—è¡¨é¡µé   é   )ÚpageNoÚpageSizeF©Úensure_asciiÚ	paramJsoné   )ÚparamsÚtimeoutÚdataÚhtmlzcount="(\d+)"r   z  [API ERROR] page ú: N)Nr   )ÚdictÚLIST_PARAMSÚ_jsonÚdumpsÚsessionÚgetÚAPI_URLÚjsonÚreÚsearchÚintÚgroupÚ	ExceptionÚprint)Úpage_nor   Úrespr    r!   Úcount_mÚtotalÚes           ú'/root/gov_crawler/crawl_penglai_gsgg.pyÚfetch_list_pager7   #   s»   € ä”+Ó€FØ�‚{Ü#Ÿk™k°WÈ"Ñ*MÐ\aÔbˆˆ{Ñð
Ü�{‰{œ7¨6¸2ˆ{Ó>ˆØ�y‰y‹{ˆØ�F‰|˜FÑ#ˆä—)‘)Ð,¨dÓ3ˆÙ)0”�G—M‘M !Ó$Ô%°aˆØ�Uˆ{ÐøÜò ÜÐ# G 9¨B¨q¨cÐ2Ô3Üûðús   ³A+B Â	CÂ(B>Â>Cc                 ól  — g }t        | d«      }|j                  d¬«      }|s|S |j                  d«      D ]û  }|j                  d«      }|j                  d«      }|r|j                  d«      sŒ9|j                  dd«      j	                  «       }|j                  d	d«      j	                  «       xs |j                  d
¬«      }|r|j                  d
¬«      nd}	t        j                  d|	«      }
|
r|
j                  d«      nd}|j                  d«      r	t        |z   }|j                  |||f«       Œý |S )u   è§£æž�APIè¿”å›žçš„åˆ—è¡¨HTMLúhtml.parserr
   ©ÚidÚliÚaÚspanÚhrefÚ ÚtitleT©Ústripú(\d{4}-\d{2}-\d{2})r   ú/)r   ÚfindÚselectr(   rC   Úget_textr+   Úmatchr.   Ú
startswithÚBASE_URLÚappend)r!   ÚitemsÚsoupÚcontent_divr<   r=   r>   r?   rA   Ú	date_textÚdate_mÚdate_strs               r6   Ú
parse_listrS   5   s  € à€EÜ˜˜}Ó-€DØ—)‘)Ð3�)Ó4€KÙØˆØ× Ñ  Ó&ò .ˆØ�G‰G�C‹LˆØ�w‰w�v‹ˆÙ˜Ÿ™˜fœØØ�u‰u�V˜RÓ ×&Ñ&Ó(ˆØ—‘�g˜rÓ"×(Ñ(Ó*ÒD¨a¯j©j¸t¨jÓ.DˆÙ15�D—M‘M¨�MÔ-¸2ˆ	ä—‘Ð0°)Ó<ˆÙ&,�6—<‘< ”?°"ˆØ�?‰?˜3ÔÜ˜d‘?ˆDØ�‰�d˜E 8Ð,Õ-ð.ð €Ló    c                 óš   — 	 t         j                  | d¬«      }d|_        |j                  S # t        $ r}t        d«       Y d }~y d }~ww xY w)Nr   ©r   zutf-8ÚERR)r'   r(   ÚencodingÚtextr/   r0   )Úurlr2   r5   s      r6   Úfetch_detailr[   M   sD   € ðÜ�{‰{˜3¨ˆ{Ó+ˆØˆŒØ�y‰yÐøÜò Ü�ŒÜûðús   ‚), ¬	A
µAÁA
c           	      ó¸  — t        | d«      }d}|j                  ddt        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|s3|j                  d«      }|r |j                  d	¬
«      j                  «       }d}dD ]Œ  }|j                  ddt        j                  |t        j                  «      i¬«      }|sŒ=|j                  d«      sŒO|d   j                  «       }	t        j                  d|	«      }
|
sŒ{|
j                  d«      } n g }d}|j                  ddd„ ¬«      xs |j                  dd¬«      }|r×|j                  D ]È  }|j                  dk(  r,|j                  d	¬
«      }|sŒ'|dvsŒ,|j                  |«       Œ>|j                  dk(  r"d	}t        |«      }|sŒ]|j                  |«       Œo|j                  dk(  sŒ|j                  dd«      }|j                  dd«      }|sŒ¦t        |«      }|j                  d|› d|› d�«       ŒÊ |sE|rC|j                  dd	¬«      D ]-  }|j                  d	¬
«      }|sŒ|dvsŒ|j                  |«       Œ/ dj!                  |«      }g }|j                  dt        j                  d t        j                  «      ¬!«      D ]i  }|j                  d"d«      }|j                  d	¬
«      }|sŒ*t        |«      }|j                  |xs t"        j$                  j'                  |«      |d#œ«       Œk |j                  dt        j                  d$t        j                  «      ¬!«      D ]L  }|j                  d"d«      }|j                  d	¬
«      }|sŒ*t        |«      }|j                  |xs d%|d#œ«       ŒN |rt)        j*                  |d¬&«      nd}|||||fS )'Nr9   r@   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentrA   TrB   )ÚPublishDateÚPubDateÚpublishdateÚpubdaterD   r   FÚdivÚzoomc                 ó   — | xr d| v S )Nz
text-align© )Úvs    r6   ú<lambda>z extract_detail.<locals>.<lambda>q   s   € °qÒ7N¸\ÈQÐ=N€ rT   )r;   Ústyler:   Úp)õ   Â r@   ÚtableÚimgÚsrcÚaltz![z](ú))Ú	recursiveú

r=   z"\.(doc|pdf|xls|docx|xlsx|rar|zip)$)r?   r?   )r^   rZ   z5/api-gateway/jpaas-web-server/front/document/downloadu   é™„ä»¶r   )r   rF   r+   ÚcompileÚIr(   rC   rH   rI   r.   Úchildrenr^   rL   Útable_to_markdownÚresolve_urlÚfind_allÚjoinÚosÚpathÚbasenamer%   r&   )r!   rZ   rN   rA   Ú
meta_titleÚ	title_tagrR   r^   Ú	meta_dateÚrawÚmÚcontent_partsÚ	has_tablerg   ÚchildrY   Úmdrq   rr   Úfull_srcrm   ra   ÚattachmentsÚa_tagr?   Ú	full_hrefÚattachments_jsons                              r6   Úextract_detailrŽ   W   sŸ  € Ü˜˜}Ó-€Dà€EØ—‘˜6¨&´"·*±*¸_ÌbÏdÉdÓ2SÐ)T�ÓU€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆÙØ—I‘I˜gÓ&ˆ	ÙØ×&Ñ&¨TÐ&Ó2×8Ñ8Ó:ˆEð €HØDò ˆØ—I‘I˜f¨V´R·Z±ZÀÄbÇdÁdÓ5KÐ,L�IÓMˆ	Ú˜Ÿ™ yÕ1Ø˜IÑ&×,Ñ,Ó.ˆCÜ—‘Ð/°Ó5ˆAÚØŸ7™7 1›:�Ùðð €MØ€IØ�9‰9�U˜vÑ-Nˆ9ÓOÒnÐSW×S\ÑS\Ð]bÐgmÐS\ÓSn€DÙØ—]‘]ò 	BˆEØ�z‰z˜SÒ Ø—~‘~¨D�~Ó1�Ú˜D¨Ò4Ø!×(Ñ(¨Õ.Ø—‘˜wÒ&Ø �	Ü& uÓ-�ÚØ!×(Ñ(¨Õ,Ø—‘˜uÓ$Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÚÜ*¨3Ó/�HØ!×(Ñ(¨2¨c¨U°"°X°J¸aÐ)@ÕAð	Bñ" áØ—]‘] 3°$�]Ó7ò /�Ø—z‘z¨�zÓ-�Ú˜D¨Ò4Ø!×(Ñ(¨Õ.ð/ð
 �k‰k˜-Ó(€Gð €KØ—‘˜s¬¯©Ð4YÔ[]×[_Ñ[_Ó)`�Óaò `ˆØ�y‰y˜ Ó$ˆØ�~‰~ Dˆ~Ó)ˆÚÜ# DÓ)ˆIØ×Ñ¨Ò(K´·±×0@Ñ0@ÀÓ0KÐT]Ñ^Õ_ð`ð —‘˜s¬¯©Ð4lÔnp×nrÑnrÓ)s�Ótò MˆØ�y‰y˜ Ó$ˆØ�~‰~ Dˆ~Ó)ˆÚÜ# DÓ)ˆIØ×Ñ¨Ò(8°ÀÑKÕLðMñ HS”u—{‘{ ;¸UÕCÐXZÐà�(˜GÐ%5°yÐ@Ð@rT   c                 óf   — | j                  d«      r| S | j                  d«      rd| z   S t        | z   S )NÚhttpz//zhttps:)rJ   rK   )Úurl_strs    r6   rz   rz   ¢   s9   € Ø×Ñ˜&Ô!ØˆØ×Ñ˜$ÔØ˜'Ñ!Ð!Ü�gÑÐrT   c                 ó   — t        | «      S )u'   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼ˆä¸�è½¬ mdï¼‰)Ústr)ro   ÚargsÚkwargss      r6   ry   ry   ª   s   € äˆu‹:ÐrT   c                 ón  — t        j                  t        d¬«      }|j                  «       }d}| D ]8  \  }}}}}}		 |j	                  d|	|t
        |||r|d d nd||rdndf«       |dz  }Œ: |j                  «        |j                  «        |S # t        $ r}
t        d|d d	 › d
|
› �«       Y d }
~
Œd }
~
ww xY w)Né
   rV   r   zÁ
                INSERT OR REPLACE INTO gov_raw (page_url, title, site_name, publish_date, content, summary, attachments, has_table)
                VALUES (?, ?, ?, ?, ?, ?, ?, ?)
            éÈ   r@   r   z  [DB ERROR] r   r"   )
Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEr/   r0   ÚcommitÚclose)Ú
items_dataÚconnÚcÚinsertedrA   rR   ra   r�   r†   Úpage_urlr5   s              r6   Ú
save_to_dbr¦   ®   sÒ   € Ü�?‰?œ7¨BÔ/€DØ�‰‹€AØ€HØKUò 5ÑGˆˆx˜Ð"2°I¸xð
	5Ø�I‰Ið ð ˜%¤¨H°gÙ!(�˜˜‘¨bÐ2BÉÁAÐXYðôð ˜‰M‰Hð5ð 	‡K�K„MØ‡J�J„LØ€Oøô	 ò 	5Ü�M %¨¨ * ¨R°¨sÐ3×4Ñ4ûð	5ús   ».BÂ	B4ÂB/Â/B4c                  ó  — d} d}d}g }t        dt        j                  d«      › d�«       t        d«      \  }}|st        d«       y t	        |«      }t        |dz   dz  t        «      }t        d	|› d
|› dt        |«      › d�«       t        |«      }t        d|dz   «      D ]t  }	t        |	«      \  }}
|r;t	        |«      }t        d|	› d|› dt        |«      › d�«       |j                  |«       nt        d|	› d|› d�«       t        j                  d«       Œv t        dt        |«      › d�«       g }t        |«      D ]û  \  }\  }}}t        d|dz   › dt        |«      › d|d d › d�dd¬«       t        |«      }|st        d«       ŒJt        ||«      \  }}}}}|xs |}|xs |}|s"| dz  } |j                  |«       t        d«       n d|v r|dz  }t        d«       nt        d «       |r"	 |t        t!        j"                  |«      «      z  }|j                  ||||||f«       t        j                  d«       Œý |rt%        |«      }t        d!|› d�«       nt        d"«       t        d#«       t        d$t        |«      › �«       t        d%| › �«       t        d&|› dt        |«      › d'|t'        t        |«      d«      z  d(z  d)›d*�«       t        d+|› �«       |r$t        d,«       |d d- D ]  }t        d.|› �«       Œ y y #  Y Œ÷xY w)/Nr   ú[z%H:%M:%Su   ] èŽ·å�–åˆ—è¡¨é¡µ...r   u   åˆ—è¡¨é¡µå¤±è´¥é   r   u     æ€»è®°å½•: u   , æ€»é¡µæ•°: u   , ç¬¬ä¸€é¡µ: u   æ�¡é   u     ç¬¬rE   u   é¡µ: u   é¡µ: å¤±è´¥g      à?u   
å…±u   æ�¡å¾…æŠ“å�–z  [z] r   z...ú T)ÚendÚflushÚFÚEru   ÚSÚUu	   
å…¥åº“: u   
æ— æ•°æ�®å…¥åº“u   
===== æŠ¥å‘Š =====u   æ€»æŠ“å�–: u   æ­£æ–‡ä¸ºç©º: u   æœ‰åˆ†æ®µ: z (éd   z.1fz%)u   é™„ä»¶: u   
ç©ºæ­£æ–‡æ ‡é¢˜:r—   z  - )r0   ÚtimeÚstrftimer7   rS   ÚminÚ	MAX_PAGESÚlenÚlistÚrangeÚextendÚsleepÚ	enumerater[   rŽ   rL   r%   Úloadsr¦   Úmax)Útotal_emptyÚtotal_segmentedÚtotal_attachmentsÚempty_titlesr!   r4   Úitems_page1Útotal_pagesÚ	all_itemsr1   Ú_rM   Ú
batch_dataÚiÚ
detail_urlrA   rR   Údetail_titleÚdetail_datera   r�   r†   Ú
final_dateÚfinal_titleÚsavedÚts                             r6   ÚcrawlrÐ   Ã   sR  € Ø€KØ€OØÐØ€Lô 
ˆAŒd�m‰m˜JÓ'Ð(Ð(<Ð
=Ô>Ü! !Ó$�K€Dˆ%ÙÜÐÔ ØÜ˜TÓ"€KÜ�u˜r‘z bÑ(¬)Ó4€KÜ	ˆM˜%˜ ¨k¨]¸-ÌÈKÓHXÐGYÐY\Ð
]Ô^ô �[Ó!€IÜ˜˜K¨!™OÓ,ò ˆÜ! 'Ó*‰ˆˆaÙÜ˜tÓ$ˆEÜ�E˜'˜ ! K =°´c¸%³j°\ÀÐEÔFØ×Ñ˜UÕ#ä�E˜'˜ ! K =°Ð<Ô=Ü�
‰
�3�ðô 
ˆE”#�i“.Ð! Ð
.Ô/ð €JÜ,5°iÓ,@ò Ñ(ˆÑ(ˆJ˜˜xÜ��A�a‘C�5˜œ#˜i›.Ð)¨¨E°#°2¨J¨<°sÐ;ÀÈDÕQÜ˜JÓ'ˆÙÜ�#ŒJØÜJXÐY]Ð_iÓJjÑGˆ�k 7Ð,<¸iØ Ò, Hˆ
Ø"Ò+ eˆÙØ˜1ÑˆKØ×Ñ Ô,Ü�#�JØ�wÑØ˜qÑ ˆOÜ�#�Jä�#ŒJÙðØ!¤S¬¯©Ð5EÓ)FÓ%GÑGÐ!ð 	×Ñ˜;¨
°GÐ=MÈyÐZdÐeÔfÜ�
‰
�3�ð1ñ6 Ü˜:Ó&ˆÜ�
˜5˜' Ð%Õ&äÐ!Ô"ô 
Ð Ô"Ü	ˆKœ˜J›Ð(Ð
)Ô*Ü	ˆN˜;˜-Ð
(Ô)Ü	ˆK˜Ð(¨¬#¨j«/Ð):¸"¸_ÌSÔQTÐU_ÓQ`ÐabÓMcÑ=cÐdgÑ=gÐhkÐ<lÐlnÐ
oÔpÜ	ˆHÐ&Ð'Ð
(Ô)ÙÜÐ"Ô$Ø˜c˜rÐ"ò 	ˆAÜ�D˜˜�*Õñ	ð øð%Ùús   Ç+!K?Ë?LÚ__main__)#Ú__doc__Úrequestsr+   r™   r³   r}   r*   r%   ÚsysÚbs4r   Úrequests.adaptersr   Úurllib3.util.retryr   r)   r$   rž   r›   ÚHEADERSrK   r¶   ÚSessionr'   ÚheadersÚupdater7   rS   r[   rŽ   rz   ry   r¦   rÐ   Ú__name__ri   rT   r6   ú<module>rÝ      sÆ   ðñ÷ ;× :× :Ó :Ý Ý )Ý $à
]€àØØ'ØØ!ØØñ€ð +€	Ø
€ØÐWÐ
X€Ø'€Ø€	à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò$ò0òHAòVòòò*JðZ ˆzÒÙ	…Gð rT   