Ë
    Ø?Tj'  ã                   ó  — 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dddd	d
ddœZdZdZddiZdZ ej                   «       Zej$                  j'                  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)ÚBeautifulSoupzQhttps://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.cnc                 óŒ  — 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/crawl_penglai_gsgg.pyÚfetch_list_pager4       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%   r@   Úget_textr(   Úmatchr+   Ú
startswithÚBASE_URLÚappend)r   ÚitemsÚsoupÚcontent_divr9   r:   r;   r<   r>   Ú	date_textÚdate_mÚdate_strs               r3   Ú
parse_listrP   2   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,   r-   )Úurlr/   r2   s      r3   Úfetch_detailrX   J   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 )'Nr6   r=   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr>   Tr?   )ÚPublishDateÚPubDateÚpublishdateÚpubdaterA   r   FÚdivÚzoomc                 ó   — | xr d| v S )Nz
text-align© )Úvs    r3   ú<lambda>z extract_detail.<locals>.<lambda>n   s   € °qÒ7N¸\ÈQÐ=N€ rQ   )r8   Ústyler7   Úp)õ   Â r=   ÚtableÚimgÚsrcÚaltz![z](ú))Ú	recursiveú

r:   z"\.(doc|pdf|xls|docx|xlsx|rar|zip)$)r<   r<   )r[   rW   z5/api-gateway/jpaas-web-server/front/document/downloadu   é™„ä»¶r   )r   rC   r(   ÚcompileÚIr%   r@   rE   rF   r+   Úchildrenr[   rI   Útable_to_markdownÚresolve_urlÚfind_allÚjoinÚosÚpathÚbasenamer"   r#   )r   rW   rK   r>   Ú
meta_titleÚ	title_tagrO   r[   Ú	meta_dateÚrawÚmÚcontent_partsÚ	has_tablerd   ÚchildrV   Úmdrn   ro   Úfull_srcrj   r^   ÚattachmentsÚa_tagr<   Ú	full_hrefÚattachments_jsons                              r3   Úextract_detailr‹   T   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Ð@Ð@rQ   c                 óf   — | j                  d«      r| S | j                  d«      rd| z   S t        | z   S )NÚhttpz//zhttps:)rG   rH   )Úurl_strs    r3   rw   rw   Ÿ   s9   € Ø×Ñ˜&Ô!ØˆØ×Ñ˜$ÔØ˜'Ñ!Ð!Ü�gÑÐrQ   c                 óð  — g }| j                  d«      D ]�  }g }|j                  ddg«      D ]b  }|j                  d¬«      }t        |j                  dd«      «      }|dkD  r|j	                  |gdg|dz
  z  z   «       ŒR|j                  |«       Œd |sŒ€|j                  |«       Œ’ |syt        d	„ |D «       «      }|D ]1  }t        |«      |k  sŒ|j                  d«       t        |«      |k  rŒ Œ3 d
dj                  |d   «      z   dz   g}	|	j                  d
dj                  dg|z  «      z   dz   «       |dd  D ](  }|	j                  d
dj                  |«      z   dz   «       Œ* dj                  |	«      S )NÚtrÚtdÚthTr?   Úcolspanr   r=   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w)N)Úlen)Ú.0Úrs     r3   ú	<genexpr>z$table_to_markdown.<locals>.<genexpr>¶   s   è ø€ Ò(˜a”3�q—6Ñ(ùs   ‚z| z | r   z |z---ú
)	rx   rE   r*   r%   ÚextendrI   Úmaxr•   ry   )
rl   Úrowsr�   ÚcellsÚcellrV   r“   Úmax_colsr—   Úliness
             r3   rv   rv   §   s|  € Ø€DØ�n‰n˜TÓ"ò 
ˆØˆØ—K‘K  t Ó-ò 	#ˆDØ—=‘= t�=Ó,ˆDÜ˜$Ÿ(™( 9¨aÓ0Ó1ˆGØ˜Š{Ø—‘˜d˜V r d¨g¸©kÑ&:Ñ:Õ;à—‘˜TÕ"ð	#ò Ø�K‰K˜Õð
ñ ØÜÑ( 4Ô(Ó(€HØò ˆÜ�!‹f�xÓØ�H‰H�RŒLô �!‹f�xÔðð �E—J‘J˜t A™wÓ'Ñ'¨$Ñ.Ð/€EØ	‡L�L�˜Ÿ
™
 E 7¨XÑ#5Ó6Ñ6¸Ñ=Ô>Ø�!�"ˆXò 2ˆØ�‰�T˜EŸJ™J q›MÑ)¨DÑ0Õ1ð2à�9‰9�UÓÐrQ   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é
   rS   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,   r-   ÚcommitÚclose)Ú
items_dataÚconnÚcÚinsertedr>   rO   r^   rŠ   rƒ   Úpage_urlr2   s              r3   Ú
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  d	«      }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)0Nr   ú[z%H:%M:%Su   ] èŽ·å�–åˆ—è¡¨é¡µ...r   u   åˆ—è¡¨é¡µå¤±è´¥é   r   é   u     æ€»è®°å½•: u   , æ€»é¡µæ•°: u   , ç¬¬ä¸€é¡µ: u   æ�¡é   u     ç¬¬rB   u   é¡µ: u   é¡µ: å¤±è´¥g      à?u   
å…±u   æ�¡å¾…æŠ“å�–z  [z] r   z...ú T)ÚendÚflushÚFÚErr   ÚSÚUu	   
å…¥åº“: u   
æ— æ•°æ�®å…¥åº“u   
===== æŠ¥å‘Š =====u   æ€»æŠ“å�–: u   æ­£æ–‡ä¸ºç©º: u   æœ‰åˆ†æ®µ: z (éd   z.1fz%)u   é™„ä»¶: u   
ç©ºæ­£æ–‡æ ‡é¢˜:r¢   z  - )r-   ÚtimeÚstrftimer4   rP   Úminr•   ÚlistÚrangerš   ÚsleepÚ	enumeraterX   r‹   rI   r"   Úloadsr±   r›   )Útotal_emptyÚtotal_segmentedÚtotal_attachmentsÚempty_titlesr   r1   Úitems_page1Útotal_pagesÚ	all_itemsr.   Ú_rJ   Ú
batch_dataÚiÚ
detail_urlr>   rO   Údetail_titleÚdetail_dater^   rŠ   rƒ   Ú
final_dateÚfinal_titleÚsavedÚts                             r3   ÚcrawlrØ   Ö   sR  € Ø€KØ€OØÐØ€Lô 
ˆAŒd�m‰m˜JÓ'Ð(Ð(<Ð
=Ô>Ü! !Ó$�K€Dˆ%ÙÜÐÔ ØÜ˜TÓ"€KÜ�u˜r‘z bÑ(¨!Ó,€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;Ë;K?Ú__main__)Ú__doc__Úrequestsr(   r¤   r¿   rz   r'   r"   Úbs4r   r&   r!   r©   r¦   ÚHEADERSrH   ÚSessionr$   ÚheadersÚupdater4   rP   rX   r‹   rw   rv   r±   rØ   Ú__name__rf   rQ   r3   ú<module>râ      s¸   ðñ÷ 6× 5× 5Ý à
]€àØØ'ØØ!ØØñ€ð +€	Ø
€ØÐWÐ
X€Ø'€à
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò$ò0òHAòVòò4ò*JðZ ˆzÒÙ	…Gð rQ   