Ë
    V_Šjc"  ã                   óL  — 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edz   ZdZd	Z ej$                  d
d«      ZdZdZddddœZdZ e	j0                  «       Zej4                  j7                  e«       d„ Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)u;  
æ°¸å¤ªç§‘æŠ€-é›†å›¢æ–°é—»çˆ¬è™«
crawl_yongtai_tzgg.py
åˆ—è¡¨: ul.list.list2 > li > div.con > div.tt > a[title] æ ‡é¢˜ + span.date æ—¥æœŸ
åˆ†é¡µ: /newslist/zh/4.aspx (page1) + /newslist/zh/4/2~5.aspx (5é¡µ, 6æ�¡/é¡µ)
è¯¦æƒ…: div.conbox #zoom (æ­£æ–‡), div.detail-hd > div.tt æ ‡é¢˜, div.detail-hd > div.date æ—¥æœŸ
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinzhttps://www.yongtaitech.comz/newslist/zh/4.aspxu   æ°¸å¤ªç§‘æŠ€-é›†å›¢æ–°é—»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                 ó^   — t         j                  | t        ¬«      }d|_        |j                  S )N)Útimeoutzutf-8)ÚsessionÚgetÚTIMEOUTÚencodingÚtext)ÚurlÚresps     ú'/root/gov_crawler/crawl_yongtai_tzgg.pyÚfetchr   "   s%   € Ü�;‰;�s¤Gˆ;Ó,€DØ€D„MØ�9‰9Ðó    c                 óŠ  — t        | d«      }g }|j                  dd„ ¬«      }|s|S |j                  dd¬«      D �]  }|j                  dd	¬«      }|sŒ|j                  dd
¬«      }|sŒ0|j                  dd¬«      }|sŒF|j                  dd¬«      }|sŒ\|j                  d«      xs |j	                  d¬«      }	|	sŒ„|d   j                  «       }
|
j                  d«      st        t        |
«      }
d}|j                  dd¬«      }|r|j	                  d¬«      dd }|j                  |	j                  «       |
|f«       �Œ |S )uP   è§£æž�åˆ—è¡¨é¡µ â€” ul.list.list2 > li > div.con > div.tt > a[title] + span.dateúhtml.parserÚulc                 ó.   — | xr d| j                  «       v S )NÚlist)Úsplit)Úcs    r   ú<lambda>zparse_list.<locals>.<lambda>,   s   € ¨!Ò*C°¸!¿'¹'»)Ð0C€ r   ©Úclass_ÚliF)Ú	recursiveÚdivÚmodÚconÚttÚaT©ÚhrefÚtitle©Ústripr*   ÚhttpÚ ÚspanÚdateNé
   )
r   ÚfindÚfind_allr   Úget_textr-   Ú
startswithr   ÚBASE_URLÚappend)ÚhtmlÚsoupÚitemsr   r"   r%   r&   Útt_divr(   r+   r*   Údate_strÚ	date_spans                r   Ú
parse_listr?   (   sK  € ä˜˜}Ó-€DØ€EØ	�‰�4Ñ CˆÓ	D€BÙØˆØ�k‰k˜$¨%ˆkÓ0ó 6ˆØ�g‰g�e EˆgÓ*ˆÙØØ�h‰h�u UˆhÓ+ˆÙØØ—‘˜%¨�Ó-ˆÙØØ�K‰K˜ $ˆKÓ'ˆÙØà—‘�g“Ò8 !§*¡*°4 *Ó"8ˆÙØØ�‰y�‰Ó ˆØ�‰˜vÔ&Üœ8 TÓ*ˆDð ˆØ—H‘H˜V¨F�HÓ3ˆ	ÙØ ×)Ñ)°Ð)Ó5°c°rÐ:ˆHà�‰�e—k‘k“m T¨8Ð4Ö5ð76ð8 €Lr   c                 ó¤  ‡‡— t        | d«      }d}|j                  dd¬«      }|r'|j                  dd¬«      }|r|j                  d¬«      }d}|rN|j                  dd	¬«      }|r9t        j                  d
|j                  d¬«      «      }|r|j                  d«      }d}	|j                  dd¬«      }
|
s5|j                  dt        j                  dt        j                  «      ¬«      }
|
rwg Šˆˆ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œ«       Œ“ t#        |	j                  «       «      dk  r|j                  «       xs d}d|› d|› d�}	|||	|fS )uE   è§£æž�è¯¦æƒ…é¡µ â€” div.detail-hd > div.tt æ ‡é¢˜ + div.conbox æ­£æ–‡r   r/   r$   z	detail-hdr    r'   Tr,   r1   z(\d{4}-\d{2}-\d{2})é   Úconboxzconbox|content|zoomc           	      ó"  •— | 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(  r	 ‰
|«       ŒÚ|j                  dk(  rëg }|j                  d«      D ]\  }|j                  ddg«      D �cg c]  }|j                  d	d¬«      ‘Œ }}|sŒ7|j                  ddj                  |«      z   dz   «       Œ^ |s�Œ_|d   }ddj                  dg|j                  d«      dz
  z  «      z   dz   }	‰j                  dj                  |d d «      dz   |	z   dz   dj                  |dd  «      z   «       �ŒÔ|j                  s�Œâ|j                  dvs�Œò ‰
|«       �Œü y c c}w )NÚpz&<a[^>]*href="([^"]*)"[^>]*>([^<]*)</a>z[\2](\1)z<img[^>]*src="([^"]*)"[^>]*>z![\1]ú<[^>]+>r/   ú\s+ú z&nbsp;r$   ÚtableÚtrÚtdÚthTr,   z| z | z |r   z---ú|rA   ú
)ÚstyleÚscript)ÚchildrenÚnameÚstrÚreÚsubr-   r8   r4   r5   ÚjoinÚcount)Ú	containerÚchildÚp_htmlr   ÚrowsrI   rJ   ÚcellsÚrow0ÚsepÚ	extract_pÚ
paragraphss             €€r   r^   zparse_detail.<locals>.extract_pl   sá  ø€ Ø"×+Ñ+ó %�Ø—:‘: Ò$Ü  ›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Ò(Ù˜eÕ$Ø—Z‘Z 7Ò*Ø�DØ#Ÿn™n¨TÓ2ò I˜ØHJÏÉÐUYÐ[_ÐT`ÓHaÖ bÀ" §¡¨S¸ Õ!=Ð b˜Ð bÚ Ø ŸK™K¨¨u¯z©z¸%Ó/@Ñ(@À4Ñ(GÕHðIó Ø# A™w˜Ø" U§Z¡Z°°¸4¿:¹:Àc»?ÈQÑ;NÑ0OÓ%PÑPÐSWÑW˜Ø"×)Ñ)¨$¯)©)°D¸¸!°HÓ*=ÀÑ*DÀsÑ*JÈTÑ*QÐTX×T]ÑT]Ð^bÐcdÐceÐ^fÓTgÑ*gÖhØ—Z”Z E§J¡JÐ6IÓ$IÙ˜eÖ$ñ/%ùò !cs   Ä"Hz

rE   rF   rG   r(   r)   r*   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$ú/éÿÿÿÿ)rQ   r   r   u   å†…å®¹z<p><a href="z">z</a></p>)r   r3   r5   rS   ÚsearchÚgroupÚcompileÚIrU   rT   rR   r-   r4   Úlowerr   r8   r   Úlen)r9   r   r:   r+   Úhdr'   Úpub_dateÚdate_divÚmÚcontentÚcontent_divÚattachmentsÚscopeÚa_tagÚahrefÚfull_urlÚfallback_titler^   r_   s                    @@r   Úparse_detailrt   N   s2  ù€ ä˜˜}Ó-€Dð €EØ	�‰�5 ˆÓ	-€BÙ	Ø�W‰W�U 4ˆWÓ(ˆÙØ—K‘K d�KÓ+ˆEð €HÙ	Ø—7‘7˜5¨�7Ó0ˆÙÜ—	‘	Ð0°(×2CÑ2CÈ$Ð2CÓ2OÓPˆAÙØŸ7™7 1›:�ð €GØ—)‘)˜E¨(�)Ó3€KÙØ—i‘i ¬b¯j©jÐ9OÔQS×QUÑQUÓ.V�iÓWˆáØˆ
õ	%ñ4 	�+ÔáØ—k‘k *Ó-‰Gä—f‘f˜Z¨¬S°Ó-=Ó>×DÑDÓFˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGð €KØÒ˜4€EØ—‘ ¨$�Ó/ò ˆØ�f‘×#Ñ#Ó%×+Ñ+Ó-ˆÜ�9‰9Ð:¸EÕBÜ˜s E¨&¡M×$7Ñ$7Ó$9Ó:ˆHØ×ÑØŸ™¨T˜Ó2ÒM°h·n±nÀSÓ6IÈ"Ñ6MØñ õ ð	ô ˆ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Ústrptimer8   )r;   ÚcutoffÚfilteredr+   r   r=   Ú	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
        › d|› d�«       Œ 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 �]_  \  }\  }}}	 t        |«      }t+        ||«      \  }}}}|xs |}|xs |}|r|d d nd}t-        j.                  dd|d d «      j1                  «       xs |}|rt3        j4                  |d¬«      nd}t7        j8                  t:        «      }|j=                  «       }|j?                  d|||t@        tB        ||||f	«       |jD                  dkD  r|dz  }n|dz  }|jG                  «        |jI                  «        |dz   dz  dk(  r6t        d|dz   › dt        |
«      › d|› d|› d|› �
t        j                  ¬«       t        j                  d«       �Œb t        d#d$› �t        j                  ¬«       t        d%t@        › d&|› d'|› d(|› �t        j                  ¬«       t        d$› t        j                  ¬«       y # t         $ r/}t        d|dz   › d|› �t        j                  ¬«       Y d }~�ŒPd }~ww xY w# t         $ rO}t        d|dz   › d |d d! › d	|› �t        j                  ¬«       |dz  }t        j                  d"«       Y d }~�ŒWd }~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é   rA   z/newslist/zh/4/z.aspxz  Page r`   z: z items)Úfileg333333Ó?z error: z	  Total: z  Incremental (zd): z
  Unique: r   iPÃ  r/   rF   rG   éÈ   F)Úensure_asciiz»INSERT OR IGNORE INTO gov_raw 
                (page_url, title, publish_date, site_name, group_name, summary, content, attachments, source_url)
                VALUES (?,?,?,?,?,?,?,?,?)r2   z  [z] saved z
, skipped z	, errors z] ERROR é   g      à?rM   z2==================================================ú[z] Done! Saved: z, Skipped: z
, Errors: )%ÚanyÚLIST_URLÚrangeÚ	MAX_PAGESr8   r7   Ú	enumerater   r?   Úprintrg   r€   ÚstderrÚextendÚtimeÚsleepÚ	Exceptionr}   rx   ÚsetÚaddrt   rS   rT   r-   ÚjsonÚdumpsÚsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚ	SITE_NAMEÚGROUPÚrowcountÚcommitÚclose)Úis_incrementalÚ	page_urlsÚiÚ	all_itemsÚidxr   r9   r;   ÚeÚseenÚuniqueÚitemÚsavedÚskippedÚerrorsr+   Ú	list_dateÚ	det_titleÚdet_daterl   rn   Úfinal_titleÚ
final_dateÚcontent_textÚsummaryÚatt_jsonÚconnr   s                               r   Úmainr»   ²   sÎ  € ÜÑ\Ð4[Ô\Ó\€Nä�
€IÜ�1”i !‘mÓ$ò ?ˆØ×ÑœH˜: _°Q°C°uÐ=Õ>ð?ð €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Ó+ˆ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 u¨S¨b z l°"°Q°CÐ8¼s¿z¹zÕJØ�a‰KˆFÜ�J‰J�s�OŠOûð	ús3   Á!A1M7Æ:EN2Í7	N/Î $N*Î*N/Î2	P
Î;APÐP
Ú__main__)"Ú__doc__rS   rš   r•   r€   Úosrœ   r   r   ÚrequestsÚbs4r   Úurllib.parser   r7   rŽ   r¡   r¢   Úgetenvrž   rx   r�   ÚHEADERSr   ÚSessionr   ÚheadersÚupdater   r?   rt   r}   r»   Ú__name__© r   r   ú<module>rÉ      sÇ   ðñ÷ (× '× 'ß (Û Ý Ý  à(€ØÐ+Ñ+€Ø'€	Ø€Ø
ˆ"�)‰)�KÐ!2Ó
3€ØÐ Ø€	ð DØOØ0ñ€ð
 €Ø
ˆ(×
Ñ
Ó
€Ø ‡�× Ñ �wÔ òò#òLQ1òhò E(ðP ˆzÒÙ…Fð r   