Ë
    Í«£jm  ã                   ó¾   — 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dZdZd	xZZd
dddœZdZdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u0  
å¤©å…¨åŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Šçˆ¬è™«
CMS: LayUI æ¡†æž¶è‡ªå®šä¹‰ï¼ˆå�Œcrawl_tqx.pyç»“æž„ï¼‰
åˆ—è¡¨: ul.content-list > li > a[title] + span
åˆ†é¡µ: /gongkai/jichu/40016.html?page=Nï¼ˆ100é¡µï¼Œ20æ�¡/é¡µï¼‰
è¯¦æƒ…: div.msg-content.fr > div.mt30.xqing-web-box + meta ArticleTitle/PubDate/ContentSource
é    N)ÚBeautifulSoup)Úurljoinzhttp://www.tqx.gov.cnz/gongkai/jichu/40016.htmlz/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_tqx_gggs.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$   *   s/   € Ü�?‰?œ7Ó#€DØ‡L�LÐ*Ô+Ø‡L�LÐ+Ô,Ø€Kr   c                 ó¤   — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  ry t        |j                  d«      S #  Y y xY w)Né   ©ÚheadersÚtimeoutúutf-8éÈ   r   )Úrequestsr   ÚHEADERSÚencodingÚstatus_coder   Útext)ÚurlÚrs     r   Úget_soupr3   1   sJ   € ðÜ�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØÜ˜QŸV™V ]Ó3Ð3øðÙús   ‚2A µ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Úulzcontent-list©Úclass_ÚliF©Ú	recursiver	   r
   ÚtitleT©Ústripr   r   Úspan)r;   r1   Údate)	Úfindr   r   Úget_textr=   r   r   ÚBASE_URLÚappend)
ÚsoupÚitemsr5   r8   r	   r;   r
   Úfullr>   r?   s
             r   Úextract_list_itemsrG   <   sñ   € Ø€EØ	�‰�4 ˆÓ	/€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò BˆØ�G‰G�C‹LˆÙ˜Ÿ™˜fœØØ—‘�w“Ò? 1§:¡:°D :Ó#9Ò?¸R×FÑFÓHˆÙØØ�‰y�‰Ó ˆØ—‘ vÔ.‰t´G¼HÀdÓ4KˆØ�w‰w�v‹ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆØ�‰˜u¨T¸4Ñ@ÕAðBð €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                  «       }|s%|j                  d«      }|r|j                  d¬«      }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                  «        Œ |	j                  dd„ ¬«      xs |	Šˆfd„}‰j                  g d¢d¬«      D ]ñ  }|j                   dk(  r!t#        || «      }|sŒ!|
j%                  |«       Œ3|j                   d k(  r@ ||«      rŒK|j                  d!d¬«      }|sŒat'        |«      d"kD  sŒp|
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/   |d0œ«       Œ– d1j5                  |
«      }t'        |j                  «       «      d2k  rd3| ›d4|xs | j3                  d.«      d/   ›d5�}t'        |«      dkD  r|d d n|}||||||rt7        j8                  |d6¬7«      fS d	fS # t
        $ r(}t        d|z  t        j                  ¬«       Y d }~yd }~ww xY w)8Nr&   r'   r*   r+   )NNNNNNz  [ERROR] fetch: %s)Úfiler   r   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1Tr<   ÚPubDateé
   ÚContentSourceÚdivzmsg-contentr6   c                 ó@   — | xr dt        | «      j                  «       v S ©NÚxqing©r   Úlower©Úxs    r   ú<lambda>z extract_detail.<locals>.<lambda>o   s"   € ÐVWÒVuÐ\cÔgjÐklÓgm×gsÑgsÓguÐ\u€ r   ÚscriptÚstylec                 ó@   — | xr dt        | «      j                  «       v S rU   rW   rY   s    r   r[   z extract_detail.<locals>.<lambda>w   s   € °Ò1P°wÄ#ÀaÃ&Ç,Á,Ã.Ð7P€ r   c                 ó–   •— | j                   }|r:|‰k7  r5|j                  dk(  r|j                  d«      ry|j                   }|r|‰k7  rŒ5y)NrS   r   TF)ÚparentrK   r@   )ÚelÚpÚinners     €r   Ú_has_table_ancestorz+extract_detail.<locals>._has_table_ancestory   sF   ø€ Ø—	‘	ˆAÙ˜˜Uš
Ø—6‘6˜U’? q§v¡v¨g¤ØØ—H‘H�ñ ˜˜U›
ð r   )rb   r   r   r9   r   rb   ú é   r   r   Úaltr   z![z](ú)r	   )r
   r
   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$ú/éÿÿÿÿ)rK   r1   z

é   z<p><a href="z">z</a></p>F)Úensure_ascii)r,   r   r-   r.   r/   Ú	ExceptionÚprintÚsysÚstderrr   r0   r@   r=   rA   r   Ú	decomposerK   r   rC   Úlenr   r   ÚreÚsearchÚIÚsplitÚjoinÚjsonÚdumps)r1   r2   ÚerD   r;   ÚmrO   Úpub_dateÚsrc_urlrS   ÚpartsÚattachÚnoiserd   ÚchildÚtbl_htmlÚtxtr   rg   r	   ÚhÚfhrN   Úsummaryrc   s                           @r   Úextract_detailr‡   P   sÁ  ø€ ð2Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�=‰=˜CÒØ5ð  ô ˜Ÿ™ Ó/€Dà€EØ�	‰	�& ¨Ð 8ˆ	Ó9€AÙˆQ�U‰U�9ÔØ�)‘×"Ñ"Ó$ˆÙØ�Y‰Y�t‹_ˆÙØ—K‘K d�KÓ+ˆEà€HØ�	‰	�& ¨Ð 3ˆ	Ó4€AÙˆQ�U‰U�9ÔØ�Y‘<×%Ñ%Ó'¨¨Ð,ˆà€GØ�	‰	�& ¨Ð 9ˆ	Ó:€AÙˆQ�U‰U�9ÔØ�I‘,×$Ñ$Ó&ˆà
�)‰)�E -ˆ)Ó
0Ò
v°D·I±I¸eÑLu°IÓ4v€CØ€EØ€Fâ
Ø—\‘\ 8¨WÐ"5Ó6ò 	ˆEØ�O‰OÕð	ð —‘˜Ñ'P�ÓQÒXÐUXˆô	ð —^‘^Ò$9ÀT�^ÓJò 	AˆEØ�z‰z˜WÒ$Ü-¨e°SÓ9�ÚØ—L‘L Õ*Ø—‘˜sÒ"Ù& uÔ-ØØ—n‘n S°�nÓ5�Úœ3˜s›8 a›<Ø—L‘L Õ%Ø—‘˜uÓ$Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÚØŸ>™>¨&Ô1Ü% c¨3Ó/˜Ø—L’L°²	°r±	º3Ð!?Õ@ð#	Að& —‘ ¨$�Ó/ò 	_ˆAØ�&‘	—‘Ó!ˆAÜ�y‰yÐ>ÀÄ2Ç4Á4ÕHØŸ,™, vÔ.‘Q´G¸CÀ³O�Ø—‘ q§z¡z¸ zÓ'=Ò'QÀÇÁÈÃÈbÑAQÐZ\Ñ]Õ^ð		_ð �k‰k˜%Ó €GÜ
ˆ7�=‰=‹?Ó˜bÓ Ú25°uÒ7RÀÇ	Á	È#ÃÈrÑ@RÑ7RÐSˆÜ" 7›|¨cÒ1ˆg�d�s‰m°w€GØ�(˜G W¨gÑag´t·z±zÀ&ÐW\Ô7]ÐoÐoÐmoÐoÐoøôQ ò 2ÜÐ# aÑ'¬c¯j©jÕ9Ü1ûð2ús   ƒ2O Ï	P
Ï"PÐP
c                  óˆ  — dd l } | j                  «       }|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        d	|z  z   }t        d
|||fz  «       t        |«      }	|	st        d«       ŒDt        |	«      }
|
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}t-        |«      D ]Ì  \  }}	 t        d|dz   t%        |«      |d   d d fz  «       t/        |d   «      \  }}}}}}|€|dz  }ŒG|j1                  |t2        |xs |d   |d   |xs |d   j5                  «       |xs |d   |r	|xs
 |d d n|d   |t6        |t8        f
«       |j;                  «        |dz  }t'        j(                  d«       ŒÎ |j?                  «        t        d||fz  «       y # t<        $ r}t        d|z  «       |dz  }Y d }~�Œd }~ww xY w)Nr   z--max-pages)ÚtypeÚdefaultz--fullÚ
store_true)Úactionéd   é   z?page=%du   åˆ—è¡¨é¡µ %d/%d: %sz  FAILEDu     ç©ºåˆ—è¡¨ï¼Œå�œæ­¢r1   u)     æœ¬é¡µ%dæ�¡ï¼Œæ–°å¢ž%dæ�¡ï¼Œç´¯è®¡%dæ�¡g      à?u'   
å…±%dç¯‡æ–‡ç« ï¼Œå¼€å§‹æŠ“å�–è¯¦æƒ…...)r   r   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...r;   é(   r?   r+   g333333Ó?z  ERROR: %su#   
å®Œæˆ�ï¼�æ–°å¢ž%dæ�¡ï¼Œé”™è¯¯%dæ�¡) ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚ
parse_argsrF   Ú	max_pagesr,   ÚSessionÚsetÚrangeÚ	LIST_BASErn   r3   rG   ÚaddrC   rr   ÚtimeÚsleepr$   Ú	enumerater‡   r"   Ú	SITE_NAMEr=   ÚCATEGORYÚGROUPÚcommitrm   Úclose)r�   ÚparserÚargsr–   ÚsessionÚ	all_itemsÚseenÚpnr1   rD   rE   ÚnÚitr#   ÚinsÚerrÚSQLÚidxÚtÚdÚsÚcÚsmr	   rz   s                            r   Úmainrµ   ¡   sÌ  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¬C¼ÐÔCØ
×Ñ˜¨ÐÔ6Ø×ÑÓ€DØ—y’y‘ d§n¡n€Iä×ÑÓ €GØœ#›%ˆt€Iä�A�y 1‘}Ó%ò ˆØ š7�i¬	°JÀ±OÑ(CˆÜÐ# r¨9°cÐ&:Ñ:Ô;Ü˜‹}ˆÙÜ�*ÔØÜ" 4Ó(ˆÙÜÐ(Ô)ÙØˆØò 	ˆBØ�%‰y Ò$Ø—‘˜˜E™Ô#Ø× Ñ  Ô$Ø�Q‘‘ð		ô
 	Ð9¼SÀ»ZÈÌCÐPYËNÐ<[Ñ[Ô\Ø�Š6ÙÜ�
‰
�3�ð)ô, 
Ð
4´s¸9³~Ñ
EÔFÜ‹9€DØ�H€Cˆð |€Cä˜YÓ'ò ‰ˆˆRð	ÜÐ# s¨Q¡w´°I³ÀÀ7ÁÈCÈRÐ@PÐ&QÑQÔRÜ .¨r°%©yÓ 9ÑˆAˆq�!�Q˜˜AØˆyØ�q‘�ØØ�L‰L˜œy¨!ª.¨r°%©y¸"¸U¹)ÀaÒFVÈ2ÈgÉ;×E]ÑE]ÓE_ÐabÒapÐfhÐioÑfpÙ01˜rš} Q t¨¡W°r¸'±{ÀAÄxÐQRÔTYð[ô \à�K‰KŒMØ�1‰HˆCÜ�J‰J�s�Oðð 	‡J�J„LÜ	Ð
0°C¸°:Ñ
=Õ>øô	 ò 	Ü�- !Ñ#Ô$Ø�1‰HŽCûð	ús   Æ1?JÇ1BJÊ	KÊ#J<Ê<KÚ__main__)r   )Ú__doc__rs   ro   rx   rœ   r,   r   Úbs4r   r   r   rB   rš   r!   rŸ   r    r¡   r-   r”   r   r$   r3   rG   r‡   rµ   Ú__name__© r   r   ú<module>r»      s�   ðñ÷ .× -× -Ý Ý  à"€ØÐ2Ñ2€	Ø
€Ø0€	ØÐ €ˆ5ð DØZØ0ñ€ð
 €	óòòòò(Npòb6?ðr ˆzÒÙ…Fð r   