Ë
    V_Š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mZ ddl	m
Z
 dZedz   Zedz   ZdZd	Zd
Zd
ZddddœZdZd„ Zdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uõ   
å‡¤é˜³åŽ¿äººæ°‘æ”¿åºœ - çŽ¯è¯„å…¬ç¤ºçˆ¬è™«
CMS: Lonsunï¼ˆè“�æ±›ï¼‰
åˆ—è¡¨: ul.doc_list > li > a[href] + span
åˆ†é¡µ: /content/column/161694530?pageIndex=Nï¼ˆ48é¡µï¼Œ20æ�¡/é¡µï¼‰
è¯¦æƒ…: div.j-fontContentï¼ˆæ–‡æœ¬+<br>ç»“æž„ï¼Œæ— <p>/<table>ï¼‰
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.fengyang.gov.cnz/zwdt/ztzl/rdzt/hpgs/index.htmlz&/content/column/161694530?pageIndex={}z/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-Languageé   c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    ú(/root/gov_crawler/crawl_fengyang_hpgs.pyÚinit_dbr   %   s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kó    c                 óÜ   — |xs t        j                  «       }	 |j                  | t        d¬«      }d|_        |j
                  dk7  ry t        |j                  d«      S # t        $ r Y y w xY w)Né   ©ÚheadersÚtimeoutúutf-8éÈ   úhtml.parser)	ÚrequestsÚSessionÚgetÚHEADERSÚencodingÚstatus_coder   ÚtextÚ	Exception)ÚurlÚsessionÚsÚresps       r   Úget_soupr$   ,   si   € ØÒ%”8×#Ñ#Ó%€AðØ�u‰u�S¤'°2ˆuÓ6ˆØˆŒØ×Ñ˜sÒ"ØÜ˜TŸY™Y¨Ó6Ð6øÜò Ùðús   š.A Á	A Á	A+Á*A+c                 ó  — g }| j                  dd„ ¬«      }|s|S |j                  dd¬«      D ]Ó  }|j                  d«      }|r|j                  d«      sŒ(|j                  d	«      xs |j                  d
¬«      xs dj	                  «       }|sŒb|d   j	                  «       }|j                  d«      r|nt        t        |«      }|j                  d«      }|r|j                  d
¬«      nd}	|j                  |||	dœ«       ŒÕ |S )NÚulc                 ó$   — | xr dt        | «      v S )NÚdoc_list)Ústr)Úxs    r   ú<lambda>z$extract_list_items.<locals>.<lambda>:   s   € ¨!Ò*D°
¼cÀ!»fÐ0D€ r   ©Úclass_ÚliF)Ú	recursiveÚaÚhrefÚtitleT©ÚstripÚ ÚhttpÚspan)r2   r    Údate)	ÚfindÚfind_allr   Úget_textr4   Ú
startswithr   ÚBASE_URLÚappend)
ÚsoupÚitemsr&   r.   r0   r2   r1   Úfull_urlr7   r8   s
             r   Úextract_list_itemsrB   8   sò   € Ø€EØ	�‰�4Ñ DˆÓ	E€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò FˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØØ—‘�w“Ò? 1§:¡:°D :Ó#9Ò?¸R×FÑFÓHˆÙØØ�‰y�‰Ó ˆØŸ?™?¨6Ô2‘4¼ÄÈ$Ó8OˆØ�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜u¨X¸tÑDÕEðFð €Lr   c           	      ó:
  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry	 t        |j                  d«      }d	}|j                  d
ddi¬«      }|r$|j                  d«      r|d   j                  «       }d	}|j                  d
ddi¬«      }|r'|j                  d«      r|d   j                  «       d d }d	}|j                  d
ddi¬«      }	|	r$|	j                  d«      r|	d   j                  «       }|j                  dd¬«      xs |j                  dd¬«      }
g }g }g }|
�r|
j                  ddg«      D ]  }|j                  «        Œ |
j                  D �]ç  }|j                   €4|j                  «       }|sŒ#t#        |«      dkD  sŒ2|j%                  |«       ŒD|j                   dk(  rŒT|j                   dk(  rr|j                  dd	«      }|j                  dd	«      }|sŒŠ|j'                  d«      st)        | |«      }|j%                  |«       |j%                  d|xs d	›d|›d �«       ŒÕ|j                   d!k(  rœ|j+                  d"¬#«      }|j                  d$d	«      }|s�Œ|s�Œ|j'                  d«      st)        | |«      }t-        j.                  d%|t,        j0                  «      r|j%                  ||d&œ«       |j%                  d'|›d|›d �«       �Œ€|j                   d(v s�Œ�|j+                  d)d"¬#«      }|s�Œ§t#        |«      dkD  s�Œ·|j                  d!d"¬*«      D ]”  }|d$   j                  «       }t-        j.                  d%|t,        j0                  «      sŒ<|j'                  d«      r|nt)        | |«      }|j%                  |j+                  d"¬#«      xs |j3                  d+«      d,   |d&œ«       Œ– |j                  d«      D ]b  }|j                  dd	«      }|j                  dd	«      }|sŒ*|j'                  d«      st)        | |«      }|j%                  d|xs d	›d|›d �«       Œd |j%                  |«       �Œê d-j5                  |«      }t#        |j                  «       «      d.k  r.d/| ›d0|xs | j3                  d+«      d,   ›d1�}|D ]
  }|d2|z  z  }Œ t#        |«      dkD  r|d d n|}|rt7        j8                  |d3¬4«      nd	}||||||fS # t
        $ r(}t        d|z  t        j                  ¬«       Y d }~yd }~ww xY w)5Nr   r   r   r   )NNNNNNz  [ERROR] fetch detail: %s)Úfiler   r5   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDateé
   ÚContentSourceÚdivzj-fontContentr,   ÚnewscontnetÚscriptÚstyleé   ÚbrÚimgÚsrcÚaltr6   z![z](ú)r0   Tr3   r1   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$)rF   r    ú[)ÚprM   ú )r1   ú/éÿÿÿÿz

é   z<p><a href="z">z</a></p>z
![](%s)F)Úensure_ascii)r   r   r   r   r   r   ÚprintÚsysÚstderrr   r   r9   r4   r:   Ú	decomposeÚchildrenrF   Úlenr>   r<   r   r;   ÚreÚsearchÚIÚsplitÚjoinÚjsonÚdumps)r    ÚrÚer?   r2   Ú
meta_titleÚpublish_dateÚmeta_pubÚ
source_urlÚmeta_srcÚcontent_divÚcontent_partsÚattachmentsÚimagesÚnoiseÚchildr   rT   rU   Útxtr1   r0   ÚahÚfull_ahrS   rI   Úimg_srcÚsummaryÚattach_jsons                                r   Úextract_detailr~   L   sº  € ð2Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ5ð  ô ˜Ÿ™ Ó/€Dà€EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆà€LØ�y‰y˜¨°	Ð':ˆyÓ;€HÙ�H—L‘L Ô+Ø 	Ñ*×0Ñ0Ó2°3°BÐ7ˆà€JØ�y‰y˜¨°Ð'@ˆyÓA€HÙ�H—L‘L Ô+Ø˜iÑ(×.Ñ.Ó0ˆ
à—)‘)˜E¨/�)Ó:Òd¸d¿i¹iÈÐVc¸iÓ>d€KØ€MØ€KØ€FâØ ×)Ñ)¨8°WÐ*=Ó>ò 	ˆEØ�O‰OÕð	ð !×)Ñ)ó -	.ˆEØ�z‰zÐ!Ø—{‘{“}�ÚœC ›I¨›MØ!×(Ñ(¨Õ.Ø—‘˜tÒ#ØØ—‘˜uÒ$Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÚØŸ>™>¨&Ô1Ü% c¨3Ó/˜Ø—M‘M #Ô&Ø!×(Ò(¸º	¸r¹	Â3Ð)GÕHØ—‘˜sÒ"Ø—n‘n¨4�nÓ0�Ø—y‘y ¨Ó,�Û›4ØŸ?™?¨6Ô2Ü& s¨DÓ1˜ä—y‘yÐ!FÈÌbÏdÉdÔSØ#×*Ñ*°CÀÑ+EÔFØ!×(Ò(²sºDÐ)AÖBØ—‘˜|Ó+Ø—n‘n S°�nÓ5�Ûœ3˜s›8 aœ<à"Ÿ^™^¨C°d˜^Ó;ò ˜Ø˜v™YŸ_™_Ó.˜ÜŸ9™9Ð%JÈBÔPR×PTÑPTÕUØ,.¯M©M¸&Ô,A¡bÄwÈsÐTVÓGW˜GØ'×.Ñ.Ø()¯
©
¸¨
Ó(>Ò(SÀ"Ç(Á(È3Ã-ÐPRÑBSØ'.ñ0õ ð	ð  %Ÿ~™~¨eÓ4ò Q˜Ø!Ÿg™g e¨RÓ0˜Ø!Ÿg™g e¨RÓ0˜ÚØ#&§>¡>°&Ô#9Ü&-¨c°3Ó&7 Ø)×0Ò0ÀÂ	ÀrÁ	Ê3Ð1OÕPðQð "×(Ñ(¨Ö-ð[-	.ð^ �k‰k˜-Ó(€Gô ˆ7�=‰=‹?Ó˜bÓ Ú25°uÒ7RÀÇ	Á	È#ÃÈrÑ@RÑ7RÐSˆØò 	-ˆGØ�{ WÑ,Ñ,‰Gð	-ô  # 7›|¨cÒ1ˆg�d�s‰m°w€GÙAL”$—*‘*˜[°uÕ=ÐRT€Kà�, 
¨G°W¸kÐIÐIøôs ò 2ÜÐ*¨QÑ.´S·Z±ZÕ@Ü1ûð2ús   ‚2S) Ó)	TÓ2TÔTc                  óÂ  — dd l } | j                  d¬«      }|j                  dt        t        ¬«       |j                  dd¬«       |j                  «       }|j                  rd	n|j                  }t        j                  «       }g }t        «       }t        d
|d
z   «      D ]á  }|d
k(  rt        nt        j                  |«      }t        d|||fz  «       t!        ||«      }	|	st        d«       ŒNt#        |	«      }
|
st        d«        n|d}|
D ]4  }|d   |vsŒ|j%                  |d   «       |j'                  |«       |d
z  }Œ6 t        dt)        |
«      |t)        |«      fz  «       |dk(  r nt+        j,                  d«       Œã t        dt)        |«      z  «       t/        «       }d}d}d}t1        |«      D ]Ý  \  }}	 t        d|d
z   t)        |«      |d   d d fz  «       t3        |d   «      \  }}}}}}|€|d
z  }ŒG|xs |d   }|xs |d   }|r	|xs |d d n|}|j5                  |t6        |xs |d   |d   |j9                  «       ||j9                  «       |t:        |t<        f
«       |j?                  «        |d
z  }t+        j,                  d«       Œß |jC                  «        t        d||fz  «       |S # t@        $ r}t        d|z  «       |d
z  }Y d }~�Œ$d }~ww xY w)Nr   u   å‡¤é˜³åŽ¿çŽ¯è¯„å…¬ç¤ºçˆ¬è™«)Údescriptionz--max-pages)ÚtypeÚdefaultz--fullÚ
store_true)Úactioné0   é   u   åˆ—è¡¨é¡µ %d/%d: %sz  FAILEDu     ç©ºåˆ—è¡¨ï¼Œå�œæ­¢r    u)     æœ¬é¡µ%dæ�¡ï¼Œæ–°å¢ž%dæ�¡ï¼Œç´¯è®¡%dæ�¡g      à?u'   
å…±%dç¯‡æ–‡ç« ï¼Œå¼€å§‹æŠ“å�–è¯¦æƒ…...z¿INSERT OR IGNORE INTO gov_raw
        (site_name, source_url, page_url, title, publish_date, summary, content, category, attachments, group_name)
        VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)z  [%d/%d] %s...r2   é(   r8   r   g333333Ó?z  ERROR: %su#   
å®Œæˆ�ï¼�æ–°å¢ž%dæ�¡ï¼Œé”™è¯¯%dæ�¡)"ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚ
parse_argsÚfullÚ	max_pagesr   r   ÚsetÚrangeÚLIST_URL_P1ÚLIST_URL_PNÚformatr^   r$   rB   Úaddr>   rc   ÚtimeÚsleepr   Ú	enumerater~   r   Ú	SITE_NAMEr4   ÚCATEGORYÚGROUPÚcommitr   Úclose)rˆ   ÚparserÚargsr�   r!   Ú	all_itemsÚ	seen_urlsÚpager    r?   r@   Ú	new_countÚitemr   ÚinsertedÚerrorsÚ
INSERT_SQLÚidxr2   Úpub_dateÚsrc_urlrI   r|   rt   Úfinal_titleÚ
final_dateÚfinal_summaryrl   s                               r   Úmainr®   ®   sø  € ÛØ×$Ñ$Ð1NÐ$ÓO€FØ
×Ñ˜¬C¼ÐÔCØ
×Ñ˜¨ÐÔ6Ø×ÑÓ€Dà—i’i‘ T§^¡^€Iä×ÑÓ €GØ€IÜ“€Iä�a˜ Q™Ó'ò ˆØ! QšY�k¬K×,>Ñ,>¸tÓ,DˆÜÐ# t¨Y¸Ð&<Ñ<Ô=Ü˜˜WÓ%ˆÙÜ�*ÔØä" 4Ó(ˆÙÜÐ(Ô)Ùàˆ	Øò 	ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Ô&Ø˜Q‘‘	ð		ô 	Ð9¼SÀ»ZÈÔTWÐXaÓTbÐ<cÑcÔdØ˜Š>ÙÜ�
‰
�3�ð/ô2 
Ð
4´s¸9³~Ñ
EÔFÜ‹9€DØ€HØ€Fð1€Jô ˜yÓ)ò ‰	ˆˆTð	ÜÐ# s¨Q¡w´°I³ÀÀWÁÈcÈrÐ@RÐ&SÑSÔTÜFTÐUYÐZ_ÑU`ÓFaÑCˆE�8˜W g¨w¸Øˆ}Ø˜!‘�ØàÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJÙ8?˜GÒ4 w¨t°¡}À[ˆMà�L‰L˜Ü˜7Ò1 d¨5¡k°4¸±;Ø×!Ñ!Ó# ZØ×#Ñ#Ó% wÜ˜+¤uð	&ô ð �K‰KŒMØ˜‰MˆHÜ�J‰J�s�Oð)ð4 	‡J�J„LÜ	Ð
0°H¸fÐ3EÑ
EÔFØ€Oøô ò 	Ü�- !Ñ#Ô$Ø�a‰KŽFûð	ús   Æ<?J7Ç<BJ7Ê7	KË KËKÚ__main__)N)Ú__doc__rd   r_   ri   r–   r   r   Úbs4r   Úurllib.parser   r=   r’   r“   r
   r™   rš   r›   r   rŒ   r   r$   rB   r~   r®   Ú__name__© r   r   ú<module>rµ      sŸ   ðñó 
Û 
Û Û Û Û Ý Ý  à(€ØÐ:Ñ:€ØÐAÑA€Ø
€Ø6€	Ø€Ø€ð DØZØ0ñ€ð €	òó	òò(_JòDKð\ ˆzÒÙ…Fð r   