Ë
    9JŠjÜ  ã                   óØ  — 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ZdZd	d
ddœZ ej"                  «       Zej&                  j)                  e«       dZd„ Zd%d„Zd„ Zd&d„Zedk(  ríddlZ ej8                  «       Zej=                  dd¬«       ej=                  ded¬«       ejA                  «       Z!e!jD                  r� e#d«        ed«      Z$e$dd D ]W  \  Z%Z& e#de%› �«        e#de&› �«        ee&«      \  Z'Z(Z)Z* e#de'› �«        e#de(› �«        e#d e)dd! › �«        e#d"e*› �«       ŒY  e#d# e+e$«      › �«       y ee!jX                  ¬$«       yy)'u\   
ç�Œå�—åŽ¿äººæ°‘æ”¿åºœ - æ”¿åºœä¿¡æ�¯å…¬å¼€
http://xxgk.guannan.gov.cn/list.html
Custom CMS
é    N)ÚBeautifulSoup)Úurljoin)Údatetimez/root/search.dbu(   ç�Œå�—åŽ¿äººæ°‘æ”¿åºœ-æ”¿åºœä¿¡æ�¯å…¬å¼€u   æ”¿åºœzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagez›INSERT OR IGNORE INTO gov_raw 
    (site_name, page_url, title, publish_date, summary, content, category, attachments)
    VALUES (?, ?, ?, ?, '', ?, ?, ?)c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA busy_timeout=5000zPRAGMA journal_mode=WAL)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    ú"/root/gov_crawler/crawl_guannan.pyÚinit_dbr      s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ+Ô,Ø‡L�LÐ*Ô+Ø€Kó    é   c                 ót  — | dk(  rd}nd| › d�}t         j                  |d¬«      }d|_        t        |j                  d«      }g }|j                  d	t        j                  d
«      ¬«      D ]J  }|j                  dd«      }|j                  d¬«      }|r|sŒ,t        d|«      }|j                  ||f«       ŒL |S )z-Fetch list page, return list of (title, url).r   z$http://xxgk.guannan.gov.cn/list.htmlz(http://xxgk.guannan.gov.cn/list/0-0-0-0-z.htmlé   ©Útimeoutúutf-8úhtml.parserÚaz/news/show-\d+\.html)Úhrefr   Ú T©Ústripúhttp://xxgk.guannan.gov.cn)ÚSESSIONÚgetÚencodingr   ÚtextÚfind_allÚreÚcompileÚget_textr   Úappend)	ÚpageÚurlÚrespÚsoupÚitemsr   r   ÚtitleÚfull_urls	            r   Ú
fetch_listr-   %   s½   € àˆq‚yØ4‰à8¸¸¸eÐDˆä�;‰;�s Bˆ;Ó'€DØ€D„MÜ˜Ÿ™ MÓ2€Dà€EØ�]‰]˜3¤R§Z¡ZÐ0GÓ%Hˆ]ÓIò (ˆØ�u‰u�V˜RÓ ˆØ—
‘
 �
Ó&ˆÙ™DØÜÐ7¸Ó>ˆØ�‰�e˜XÐ&Õ'ð(ð €Lr   c                 óx  ‡— t         j                  | d¬«      }d|_        t        |j                  d«      }|j                  dd¬«      }|r|j                  d¬	«      nd
}|sF|j                  dddi«      }|r0|j                  d«      r|j                  d«      j                  «       }d
}|j                  dddi«      }|rX|j                  d«      rG|j                  d«      j                  «       }	 t        j                  |d«      }	|	j                  d«      }g }
g }|j                  dd¬«      }|s|j                  dd¬«      }|�rv|j                  d«      D ](  }|j                  d¬	«      }|sŒ|
j                  |«       Œ* |j                  d«      D ]–  }g }|j                  d«      D ][  }|j                  ddg«      D �cg c]  }|j                  d¬	«      ‘Œ }}|sŒ6|j                  ddj                  |«      z   dz   «       Œ] |sŒw|
j                  dj                  |«      «       Œ˜ |j                  d«      D ]|  }|j                  d d
«      Št        ˆfd!„d"D «       «      sŒ*|j                  d¬	«      xs t        j                   j#                  ‰«      }t%        d#‰«      }|j                  ||d$œ«       Œ~ d%j                  |
«      }t'        |j                  «       «      d&k  r$d'| › d(|› d)�}|r|D ]  }|d*|d   › d+|d,   › d-�z  }Œ ||||rt)        j*                  |d.¬/«      fS d
fS #  |}Y �ŒxY wc c}w )0zCFetch detail page, return (title, date, content, attachments_json).r   r   r   r   Úh3r+   )Úclass_Tr   r   ÚmetaÚnameÚArticleTitleÚcontentÚPubDatez%Y/%m/%d %H:%M:%Sz%Y-%m-%dÚdivÚzoom)ÚidÚentryÚpÚtableÚtrÚtdÚthz| z | z |ú
r   r   c              3   ó\   •K  — | ]#  }‰j                  «       j                  |«      –— Œ% y ­w)N)ÚlowerÚendswith)Ú.0Úextr   s     €r   ú	<genexpr>zfetch_detail.<locals>.<genexpr>q   s"   øè ø€ Òt°#�4—:‘:“<×(Ñ(¨×-Ñtùs   ƒ),)z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarr   )r2   r'   z

é   z<p><a href="z">z</a></p>u   
ðŸ“Ž [z](r'   ú)F)Úensure_ascii)r   r   r   r   r    Úfindr$   r   r   ÚstrptimeÚstrftimer!   r%   ÚjoinÚanyÚosÚpathÚbasenamer   ÚlenÚjsonÚdumps)r'   r(   r)   r/   r+   ÚmtÚdate_strÚmÚrawÚdtÚcontent_partsÚattachmentsr7   r:   Útxtr;   Úrowsr<   r=   Úcellsr   ÚfnameÚfurlr4   Úattr   s                            @r   Úfetch_detailra   <   s/  ø€ ä�;‰;�s Bˆ;Ó'€DØ€D„MÜ˜Ÿ™ MÓ2€Dð 
�‰�4 ˆÓ	(€BÙ')ˆB�K‰K˜dˆKÔ#¨r€EÙØ�Y‰Y�v ¨Ð7Ó8ˆÙ�"—&‘&˜Ô#Ø—F‘F˜9Ó%×+Ñ+Ó-ˆEð €HØ�	‰	�&˜6 9Ð-Ó.€AÙˆQ�U‰U�9ÔØ�e‰e�IÓ×$Ñ$Ó&ˆð	Ü×"Ñ" 3Ð(;Ó<ˆBØ—{‘{ :Ó.ˆHð
 €MØ€Kà�9‰9�U˜vˆ9Ó&€DÙØ�y‰y˜ wˆyÓ/ˆâà—‘˜sÓ#ò 	*ˆAØ—*‘* 4�*Ó(ˆCÚØ×$Ñ$ SÕ)ð	*ð —]‘] 7Ó+ò 	6ˆEØˆDØ—n‘n TÓ*ò A�Ø;=¿;¹;ÈÈdÀ|Ó;TÖU°R˜Ÿ™¨4˜Õ0ÐU�ÐUÚØ—K‘K  u§z¡z°%Ó'8Ñ 8¸4Ñ ?Õ@ðAò Ø×$Ñ$ T§Y¡Y¨t£_Õ5ð	6ð —‘˜sÓ#ò 	AˆAØ—5‘5˜ Ó$ˆDÜÓtÐ9sÔtÕtØŸ
™
¨˜
Ó.ÒH´"·'±'×2BÑ2BÀ4Ó2H�ÜÐ;¸TÓB�Ø×"Ñ"¨E¸$Ñ#?Õ@ð	Að �k‰k˜-Ó(€Gô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆÙØ"ò C�Ø˜X c¨&¡k ]°"°S¸±Z°LÀÐBÑB‘ðCð �(˜GÑT_¤T§Z¡Z°È%Ô%PÐgÐgÐegÐgÐgøð[	Ø‹Hüò* Vs   Ã0'L- ÇL7Ì-L4é   c                 ó€  — g }t        d| dz   «      D ]l  }t        d|› d�«       t        |«      }|st        d|› �«        n@t        dt        |«      › d�«       |j	                  |«       t        j                  d«       Œn t        dt        |«      › �«       t        «       }d}d}d}|D ]«  \  }}		 |j                  d	|	f«      }
|
j                  «       r|dz  }Œ0t        |	«      \  }}}}|j                  t        t        |	|xs ||xs d
|t        |f«       |j                  «        |dz  }t        d|› d|xs |› �«       t        j                  d«       Œ­ |j!                  «        t        d|› d|› d|› �«       |S # t        $ r6}|dz  }t        d|	› d|› �«       t        j                  d«       Y d }~�Œd }~ww xY w)Nr   zFetching list page z...z  No items on page z  Found z itemsz
Total items: r   z)SELECT id FROM gov_raw WHERE page_url = ?r   z  [z] g      à?z	  ERROR: z - é   z
Done. Inserted: z, Skipped: z
, Errors: )ÚrangeÚprintr-   rQ   ÚextendÚtimeÚsleepr   r   Úfetchonera   Ú
INSERT_SQLÚ	SITE_NAMEÚCATEGORYÚcommitÚ	ExceptionÚclose)Ú	max_pagesÚ	all_itemsr&   r*   r   ÚinsertedÚskippedÚerrorsr+   r'   ÚcurÚd_titleÚd_dater4   rZ   Úes                   r   Úcrawlrz   ‚   sÏ  € Ø€IÜ�a˜ Q™Ó'ò ˆÜÐ# D 6¨Ð-Ô.Ü˜4Ó ˆÙÜÐ'¨ vÐ.Ô/ÙÜ�œ˜U›˜ FÐ+Ô,Ø×Ñ˜ÔÜ�
‰
�1�ðô 
ˆOœC 	›NÐ+Ð
,Ô-ä‹9€DØ€HØ€GØ€Fàò ‰
ˆˆsð	Ø—,‘,ÐJÈSÈFÓSˆCØ�|‰|Œ~Ø˜1‘�Øä4@ÀÓ4EÑ1ˆG�V˜W kà�L‰LœÜ˜3 Ò 0¨5°&²,¸BØœ ;ð&ô ð �K‰KŒMØ˜‰MˆHÜ�C˜�z  GÒ$4¨uÐ#5Ð6Ô7Ü�J‰J�s�Oð!ð. 	‡J�J„LÜ	Ð˜x˜j¨°G°9¸JÀvÀhÐ
OÔPØ€Oøô ò 	Ø�a‰KˆFÜ�I˜c˜U # a SÐ)Ô*Ü�J‰J�q�MŠMûð	ús   Â1(E>ÃA<E>Å>	F=Æ+F8Æ8F=Ú__main__z--testÚ
store_true)Úactionz--max-pages)ÚtypeÚdefaultz=== TEST MODE ===é   z
TITLE: zURL: zDETAIL: zDATE: z	CONTENT: i,  zATTACH: z
Total on page 1: )rq   )r   )rb   )-Ú__doc__rR   r"   Úsysrh   Úrequestsr   rN   Úbs4r   Úurllib.parser   r   r
   rl   rm   ÚHEADERSÚSessionr   ÚheadersÚupdaterk   r   r-   ra   rz   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentÚintÚ
parse_argsÚargsÚtestrf   r*   r+   r'   rw   rx   r4   rZ   rQ   rq   © r   r   ú<module>r”      s¤  ðñ÷
 2× 1× 1Ó 1Ý Ý  Ý à
€Ø6€	Ø€ð DØZØ0ñ€ð
 ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ ð(€
ò
óò.ChóL,ð^ ˆzÒÛØ$ˆX×$Ñ$Ó&€FØ
×Ñ˜¨ÐÔ6Ø
×Ñ˜¨C¸ÐÔ;Ø×ÑÓ€Dà‡y‚yÙÐ!Ô"Ù˜1“ˆØ  ˜)ò 	,‰JˆE�3Ù�I˜e˜WÐ%Ô&Ù�E˜#˜�-Ô Ù4@ÀÓ4EÑ1ˆG�V˜W kÙ�H˜W˜IÐ&Ô'Ù�F˜6˜(Ð#Ô$Ù�I˜g d s˜m˜_Ð-Ô.Ù�H˜[˜MÐ*Õ+ð	,ñ 	Ð#¡C¨£J <Ð0Õ1á˜Ÿ™Ö'ð) r   