Ë
     E¶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mZ ddl	Z	ddl
mZ ddlmZ dZdZeez   dz   Zd	Zd
Z ej&                  dd«      ZdZdZddddœZdZ e	j2                  «       Zej6                  j9                  e«       dd„Zd„ Zd„ Zd„ Z d„ Z!d„ Z"e#dk(  r e"«        yy)u  
å¯»ä¹ŒåŽ¿äººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šçˆ¬è™«
crawl_xunwu_tzgg.py
åˆ—è¡¨: div.pageList > ul > li > a[title] æ ‡é¢˜ + span.time æ—¥æœŸ
åˆ†é¡µ: list.shtml + list_2~5.shtml (5é¡µ, 12æ�¡/é¡µ)
è¯¦æƒ…: div.article-content-body#zoomcon, h1.article-titleæ ‡é¢˜, meta[PubDate]æ—¥æœŸ
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttps://www.xunwu.gov.cnz/xwxrmzf/c103707z/list.shtmlu   å¯»ä¹ŒåŽ¿-å…¬ç¤ºå…¬å‘Šu   æ±Ÿè¥¿Ú	SEARCH_DBz/root/search.dbé   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;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           ú%/root/gov_crawler/crawl_xunwu_tzgg.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        ¬«      }d|_        |j                  S )N©Útimeoutzutf-8)Úsessionr   ÚTIMEOUTÚencodingÚtext)ÚurlÚresps     r    Úfetchr,   /   s%   € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ�9‰9Ðr"   c                 ó*  — t        | d«      }g }|j                  dd¬«      }|s|S |j                  d«      }|s|S |j                  dd¬«      D ]Â  }|j                  d	d
¬«      }|sŒ|j                  d«      xs |j	                  d
¬«      }|sŒA|d   j                  «       }|j                  d«      st        t        |«      }|j                  dd¬«      }	|	r|	j	                  d
¬«      dd nd}
|j                  |j                  «       ||
f«       ŒÄ |S )uA   è§£æž�åˆ—è¡¨é¡µ â€” div.pageList > ul > li > a[title] + span.timer   ÚdivÚpageList©Úclass_ÚulÚliF)Ú	recursiver   T©r   Útitle©Ústripr   r   ÚspanÚtimeNé
   r   )
r   Úfindr   r   Úget_textr8   r   r   ÚBASE_URLÚappend)ÚhtmlÚsoupÚitemsÚ	page_listr2   r3   r   r6   r   Ú	date_spanÚdate_strs              r    Ú
parse_listrF   4   s  € ä˜˜}Ó-€DØ€EØ—	‘	˜%¨
�	Ó3€IÙØˆØ	�‰˜Ó	€BÙØˆØ�k‰k˜$¨%ˆkÓ0ò 6ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØØ�‰y�‰Ó ˆØ�‰˜vÔ&Üœ8 TÓ*ˆDØ—G‘G˜F¨6�GÓ2ˆ	Ù:C�9×%Ñ%¨DÐ%Ó1°#°2Ñ6ÈˆØ�‰�e—k‘k“m T¨8Ð4Õ5ð6ð €Lr"   c                 ó>  ‡‡‡— t        | d«      }d}|j                  ddt        j                  dt        j                  «      i¬«      }|r$|j                  d«      r|d   j                  «       }|s'|j                  dd	¬
«      }|r|j                  d¬«      }|sFt        j                  d| t        j                  «      }|r|j                  d«      j                  «       }d}|j                  ddt        j                  dt        j                  «      i¬«      }|r'|j                  d«      r|d   j                  «       dd }|sKt        j                  d| t        j                  «      }	|	r$|	j                  d«      j                  «       dd }
|
}|s)t        j                  d| «      }|r|j                  d«      }d}|j                  dd¬
«      xs |j                  dd¬«      }|s5|j                  dt        j                  dt        j                  «      ¬
«      }|rxg Šˆˆˆfd„Š ‰|«       ‰rdj                  ‰«      }nSt        j                  ddt        |«      «      j                  «       }t        j                  dd|«      j                  «       }g }|xs |}|j                  dd¬«      D ]­  }|d    j                  «       j                  «       }t        j                  d!|«      sŒ;t!        ‰|d    j                  «       «      }|j#                  |j                  d¬«      xs |j%                  d"«      d#   |d$œ«       |d%|› d&|j                  d¬«      › d'�z  }Œ¯ t'        |j                  «       «      d(k  r|j                  «       xs d)}d*‰› d&|› d'�}||||fS )+uG   è§£æž�è¯¦æƒ…é¡µ â€” h1.article-title + div.article-content-body#zoomconr   r   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚh1zarticle-titler0   Tr7   z<UCAPTITLE>(.*?)</UCAPTITLE>é   ÚPubDateNr;   z <PUBLISHTIME>(.*?)</PUBLISHTIME>z(\d{4}-\d{2}-\d{2})r.   zarticle-content-bodyÚzoomcon)Úidzcontent|zoomc                 óL  •— | j                   D �]“  }|j                  dk(  r¯t        |«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      j                  «       }t        j                  dd	|«      }t        j                  d
d	|«      j                  «       }|sŒ°‰j                  |«       ŒÂ|j                  dk(  rk|j                  d«      r!d	j                  |j                  dg «      «      nd}d|v sd|j                  «       v r|j                  dd¬«      }|s�Œ2 ‰|«       �Œ<|j                  dk(  r#t        |‰	«      }|s�Œ[‰j                  |«       �Œn|j                  s�Œ||j                  dvs�ŒŒ ‰|«       �Œ– y)u-   é€’å½’æ��å�–containerå†…çš„<p>æ®µè�½å’Œè¡¨æ ¼Úpz&<a[^>]*href="([^"]*)"[^>]*>([^<]*)</a>z[\2](\1)z<img[^>]*src="([^"]*)"[^>]*>z![\1]ú<[^>]+>r   ú\s+ú z&nbsp;r.   Úclasszfj-aÚfjr   Tr5   r   )ÚstyleÚscriptN)ÚchildrenrI   r   ÚreÚsubr8   r?   r   ÚjoinÚlowerr   r!   )
Ú	containerÚchildÚp_htmlr)   ÚclsÚ	att_linksÚtbl_htmlÚextract_paragraphsÚ
paragraphsr*   s
          €€€r    rf   z(parse_detail.<locals>.extract_paragraphsv   sX  ø€ à"×+Ñ+ó .�Ø—:‘: Ò$Ü  ›Z�FÜŸV™VÐ$MÈ{Ð\bÓc�FÜŸV™VÐ$CÀXÈvÓV�FÜŸ6™6 *¨b°&Ó9×?Ñ?ÓA�DÜŸ6™6 &¨#¨tÓ4�DÜŸ6™6 )¨S°$Ó7×=Ñ=Ó?�DÚØ"×)Ñ)¨$Õ/Ø—Z‘Z 5Ò(à>C¿i¹iÈÔ>P˜#Ÿ(™( 5§9¡9¨W°bÓ#9Ô:ÐVX�CØ ‘}¨°·	±	³Ñ(;à$)§N¡N°3¸T NÓ$B˜	Ù(Ù$Ù& uÖ-Ø—Z‘Z 7Ò*Ü1°%¸Ó=�HÛØ"×)Ñ)¨(Ö3Ø—Z”Z E§J¡JÐ6IÓ$Iá& uÖ-ñ3.r"   z

rT   rU   rV   r   r5   r   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$ú/éÿÿÿÿ)rI   r*   u   

é™„ä»¶ï¼š<p><a href="z">z</a></p>r   u   å†…å®¹z<p><a href=")r   r<   r\   ÚcompileÚIr   r8   r=   ÚsearchÚSÚgroupr^   r]   r   r   r_   r   r?   ÚsplitÚlen)r@   r*   rA   r6   Úmeta_trM   Útitle_mÚpub_dateÚmeta_dÚdmÚpdÚdm2rL   Úcontent_divÚattachmentsÚscopeÚa_tagÚahrefÚfull_urlÚfallback_titlerf   rg   s    `                  @@r    Úparse_detailr   M   sA  ú€ ä˜˜}Ó-€Dð €EØ�Y‰Y�v f¬b¯j©j¸Ì"Ï$É$Ó.OÐ%PˆYÓQ€FÙ�&—*‘*˜YÔ'Ø�yÑ!×'Ñ'Ó)ˆÙØ�Y‰Y�t OˆYÓ4ˆÙØ—K‘K d�KÓ+ˆEÙÜ—)‘)Ð;¸TÄ2Ç4Á4ÓHˆÙØ—M‘M !Ó$×*Ñ*Ó,ˆEð €HØ�Y‰Y�v f¬b¯j©j¸ÄRÇTÁTÓ.JÐ%KˆYÓL€FÙ�&—*‘*˜YÔ'Ø˜)Ñ$×*Ñ*Ó,¨S¨bÐ1ˆÙÜ�Y‰YÐ:¸DÄ"Ç$Á$ÓGˆÙØ—‘˜!“×"Ñ"Ó$ S bÐ)ˆBØˆHÙÜ�i‰iÐ.°Ó5ˆÙØ—y‘y “|ˆHð €GØ—)‘)˜EÐ*@�)ÓAÒcÀTÇYÁYÈuÐYbÀYÓEc€KÙØ—i‘i ¬b¯j©j¸Ì"Ï$É$Ó.O�iÓPˆÙØˆ
ö	.ñ: 	˜;Ô'áØ—k‘k *Ó-‰Gä—f‘f˜Z¨¬S°Ó-=Ó>×DÑDÓFˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð €KØÒ˜4€EØ—‘ ¨$�Ó/ò dˆØ�f‘×#Ñ#Ó%×+Ñ+Ó-ˆÜ�9‰9Ð:¸EÕBÜ˜s E¨&¡M×$7Ñ$7Ó$9Ó:ˆHØ×ÑØŸ™¨T˜Ó2ÒM°h·n±nÀSÓ6IÈ"Ñ6MØñ ô ð Ð2°8°*¸B¸u¿~¹~ÐTX¸~Ó?YÐ>ZÐZbÐcÑc‰Gðdô ˆ7�=‰=‹?Ó˜bÒ ØŸ™›Ò2¨(ˆØ    R¨Ð'7°xÐ@ˆà�(˜G [Ð0Ð0r"   c                 ó.  — t        j                  «       t        t        ¬«      z
  }g }| D ]M  \  }}}	 |r0t        j                  |d«      }||k\  r)|j                  |||f«       n|j                  |||f«       ŒO |S #  |j                  |||f«       Y ŒjxY w)N)Údaysz%Y-%m-%d)r   Únowr   ÚINCREMENTAL_DAYSÚstrptimer?   )rB   ÚcutoffÚfilteredr6   r*   rE   Ú	item_dates          r    Úincremental_filterrˆ   °   s�   € Ü�\‰\‹^œiÔ-=Ô>Ñ>€FØ€HØ %ò 	4Ñˆˆs�Hð	4ÙÜ$×-Ñ-¨h¸
ÓC�	Ø Ò&Ø—O‘O U¨C°Ð$:Õ;à—‘ ¨¨XÐ 6Ô7øð	4ð €Oøð	4Ø�O‰O˜U C¨Ð2Ö3ús   ²AA<Á<Bc                  ó.  — t        d„ dD «       «      } t        g}t        dt        dz   «      D ]%  }|j	                  t
        t        z   d|› d�z   «       Œ' g }t        |«      D ]w  \  }}	 t        |«      }t        |«      }t        d|dz   › dt        › d	t        |«      › d
�t        j                  ¬«       |j                  |«       t        j                   d«       Œy t        dt        |«      › �t        j                  ¬«       | r9t%        |«      }t        dt&        › dt        |«      › �t        j                  ¬«       t)        «       }	g }
|D ]/  }|d   |	vsŒ|	j+                  |d   «       |
j	                  |«       Œ1 t        dt        |
«      › �t        j                  ¬«       d}d}d}t        |
«      D �]a  \  }\  }}}	 t        |«      }t-        ||«      \  }}}}|xs |}|xs |}|r|d d nd}t/        j0                  dd|d d «      j3                  «       xs |}|rt5        j6                  |d¬«      nd}t9        j:                  t<        d¬«      }|j?                  «       }|jA                  d|||tB        tD        ||||f	«       |jF                  dkD  r|dz  }n|dz  }|jI                  «        |jK                  «        |dz   dz  dk(  r6t        d|dz   › dt        |
«      › d|› d |› d!|› �
t        j                  ¬«       t        j                   d«       �Œd t        d%d&› �t        j                  ¬«       t        d'tB        › d(|› d)|› d*|› �t        j                  ¬«       t        d&› t        j                  ¬«       y # t"        $ r/}t        d|dz   › d|› �t        j                  ¬«       Y d }~�ŒRd }~ww xY w# t"        $ rO}t        d|dz   › d"d d# › d	|› �t        j                  ¬«       |dz  }t        j                   d$«       Y d }~�ŒYd }~ww xY w)+Nc              3   ó@   K  — | ]  }|t         j                  v –— Œ y ­w)N)ÚsysÚargv)Ú.0Úargs     r    ú	<genexpr>zmain.<locals>.<genexpr>Á   s   è ø€ Ò\¨S˜¤§¡œÑ\ùs   ‚)z--incrementalÚincrementalÚincé   rN   z/list_z.shtmlz  Page rh   z: z items)Úfileg333333Ó?z error: z	  Total: z  Incremental (zd): z
  Unique: r   iPÃ  r   rU   rV   éÈ   F)Úensure_asciié<   r$   z»INSERT OR IGNORE INTO gov_raw 
                (page_url, title, publish_date, site_name, group_name, summary, content, attachments, source_url)
                VALUES (?,?,?,?,?,?,?,?,?)r;   z  [z] saved z
, skipped z	, errors z] ERROR é   g      à?ú
z2==================================================ú[z] Done! Saved: z, Skipped: z
, Errors: )&ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr?   r>   Ú	LIST_PATHÚ	enumerater,   rF   Úprintrp   r‹   ÚstderrÚextendr:   ÚsleepÚ	Exceptionrˆ   rƒ   ÚsetÚaddr   r\   r]   r8   ÚjsonÚdumpsÚsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚGROUPÚrowcountÚcommitÚclose)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr*   r@   rB   ÚeÚseenÚuniqueÚitemÚsavedÚskippedÚerrorsr6   Ú	list_dateÚ	det_titleÚdet_daterL   ry   Úfinal_titleÚ
final_dateÚcontent_textÚsummaryÚatt_jsonÚconnÚcs                               r    ÚmainrÉ   À   sÚ  € ÜÑ\Ð4[Ô\Ó\€Nä�
€IÜ�1”i !‘mÓ$ò DˆØ×Ñœ¤IÑ-°&¸¸¸6Ð0BÑBÕCðDð €IÜ˜iÓ(ò A‰ˆˆSð	AÜ˜“:ˆDÜ˜tÓ$ˆEÜ�G˜C ™E˜7 !¤I ;¨b´°U³°¸FÐCÌ#Ï*É*ÕUØ×Ñ˜UÔ#Ü�J‰J�s�OðAô 
ˆI”c˜)“nÐ%Ð
&¬S¯Z©ZÕ8áÜ& yÓ1ˆ	Ü�Ô 0Ð1°´c¸)³nÐ5EÐFÌSÏZÉZÕXä‹5€DØ€FØò  ˆØ�‰7˜$ÒØ�H‰H�T˜!‘WÔØ�M‰M˜$Õð ô 
ˆJ”s˜6“{�mÐ
$¬3¯:©:Õ6à€EØ€GØ€FÜ(1°&Ó(9ó Ñ$ˆÑ$ˆe�S˜)ð	Ü˜“:ˆDÜ8DÀTÈ3Ó8OÑ5ˆI�x ¨+Ø#Ò, uˆKØ!Ò. YˆJá.5˜7 6 E™?¸2ˆLÜ—f‘f˜V S¨,°t¸Ð*<Ó=×CÑCÓEÒTÈˆGÙFQ”t—z‘z +¸EÕBÐWYˆHä—?‘?¤7°BÔ7ˆDØ—‘“ˆAØ�I‰Ið .ð �k :¬y¼%Ø˜,¨°#ð7ô8ð
 �z‰z˜AŠ~Ø˜‘
‘à˜1‘�Ø�K‰KŒMØ�J‰JŒLØ�a‘˜2‰~ Ò"Ü˜˜C ™E˜7 !¤C¨£K =°¸¸¸zÈ'ÈÐR[Ð\bÐ[cÐdÔkn×kuÑkuÕvÜ�J‰J�sŽOð5ô@ 
ˆBˆvˆhˆ-œcŸj™jÕ)Ü	ˆAŒiˆ[˜¨ w¨k¸'¸À*ÈVÈHÐ
UÔ\_×\fÑ\fÕgÜ	ˆVˆHœCŸJ™JÖ'øôm ò 	AÜ�G˜C ™E˜7 (¨1¨#Ð.´S·Z±Z×@Ó@ûð	Aûô^ ò 	Ü�C˜˜A™�w˜h {°3°BÐ'7Ð&8¸¸1¸#Ð>ÄSÇZÁZÕPØ�a‰KˆFÜ�J‰J�s�OŠOûð	ús3   Á)A1NÇEN<Î	N9Î
$N4Î4N9Î<	PÏAPÐPÚ__main__)r   )$Ú__doc__r\   r§   r:   r‹   Úosr©   r   r   ÚrequestsÚbs4r   r   r   r>   rž   r›   r®   r¯   Úgetenvr«   rƒ   r�   ÚHEADERSr'   ÚSessionr&   ÚheadersÚupdater!   r,   rF   r   rˆ   rÉ   Ú__name__© r"   r    ú<module>rÖ      sÔ   ðñ÷ (× '× 'ß (Û Ý Ý  à%€Ø€	Ø�iÑ -Ñ/€Ø$€	Ø€Ø
ˆ"�)‰)�KÐ!2Ó
3€ØÐ Ø€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ óòò
ò2`1òFò E(ðP ˆzÒÙ…Fð r"   