Ë
    Í«£ju"  ã                   óÊ   — 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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.date
åˆ†é¡µ: /content/column/18255837?pageIndex=Nï¼ˆ72é¡µï¼Œ24æ�¡/é¡µï¼Œ1423æ�¡ï¼‰
è¯¦æƒ…: div.newscontnet + meta ArticleTitle/PubDate/ContentSource
é    N)ÚBeautifulSoup)Úurljoinzhttps://www.dangshan.gov.cnz/gsgg/index.htmlz%/content/column/18255837?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                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparser   )ÚtableÚbase_urlÚurllibÚtblr	   r
   r   r   s           úcrawl_dangshan.pyÚhtml_table_to_htmlr   %   sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                  ó|   — t        j                  t        «      } | j                  d«       | j                  d«       | S )NzPRAGMA journal_mode=WALzPRAGMA busy_timeout=5000)Úsqlite3ÚconnectÚDB_PATHÚexecute)Úconns    r   Úinit_dbr$   2   s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   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éÈ   r   )	ÚrequestsÚSessionr   ÚHEADERSÚencodingÚstatus_coder   ÚtextÚ	Exception)ÚurlÚsessionÚsÚresps       r   Úget_soupr7   9   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)r   )Úxs    r   ú<lambda>z$extract_list_items.<locals>.<lambda>G   s   € ¨!Ò*D°
¼cÀ!»fÐ0D€ r   ©Úclass_ÚliF©Ú	recursiver	   r
   ÚtitleT©Ústripr   r   Úspan)rC   r3   Údate)	Úfindr   r   Úget_textrE   r   r   ÚBASE_URLÚappend)
ÚsoupÚitemsr9   r@   r	   rC   r
   Úfull_urlrF   rG   s
             r   Úextract_list_itemsrO   E   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 }‰�rß‰j                  ddg«      D ]  }|j                  «        Œ ˆfd„}‰j                  g d¢d¬«      D ]ð  }|j                  dk(  r!t!        || «      }|sŒ!|
j#                  |«       Œ3|j                  dv r@ ||«      rŒJ|j%                  dd¬«      }|sŒ`t'        |«      d kD  sŒo|
j#                  |«       Œ�|j                  d!k(  sŒ‘|j                  d"d	«      }|j                  d#d	«      }|sŒ¸|j)                  d$«      st+        | |«      }|
j#                  d%|xs d	›d&|›d'�«       Œò ‰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.œ«       Œ– d/j5                  |
«      }t'        |j                  «       «      d0k  rd1| ›d2|xs | j3                  d,«      d-   ›d3�}t'        |«      dkD  r|d d n|}|rt7        j8                  |d4¬5«      nd	}||||||fS # t
        $ r(}t        d|z  t        j                  ¬«       Y d }~yd }~ww xY w)6Nr&   r'   r*   r+   )NNNNz  [ERROR] fetch detail: %s)Úfiler   r   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDateé
   ÚContentSourceÚdivÚnewscontnetr>   zj-fontContentÚscriptÚstylec                 ó–   •— | j                   }|r:|‰k7  r5|j                  dk(  r|j                  d«      ry|j                   }|r|‰k7  rŒ5y)u#   è·³è¿‡çˆ¶çº§divä¸­åŒ…å�«tableçš„<p>rZ   r   TF)ÚparentrS   rH   )ÚelÚpÚcontent_divs     €r   Ú_has_table_ancestorz+extract_detail.<locals>._has_table_ancestor€   sH   ø€ à—	‘	ˆAÙ˜˜[Ò(Ø—6‘6˜U’? q§v¡v¨g¤ØØ—H‘H�ñ ˜˜[Ó(ð r   )ra   r   Úh1Úh2Úh3Úh4r   TrA   r   )ra   rd   re   rf   rg   ú rD   é   r   r   Úaltr   z![z](ú)r	   )r
   r
   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$ú/éÿÿÿÿ)rS   r3   z

é   z<p><a href="z">z</a></p>F)Úensure_ascii)r,   r   r.   r/   r0   r2   ÚprintÚsysÚstderrr   r1   rH   rE   r   Ú	decomposerS   r   rK   rI   Úlenr   r   ÚreÚsearchÚIÚsplitÚjoinÚjsonÚdumps)r3   ÚrÚerL   rC   Ú
meta_titleÚpublish_dateÚmeta_pubÚ
source_urlÚmeta_srcÚcontent_partsÚattachmentsÚnoiserc   ÚchildÚtbl_htmlÚtxtr   rj   r	   r
   Ú	full_hrefrV   ÚsummaryÚattach_jsonrb   s                            @r   Úextract_detailrŒ   Y   s£  ø€ ð&Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ)ð  ô ˜Ÿ™ Ó/€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¨-�)Ó8Òd¸D¿I¹IÀeÐTc¸IÓ<d€KØ€MØ€KâØ ×)Ñ)¨8°WÐ*=Ó>ò 	ˆEØ�O‰OÕð	ô	ð !×)Ñ)Ò*WÐcgÐ)Óhò 	IˆEØ�z‰z˜WÒ$Ü-¨e°SÓ9�ÚØ!×(Ñ(¨Õ2Ø—‘Ð<Ñ<Ù& uÔ-ØØ—n‘n S°�nÓ5�Úœ3˜s›8 a›<Ø!×(Ñ(¨Õ-à—‘˜uÓ$Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÚØŸ>™>¨&Ô1Ü% c¨3Ó/˜Ø!×(Ò(¸º	¸r¹	Â3Ð)GÕHð%	Ið* ×%Ñ% c°Ð%Ó5ò 	ˆAØ�V‘9—?‘?Ó$ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ$(§O¡O°FÔ$;™DÄÈÈdÓAS�	Ø×"Ñ"ØŸJ™J¨T˜JÓ2ÒI°d·j±jÀ³oÀbÑ6IØ$ñ$õ ð		ð �k‰k˜-Ó(€Gô ˆ7�=‰=‹?Ó˜bÓ Ú25°uÒ7RÀÇ	Á	È#ÃÈrÑ@RÑ7RÐSˆä" 7›|¨cÒ1ˆg�d�s‰m°w€GÙAL”$—*‘*˜[°uÕ=ÐRT€Kà�, 
¨G°W¸kÐIÐIøôc ò &ÜÐ*¨QÑ.´S·Z±ZÕ@Ü%ûð&ús   ƒ2N Î	O
Î"OÏO
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}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éH   é   u   åˆ—è¡¨é¡µ %d/%d: %sz  FAILEDu     ç©ºåˆ—è¡¨ï¼Œå�œæ­¢r3   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...rC   é(   rG   r+   g333333Ó?z  ERROR: %su1   
å®Œæˆ�ï¼�æ–°å¢ž%dæ�¡ï¼Œæ›´æ–°%dæ�¡ï¼Œé”™è¯¯%dæ�¡)"ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚ
parse_argsÚfullÚ	max_pagesr,   r-   ÚsetÚrangeÚLIST_URL_P1ÚLIST_URL_PNÚformatrp   r7   rO   ÚaddrK   rt   ÚtimeÚsleepr$   Ú	enumeraterŒ   r"   Ú	SITE_NAMErE   ÚCATEGORYÚGROUPÚcommitr2   Úclose)r–   ÚparserÚargsr�   r4   Ú	all_itemsÚ	seen_urlsÚpager3   rL   rM   Ú	new_countÚitemr#   ÚinsertedÚupdatedÚerrorsÚ
INSERT_SQLÚidxrC   Úpub_dater�   rV   rŠ   r„   Úfinal_titleÚ
final_dateÚfinal_summaryr}   s                                r   Úmainr¼   ³   s   € ÛØ×$Ñ$Ð1[Ð$Ó\€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Ø€GØ€Fð1€Jô ˜yÓ)ò ‰	ˆˆTð	ÜÐ# s¨Q¡w´°I³ÀÀWÁÈcÈrÐ@RÐ&SÑSÔTÜIWÐX\Ð]bÑXcÓIdÑFˆE�8˜Z¨°'¸;Øˆ}Ø˜!‘�ØàÒ0 4¨¡=ˆKØ!Ò1 T¨&¡\ˆJÙ8?˜GÒ4 w¨t°¡}À[ˆMà�L‰L˜Ü˜:Ò4¨¨e©°d¸5±kØ×!Ñ!Ó# ZØ×#Ñ#Ó% wÜ˜+¤uð	&ô ð �K‰KŒMØ˜‰MˆHÜ�J‰J�s�Oð)ð4 	‡J�J„LÜ	Ð
>À(ÈGÐU[ÐA\Ñ
\Ô]Ø€Oøô ò 	Ü�- !Ñ#Ô$Ø�a‰KŽFûð	ús   Æ>?J:Ç>BJ:Ê:	K!ËKËK!Ú__main__)r   )N)Ú__doc__ru   rq   rz   r¤   r,   r   Úbs4r   r   r   rJ   r    r¡   r!   r§   r¨   r©   r.   rš   r   r$   r7   rO   rŒ   r¼   Ú__name__© r   r   ú<module>rÂ      s¤   ðñó 
Û 
Û Û Û Û Ý Ý  à(€ØÐ+Ñ+€ØÐ@Ñ@€Ø
€Ø0€	Ø€Ø€ð DØZØ0ñ€ð €	óòó	òò(WJòtLð^ ˆzÒÙ…Fð r   