Ë
    #�~jú*  ã                   óR  — 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ZddlmZm	Z	 ddl
mZ ddlmZ dZdZdZd	Zd
Z ej&                  «        e	d¬«      z
  j)                  d«      Zej,                  j/                  dd«      ZddiZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z d"d„Z!e"dk(  rƒejF                  dd Z$dZ%dZ&ddjO                  e$«      v r7 e( ejR                  ddjO                  e$«      «      jU                  d«      «      Z%d e$v re$e$jW                  d «      dz      Z& e!e%e&¬!«       yy)#u   
å®�å¤�å®�ä¸°èƒ½æº�é›†å›¢ - æŠ•èµ„è€…å…³ç³»å…¬ç¤º (baofengenergy.com/tzznewslist.asp?classid=347)
CMS: ASP (tzznews_view.asp?id=N)
åˆ—è¡¨: a[title] tzznews_view
åˆ†é¡µ: classid=347&page=N
è¯¦æƒ…: å®¹å™¨ id=content
ç”¨æ³•: python3 crawl_baofengenergy_tzz.py [--pages=N] [--json out.jsonl]
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoup)Úurljoinu(   å®�ä¸°èƒ½æº�é›†å›¢-æŠ•èµ„è€…å…³ç³»å…¬ç¤ºzhttp://www.baofengenergy.comz8http://www.baofengenergy.com/tzznewslist.asp?classid=347zwww.baofengenergy.comu   ä¼�ä¸šiG  )Údaysz%Y-%m-%dÚDB_PATHz/root/search.dbz
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó2   — t        dt        › d| › �d¬«       y )Nú[z] T)Úflush)ÚprintÚ	SITE_NAME)Úmsgs    ú,/root/gov_crawler/crawl_baofengenergy_tzz.pyÚlogr      s   € Ü	ˆAŒiˆ[˜˜3˜%Ð
 ¨Ö-ó    c                 ó´   — t        j                  dd| xs d«      } t        j                  dd| «      } t        j                  dd| «      j                  «       } | S )Nz&nbsp;|&#160;|\u200b|\ufeffÚ z\s+ú u   \.\.\.|â€¦$)ÚreÚsubÚstrip)Úts    r   Úclean_titler      sK   € Ü
�‰Ð-¨r°1²7¸Ó;€AÜ
�‰ˆv�s˜AÓ€AÜ
�‰ˆ~˜r 1Ó%×+Ñ+Ó-€AØ€Hr   c                 ó¨   — | dk(  rt         n
t         › d| › �}t        j                  |t        d¬«      }|j                  xs d|_        |j                  S )Né   z&page=é   )ÚheadersÚtimeoutúutf-8)ÚLIST_URLÚrequestsÚgetÚHEADERSÚapparent_encodingÚencodingÚtext)ÚpÚurlÚrs      r   Ú
fetch_pager*   %   sG   € Ø˜1’f�(¤X J¨f°Q°CÐ"8€CÜ�‰�S¤'°2Ô6€AØ×$Ñ$Ò/¨€A„JØ�6‰6€Mr   c                 ób   — t        j                  | t        dd¬«      }d|_        |j                  S )Nr   F)r   r   ÚverifyÚgbk)r!   r"   r#   r%   r&   )r(   r)   s     r   Úfetch_detailr.   +   s&   € Ü�‰�S¤'°2¸eÔD€Aà€A„JØ�6‰6€Mr   c                 óð  — t        | d«      }g }|j                  dd¬«      D �]  }|j                  dd«      }t        j                  d|«      sŒ-t        |j                  dd«      xs |j                  d¬	«      «      }|rt        |«      d
k  rŒmd}|j                  ddg«      }|rjt        j                  d|j                  «       «      }|rD|j                  d«      j                  dd«      j                  dd«      j                  dd«      d d }|j                  |t        t        |«      |dœ«       �Œ t        «       }	g }
|D ]/  }|d   |	vsŒ|	j                  |d   «       |
j                  |«       Œ1 |
S )Núhtml.parserÚaT©Úhrefr3   r   ztzznews_view\.asp\?id=\d+Útitle©r   é   ÚliÚdivõ#   20\d{2}[-/å¹´]\d{1,2}[-/æœˆ]\d{1,2}r   õ   å¹´ú-õ   æœˆú/é
   )r4   r(   Úpub_dater(   )r   Úfind_allr"   r   Úsearchr   Úget_textÚlenÚfind_parentÚgroupÚreplaceÚappendr   ÚBASE_URLÚsetÚadd)ÚhtmlÚsoupÚitemsr1   r3   r4   r?   ÚparentÚmÚseenÚuniqÚits               r   Ú
parse_listrS   2   sb  € Ü˜˜}Ó-€DØ€EØ�]‰]˜3 Tˆ]Ó*ó ]ˆØ�u‰u�V˜RÓ ˆÜ�y‰yÐ5°tÔ<ØÜ˜AŸE™E '¨2Ó.ÒH°!·*±*À4°*Ó2HÓIˆÙœ˜E›
 QšØØˆØ—‘  e˜}Ó-ˆÙÜ—	‘	Ð@À&Ç/Á/ÓBSÓTˆAÙØŸ7™7 1›:×-Ñ-¨e°SÓ9×AÑAÀ%ÈÓM×UÑUÐVYÐ[^Ó_Ð`cÐacÐd�Ø�‰˜u¬W´X¸tÓ-DÐRZÑ[Ö\ð]ô ‹5€DØ€DØò ˆØˆe‰9˜DÒ Ø�H‰H�R˜‘YÔØ�K‰K˜�Oðð €Kr   c                 óÌ  — ddddœ}t        | d«      }|j                  ddg«      D ]I  }|j                  d¬«      }t        |«      dk\  sŒ$|j	                  d	«      rŒ6d
|vsŒ;t        |«      |d<    n |d   sJ|j                  d«      }|r7|j                  d¬«      }t        j                  dd|«      }t        |«      |d<   t        j                  d| d d «      }|rG|j                  d«      j                  dd«      j                  dd«      j                  dd«      d d |d<   |j                  dd¬«      }|s|j                  dd¬«      }|rt        t        |«      «      |d<   |S )Nr   ©r4   Úpublish_dateÚcontentr0   Úh1Úh2Tr5   r6   )u   æ‚¨å½“å‰�çš„ä½�ç½®u   å½“å‰�ä½�ç½®u   é¦–é¡µu   ç½‘ç«™u	   ç‚¹å‡»æ•°r4   u®   \s*[|_\-â€”]\s*(é€šçŸ¥å…¬å‘Š|å…¬ç¤ºå…¬å‘Š|æ”¿åŠ¡å…¬å¼€|äººæ°‘æ”¿åºœ|é˜¿è�£æ——äººæ°‘æ”¿åºœ|å®‰è¿œåŽ¿äººæ°‘æ”¿åºœ|å®�å¤�å®�ä¸°èƒ½æº�é›†å›¢è‚¡ä»½æœ‰é™�å…¬å�¸|æŠ•èµ„è€…å…³ç³»).*$r9   i@  r   r:   r;   r<   r=   r>   rV   r8   Úwrap)ÚidÚtdÚtd4)Úclass_rW   )r   r@   rB   rC   Ú
startswithr   Úfindr   r   rA   rE   rF   Úextract_clean_textÚstr)rK   ÚresultrL   Úhr   Ú	title_tagrO   r8   s           r   Úparse_detailrf   K   s{  € Ø¨2¸"Ñ=€FÜ˜˜}Ó-€Dà�]‰]˜D $˜<Ó(ò ˆØ�J‰J˜TˆJÓ"ˆÜˆq‹6�Q‹;˜qŸ|™|Ð,fÕgÐlwð  @Aò  mAÜ)¨!›nˆF�7‰OÙð	ð
 �'Š?Ø—I‘I˜gÓ&ˆ	ÙØ×"Ñ"¨Ð"Ó.ˆAÜ—‘ð  Ið  KMð  OPó  QˆAÜ)¨!›nˆF�7‰OÜ
�	‰	Ð8¸$¸uÀ¸+ÓF€AÙØ!"§¡¨£×!3Ñ!3°E¸3Ó!?×!GÑ!GÈÈsÓ!S×![Ñ![Ð\_ÐadÓ!eÐfiÐgiÐ!jˆˆ~Ñà
�)‰)�E˜fˆ)Ó
%€CÙØ�i‰i˜ UˆiÓ+ˆÙ
Ü.¬s°3«xÓ8ˆˆyÑØ€Mr   c           
      óN  ‡— | syt        | d«      }|j                  ddg«      D ]  }|j                  «        Œ |j                  d«      D ]9  }|j                  dd«      Št	        ˆfd„dD «       «      sŒ*|j                  «        Œ; g }|j                  d	«      D ]É  }|j                  d
d¬«      }|sŒ|j                  d«      rŒ+|j                  dd«      j                  «       }|j                  d¬«      xs5 t        j                  j                  |j                  d«      d   «      xs d}|sŒ—|j                  d«      rŒ©|j                  |t        t         |«      f«       ŒË |j                  d	«      D ]8  }|j                  d
d¬«      sŒ|j                  d«      rŒ)|j                  «        Œ: |j                  g d¢«      D ]  }|j#                  «        Œ |j                  ddg«      D ]9  }|j                  d¬«      rŒ|j                  g d¢«      rŒ*|j                  «        Œ; ddlm}	 g }
|j                  ddg«      D �]p  }|j(                  dk(  r|
j                  t+        |«      «       Œ.|j(                  dk(  sŒ>|j                  d«      rŒPg }|j,                  D ]Ø  }t/        |dd«      }|dk(  rh|j                  dd«      Št	        ˆfd„dD «       «      rŒ<‰r$‰j                  d«      st        t         ‰«      |d<   |j                  t+        |«      «       Œ}|dv r|j                  t+        |«      «       Œœ|r|j                  t+        |«      «       Œ¹|j                   |	t+        |«      «      «       ŒÚ dj1                  |«      j                  «       }|s�Œ\|
j                  d|› d �«       �Œs |j                  d«      D ]‡  }|j                  dd«      Š|j                  d«      s|j                  d«      rŒ8t	        ˆfd!„dD «       «      rŒM‰j                  «       }|sŒ`|
j                  d" |	t        t         |«      «      z  «       Œ‰ |j                  dd#g«      D �]O  }|j                  d«      r|j(                  dk(  rŒ%|j                  g d$¢«      rŒ9dj1                  d%„ |j,                  D «       «      j                  «       }|r)t3        |«      d&k\  r|
j                  d |	|«      › d �«       |j                  d
d¬«      D ]¦  }|j                  dd«      j                  «       }|j                  d¬«      xs5 t        j                  j                  |j                  d«      d   «      xs d}|sŒo|j                  d«      rŒ�|
j                  d't        t         |«      › d(|› d)�«       Œ¨ �ŒR t5        «       }|D ]7  \  }}||f}||v rŒ|j7                  |«       |
j                  d'|› d(|› d)�«       Œ9 |
rd*j1                  |
«      S  |	| «      j                  «       S )+uq   è¾“å‡ºçº¯ HTMLï¼šæ®µè�½ <p>ã€�é“¾æŽ¥ <a href target=_blank>ã€�è¡¨æ ¼ä¿�ç•™ã€�å›¾ç‰‡ <img>ã€�é™„ä»¶ç‹¬ç«‹æˆ�æ®µã€‚r   r0   ÚscriptÚstyleÚimgÚsrcc              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w©N© ©Ú.0ÚkÚsrc0s     €r   ú	<genexpr>z%extract_clean_text.<locals>.<genexpr>o   s   øè ø€ Òs˜Qˆq�DŒyÑsùs   ƒ)z
un-collectÚcollectÚshareÚfaviconÚqrcodeÚewmÚbannerÚtop_r7   r1   Tr2   Útabler3   r5   ú?r   u   é™„ä»¶)zjavascript:ú#)ÚspanÚbÚstrongÚfontÚemÚiÚuÚsr8   r'   )rj   r{   r1   )ÚescapeÚnameNc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wrm   ©Úlowerro   s     €r   rs   z%extract_clean_text.<locals>.<genexpr>�   s   øè ø€ ÒS°˜1 §
¡
£Ô,ÑSùó   ƒ)z.gifÚicon16ry   )zhttp://zhttps://)r1   r{   Úbrz<p>z</p>c              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­wrm   r‰   ro   s     €r   rs   z%extract_clean_text.<locals>.<genexpr>£   s   øè ø€ ÒG Qˆq�D—J‘J“LÔ ÑGùr‹   z<p><img src="%s"></p>r\   )r'   r{   Úulc              3   óT   K  — | ]   }t        |t        «      sŒt        |«      –— Œ" y ­wrm   )Ú
isinstancerb   )rp   Úcs     r   rs   z%extract_clean_text.<locals>.<genexpr>®   s   è ø€ ÒL A¼ÀAÄsÕ9Kœ˜QŸÑLùs   ‚(˜(é   z<p><a href="z" target="_blank">z</a></p>z

)r   r@   Ú	decomposer"   Úanyr`   rD   r   rB   ÚosÚpathÚbasenameÚsplitr_   rG   r   rH   ÚunwraprK   r†   r‡   rb   ÚcontentsÚgetattrÚjoinrC   rI   rJ   )Úcontent_htmlrL   Útagrj   Úattach_linksr7   Úa_inr3   r&   r†   ÚpartsÚelÚinnerr’   r‡   r   rk   r8   ÚdirectÚseen_ar(   Úkeyrr   s                         @r   ra   ra   e   sZ  ø€ áØÜ˜ }Ó5€DØ�}‰}˜h¨Ð0Ó1ò ˆØ�‰�ðð �}‰}˜UÓ#ò ˆØ�w‰w�u˜bÓ!ˆÜÓsÐ"rÔsÕsØ�M‰M�Oðð
 €LØ�m‰m˜DÓ!ò EˆØ�w‰w�s ˆwÓ&ˆÚ˜Ÿ™ wÕ/Ø—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,Ò`´·±×0@Ñ0@ÀÇÁÈCÃÐQRÑASÓ0TÒ`ÐX`ˆDÚ˜DŸO™OÐ,@ÕAØ×#Ñ# T¬7´8¸TÓ+BÐ$CÕDðEð �m‰m˜DÓ!ò ˆØ�7‰7�3˜Tˆ7Õ"¨2¯>©>¸'Õ+BØ�L‰L�Nðð �}‰}ÒQÓRò ˆØ�
‰
�ðð �}‰}˜e S˜\Ó*ò ˆØ�|‰| $ˆ|Õ'°·±Ò9NÕ0OØ�M‰M�Oðõ Ø€EØ�m‰m˜W c˜NÓ+ó ,ˆØ�7‰7�gÒØ�L‰Lœ˜R›Õ!Ø�W‰W˜‹^ B§N¡N°7Õ$;ØˆEØ—[‘[ò 1�Ü˜q &¨$Ó/�Ø˜5’=ØŸ5™5 ¨Ó+�DÜÓSÐ6RÔSÔSØ á D§O¡OÐ4KÔ$LÜ#*¬8°TÓ#:˜˜%™Ø—L‘L¤ Q£Õ(ØÐ1Ñ1Ø—L‘L¤ Q£Õ(ÙØ—L‘L¤ Q£Õ(à—L‘L¡¬¨A«£Õ0ð1ð  —‘˜“×$Ñ$Ó&ˆAÛØ—‘˜s 1 # T˜]Ö+ð/,ð2 �}‰}˜UÓ#ò SˆØ�w‰w�u˜bÓ!ˆØ�?‰?˜3Ô 3§?¡?°7Ô#;ØÜÓGÐ*FÔGÔGØØ�j‰j‹lˆÚØ�L‰LÐ0±6¼'Ä(ÈCÓ:PÓ3QÑQÕRðSð �}‰}˜e T˜]Ó+ó gˆØ�?‰?˜7Ô#¨¯©°EÒ(9ØØ�8‰8Ò(Ô)ØØ—‘ÑL¨¯©ÔLÓL×RÑRÓTˆÙ”c˜&“k QÒ&Ø�L‰L˜3™v f›~Ð.¨dÐ3Ô4à—L‘L ¨4�LÓ0ò 	gˆDØ—8‘8˜F BÓ'×-Ñ-Ó/ˆDØ—=‘= t�=Ó,Ò`´·±×0@Ñ0@ÀÇÁÈCÃÐQRÑASÓ0TÒ`ÐX`ˆDÚ˜DŸO™OÐ,@ÕAØ—‘˜|¬G´H¸dÓ,CÐ+DÐDVÐW[ÐV\Ð\dÐeÕfò		gðgô ‹U€FØ!ò K‰	ˆˆcØ�SˆkˆØ�&‰=ØØ�
‰
�3ŒØ�‰�| C 5Ð(:¸4¸&ÀÐIÕJðKñ "'ˆ6�;‰;�uÓÐH©F°<Ó,@×,FÑ,FÓ,HÐHr   r   c                 ó¨  — t        d| › dt        › �«       g }t        «       }t        d| dz   «      D ]¬  }|dk(  rt        n
t        › d|› �}	 t        |«      }t        |«      }d}	|D ]4  }
|
d   |vsŒ|j                  |
d   «       |j                  |
«       |	dz  }	Œ6 t        d|› d	t        |«      › d
|	› dt        |«      › �«       |s nt        j                  d«       Œ® g }t        |d«      D ]ž  \  }}
|
d   r|
d   t        k  rŒ	 t        |
d   «      }t        |«      }|j                  |d   xs |
d   |
d   |d   xs |
d   |d   t         ddœ«       |dz  dk(  rt        d|› dt        |«      › �«       t        j                  d«       Œ  |rct#        |dd¬«      5 }|D ]+  }|j%                  t'        j(                  |d¬«      d z   «       Œ- 	 d d d «       t        d!t        |«      › d"|› �«       y t+        j,                  t.        «      }|j1                  d#«       |j3                  «       }dx}}|D ]V  }	 |j1                  d$|d%   |d&   |d&   |d   |d   |d   |d   xs dd d' |d(   f«       |j4                  dkD  r|dz  }n|dz  }ŒX |j7                  «        |j9                  «        t        d*|› d+|› d,�«       y # t        $ r}t        d|› d|› �«       Y d }~ �Œd }~ww xY w# t        $ r(}t        d|
d   dd  › d|› �«       ddddœ}Y d }~�Œõd }~ww xY w# 1 sw Y   �ŒNxY w# t        $ r}t        d)|› �«       |dz  }Y d }~�Œd }~ww xY w)-NzCrawl pages=z cutoff=r   Ú_ÚPz ERR: r   r(   z: z items (z new), total gš™™™™™é?r?   z	  detail iØÿÿÿr   rU   r4   rV   rW   u   æŠ•èµ„è€…å…³ç³»å…¬ç¤º)r4   Úpage_urlrV   rW   Ú	site_nameÚcolumnr>   z  r=   gš™™™™™Ù?Úwr   )r%   F)Úensure_asciiú
zJSONL: z
 items -> zPRAGMA busy_timeout=10000z‰INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, content, summary, category) VALUES (?,?,?,?,?,?,?,?)r¬   r«   iô  r­   z
DB error: zResult: z new, z skipped)r   ÚCUTOFFrI   Úranger    r*   Ú	ExceptionrS   rJ   rG   rC   ÚtimeÚsleepÚ	enumerater.   rf   r   ÚopenÚwriteÚjsonÚdumpsÚsqlite3Úconnectr   ÚexecuteÚcursorÚrowcountÚcommitÚclose)ÚpagesÚjson_outÚ	items_allrP   r'   r(   rK   ÚerM   ÚnewrR   ÚenrichedÚidxÚdetailÚfÚitemÚconnr’   ÚstoredÚskippeds                       r   ÚcrawlrÏ   Á   s¸  € Üˆ,�u�g˜X¤f XÐ.Ô/Ø€IÜ‹5€DÜ�1�e˜a‘iÓ ò ˆØ˜qš&�h¬¨
°!°A°3Ð&7ˆð	Ü˜a“=ˆDô ˜4Ó ˆØˆØò 	ˆBØ�%‰y Ò$Ø—‘˜˜E™Ô#Ø× Ñ  Ô$Ø�q‘‘ð		ô
 	ˆa�ˆs�"”S˜“Z�L ¨¨¨]¼3¸y»>Ð:JÐKÔLÙÙÜ�
‰
�3�ð#ð& €HÜ˜Y¨Ó*ò ‰ˆˆRØˆjŠ>˜b ™n¬vÒ5Øð	FÜ  5¡	Ó*ˆDÜ! $Ó'ˆFð 	�‰Ø˜G‘_Ò3¨¨7©Ø˜5™	Ø" >Ñ2ÒD°b¸±nØ˜iÑ(Ü"Ø-ñ
ô 	ð �‰8�qŠ=Ü�"�S�E˜œ3˜y›>Ð*Ð+Ô,Ü�
‰
�3�ð'ñ* Ü�(˜C¨'Ô2ð 	E°aØ ò E�Ø—‘œŸ
™
 4°eÔ<¸tÑCÕDñE÷	Eô 	ˆg”c˜(“m�_ J¨x¨jÐ9Ô:Øä�?‰?œ7Ó#€DØ‡L�LÐ,Ô-Ø�‰‹€AØÐ€FˆWØò ˆð	Ø�I‰Ið,ð �kÑ" D¨Ñ$4°d¸:Ñ6FØ�g‘  ^Ñ 4°d¸9±oØ�y‘/Ò' R¨¨#Ð.°°X±ð@ô	Að �z‰z˜AŠ~Ø˜!‘‘à˜1‘�øðð  	‡K�K„MØ‡J�J„LÜˆ(�6�(˜&  	¨Ð2Õ3øôE ò 	Ü�!�A�3�f˜Q˜CÐ Ô!Þûð	ûô, ò 	FÜ�)˜B˜u™I c d˜OÐ,¨F°1°#Ð6Ô7Ø!°2À"ÑEŽFûð	Fú÷ 	Eñ 	Eûô. ò 	Ü�*˜Q˜CÐ Ô!Ø�q‰LŽGûð	úsU   ÁK ÄK)Æ1LÈ8AL*Ë 	K&Ë	K!Ë!K&Ë)	LË2LÌLÌL'Ì*	MÌ3MÍMÚ__main__é   z--pages=r   z--pages=(\d+)z--json)rÂ   rÃ   )r   N),Ú__doc__r   Úsysr–   r¹   r´   r»   r!   r   r   Úbs4r   Úurllib.parser   r   rH   r    ÚDOMAINÚGROUPÚnowÚstrftimer±   Úenvironr"   r   r#   r   r   r*   r.   rS   rf   ra   rÏ   Ú__name__ÚargvÚargsrÂ   rÃ   r�   ÚintrA   rE   Úindexrn   r   r   ú<module>rà      s<  ðñ÷ 2× 1× 1Ó 1ß (Ý Ý  à6€	Ø)€ØE€Ø	 €Ø€Ø
ˆ(�,‰,‹.™9¨%Ô0Ñ
0×	:Ñ	:¸:Ó	F€Ø
�*‰*�.‰.˜Ð$5Ó
6€Øð  Kð  L€ò.òòòòò2ò4YIóxJ4ðZ ˆzÒØ�8‰8�A�Bˆ<€DØ€EØ€HØ�S—X‘X˜d“^Ñ#Ù�I�B—I‘IÐ.°·±¸³Ó?×EÑEÀaÓHÓIˆØ�4ÑØ˜Ÿ
™
 8Ó,¨qÑ0Ñ1ˆÙ	� Ö)ð r   