Ë
    ¸¬ujç  ã                   ó°   — d 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mZ dZ	dZ
dZdd	iZd
ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)u°   
ä¼�ä¸šçŽ¯ä¿�ä¿¡æ�¯å…¬ç¤ºç½‘ - çŽ¯è¯„ä¿¡æ�¯å…¬ç¤ºçˆ¬è™«
https://www.ouryq.com/eia
CMS: WordPress
åˆ—è¡¨: table tr > td (å…¨éƒ¨åœ¨ä¸€é¡µï¼Œæ— åˆ†é¡µ)
è¯¦æƒ…: div.content æ­£æ–‡
é    N)ÚBeautifulSoup)ÚdatetimeÚ	timedeltazhttps://www.ouryq.comzhttps://www.ouryq.com/eiau.   ä¼�ä¸šçŽ¯ä¿�ä¿¡æ�¯å…¬ç¤ºç½‘-çŽ¯è¯„ä¿¡æ�¯å…¬ç¤ºz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z/root/search.dbim  c                  óN   — t        j                  t        «      } t        | _        | S )N)Úsqlite3ÚconnectÚDB_PATHÚstrÚtext_factory)Úconns    ú$/root/gov_crawler/crawl_ouryq_eia.pyÚget_connr      s   € Ü�?‰?œ7Ó#€DÜ€DÔØ€Kó    c                 óL   — | j                  d|f«      }|j                  «       d uS )Nz(SELECT 1 FROM gov_raw WHERE page_url = ?)ÚexecuteÚfetchone)r   ÚurlÚcurs      r   Ú
url_existsr   #   s&   € Ø
�,‰,ÐAÀCÀ6Ó
J€CØ�<‰<‹> Ð%Ð%r   c           
      óX   — | j                  d|d   |d   |d   |d   |d   |d   f«       y )NzŠINSERT OR IGNORE INTO gov_raw
           (title, page_url, summary, content, site_name, publish_date)
           VALUES (?, ?, ?, ?, ?, ?)ÚtitleÚpage_urlÚsummaryÚcontentÚ	site_nameÚpublish_date)r   )r   Úrecords     r   Úinsert_recordr   (   sF   € Ø‡L�Lð	(ð 
�‰˜& Ñ,¨f°YÑ.?Ø	�	Ñ	˜F ;Ñ/Ø	�Ñ	ð	!õ	r   c           	      ó�  — | sy| j                  «       } t        j                  d| «      }|rK|j                  d«      › dt	        |j                  d«      «      d›dt	        |j                  d«      «      d›�S t        j                  d| «      }|r7|j                  d«      › d|j                  d«      › d|j                  d«      › �S | S )	u;   è§£æž�ä¸­æ–‡æ—¥æœŸæ ¼å¼� '2026å¹´3æœˆ24æ—¥' -> '2026-03-24'Ú u"   (\d{4})å¹´(\d{1,2})æœˆ(\d{1,2})æ—¥é   ú-é   Ú02dé   z(\d{4})(\d{2})(\d{2}))ÚstripÚreÚmatchÚgroupÚint)Údate_strÚms     r   Ú
parse_dater-   3   s­   € áØØ�~‰~Ó€HÜ
�‰Ð6¸ÓA€AÙØ—'‘'˜!“*�˜Qœs 1§7¡7¨1£:›¨sÐ3°1´S¸¿¹À»³_ÀSÐ4IÐJÐJä
�‰Ð)¨8Ó4€AÙØ—'‘'˜!“*�˜Q˜qŸw™w q›z˜l¨!¨A¯G©G°A«J¨<Ð8Ð8Ø€Or   c                  óÒ   — 	 t        j                  t        t        d¬«      } d| _        | j
                  dk(  r| j                  S y# t        $ r}t        d|› �«       Y d}~yd}~ww xY w)u   èŽ·å�–åˆ—è¡¨é¡µé   ©ÚheadersÚtimeoutúutf-8éÈ   Nu!     [ERROR] åˆ—è¡¨é¡µè¯·æ±‚å¤±è´¥: )	ÚrequestsÚgetÚLIST_URLÚHEADERSÚencodingÚstatus_codeÚtextÚ	ExceptionÚprint)ÚrespÚes     r   Ú
fetch_pager@   B   s^   € ðÜ�|‰|œH¬g¸rÔBˆØˆŒØ×Ñ˜sÒ"Ø—9‘9ÐØøÜò ÜÐ1°!°Ð5Ô6Üûðús   ‚AA Á	A&ÁA!Á!A&c                 óz  — t        | d«      }g }|j                  d«      D �]  }|j                  d«      }t        |«      dk7  rŒ$|d   }|j                  d¬«      }|r|dk(  rŒC|d	   j                  d¬«      }|d
   j                  d¬«      }|d   j                  d¬«      }	|d   j                  d¬«      }
|d   j                  d¬«      }t	        |«      }|d   j                  d«      }d}|r$|j                  dd«      j                  «       }|r|}|r|› d|› �n|}|j                  |||||	|
||dœ«       �Œ |S )ub   è§£æž�åˆ—è¡¨é¡µè¡¨æ ¼ï¼Œè¿”å›ž (company, project_name, pub_date, detail_url, detail_text_as_title)úhtml.parserÚtrÚtdé   r%   T©r&   u   é¡¹ç›®å��ç§°r   r!   r#   é   é   é   Úar    Úhrefz - )r   ÚcompanyÚproject_nameÚindustryÚcountyÚaddressÚpub_dateÚ
detail_url)	r   Úfind_allÚlenÚget_textr-   Úfindr6   r&   Úappend)ÚhtmlÚsoupÚitemsrC   ÚtdsÚ
project_tdrM   rL   rN   rO   rP   Úpub_date_rawrQ   Údetail_linkrR   rK   r   s                    r   Ú
parse_listr_   O   si  € ä˜˜}Ó-€DØ€Eà�m‰m˜DÓ!ó ,ˆØ�k‰k˜$ÓˆÜˆs‹8�qŠ=Øð ˜‘Vˆ
Ø!×*Ñ*°Ð*Ó6ˆÙ˜|¨~Ò=Øð �a‘&—/‘/¨�/Ó-ˆà�q‘6—?‘?¨�?Ó.ˆà�Q‘—‘ t�Ó,ˆà�a‘&—/‘/¨�/Ó-ˆð ˜1‘v—‘¨T�Ó2ˆÜ˜lÓ+ˆð ˜!‘f—k‘k #Ó&ˆØˆ
ÙØ—?‘? 6¨2Ó.×4Ñ4Ó6ˆDÙØ!�
ñ 29�7�)˜3˜|˜nÑ-¸lˆà�‰ØØØ(Ø ØØØ Ø$ñ	
ö 		ðG,ð\ €Lr   c                 ó  — 	 t        j                  | t        d¬«      }d|_        |j                  dk7  rdg fS t        |j                  d«      }|j                  dd¬	«      }|sdg fS |j                  d
¬«      }g }|j                  d«      D ]Î  }|j                  dd«      j                  «       }|j                  d
¬«      }|r#|j                  d«      sd|j                  «       v rŒ[|j                  d«      r
t        |z   }	n |j                  d«      st        dz   |z   }	n|}	t        j                  d|j                  «       «      sŒ»|j!                  ||	dœ«       ŒÐ ||fS # t"        $ r}
t%        d| › d|
› �«       dg fcY d}
~
S d}
~
ww xY w)u   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡r/   r0   r3   r4   NrB   Údivr   )Úclass_TrF   rJ   rK   r    ú#Ú
javascriptú/Úhttpz*\.(pdf|doc|docx|xls|xlsx|zip|rar|jpg|png)$)r;   r   u     [ERROR] è¯¦æƒ…é¡µ u    è¯·æ±‚å¤±è´¥: )r5   r6   r8   r9   r:   r   r;   rV   rU   rS   r&   Ú
startswithÚlowerÚBASE_URLr'   ÚsearchrW   r<   r=   )r   r>   rY   Úcontent_divÚcontent_textÚattachmentsrJ   rK   r;   Úahrefr?   s              r   Úfetch_detailro   …   s~  € ð&Ü�|‰|˜C¬¸"Ô=ˆØˆŒØ×Ñ˜sÒ"Ø˜�8ˆOä˜TŸY™Y¨Ó6ˆð —i‘i ¨i�iÓ8ˆÙØ˜�8ˆOð #×+Ñ+°$Ð+Ó7ˆð ˆØ×%Ñ% cÓ*ò 	AˆAØ—5‘5˜ Ó$×*Ñ*Ó,ˆDØ—:‘: D�:Ó)ˆDÙ˜4Ÿ?™?¨3Ô/°<À4Ç:Á:Ã<Ñ3OØà�‰˜sÔ#Ü  4™‘Ø—_‘_ VÔ,Ü  3™¨Ñ-‘à�ä�y‰yÐFÈÏ
É
ËÕUØ×"Ñ"¨D¸Ñ#?Õ@ð	Að  ˜[Ð(Ð(øäò ÜÐ$ S E¨¸¸Ð<Ô=Ø�Rˆx�ûðús/   ‚5E! ¸.E! Á'CE! ÅE! Å!	F	Å*FÅ>F	ÆF	c                 ó¦   — | d   rE	 t        j                  | d   d«      }|t        j                  «       t        t        ¬«      z
  k  ry	 yy#  Y yxY w)u!   åˆ¤æ–­æ˜¯å�¦åº”çˆ¬å�–ï¼š365å¤©å†…rQ   z%Y-%m-%d)ÚdaysFT)r   ÚstrptimeÚnowr   Ú	DAYS_BACK)ÚitemÚpub_dts     r   Úshould_crawlrw   °   sY   € àˆJÒð	Ü×&Ñ& t¨JÑ'7¸ÓDˆFØœŸ™›¬¼	Ô)BÑBÒBØð Cñ øð	ØØús   ‡AA ÁAc                  ó  — t        d«       t        dt        › �«       t        dt        › d�«       t        «       } t        d«       t	        «       }|st        d«       | j                  «        y t        |«      }t        dt        |«      › d�«       t        |«      }d	}d	}d	}|D �]  }t        |«      s|d
z  }Œt        | |d   «      r|d
z  }Œ*d}g }	|d   rt        |d   «      \  }}	|rt        |«      dk  r|d   d d }
t        d|
› d�«       |d
z  }Œqt        |«      dkD  r|d d n|}|d   |d   ||t        |d   dœ}t        | |«       | j                  «        |d
z  }|d   d d }
t        d|
› d|d   › d�«       |	rt        dt        |	«      › d�«       t        j                  d«       �Œ | j                  «        t        d«       t        d|› d�«       t        d|› d�«       t        d|› d�«       t        d|› d�«       y ) Nu0   === ä¼�ä¸šçŽ¯ä¿�ä¿¡æ�¯å…¬ç¤ºç½‘-çŽ¯è¯„çˆ¬è™« ===u   ç›®æ ‡: u   æ—¶é—´èŒƒå›´: æœ€è¿‘u   å¤©u   
--- èŽ·å�–åˆ—è¡¨é¡µ ---u   [ERROR] æ— æ³•èŽ·å�–åˆ—è¡¨é¡µu   åˆ—è¡¨é¡µå…± u    æ�¡r   r!   rR   r    é   r   é2   z  [!] u   ... å†…å®¹ä¸ºç©ºæˆ–æ— è¯¦æƒ…é¡µr4   rQ   )r   r   r   r   r   r   z  [+] z... (ú)u        é™„ä»¶: u   ä¸ªg      à?u   
=== å®Œæˆ� ===u   æ€»æ‰«æ��: u   æ–°å¢žå…¥åº“: u   å·²å­˜åœ¨è·³è¿‡: u   è¶…å‡ºæ—¶é—´èŒƒå›´: )r=   r7   rt   r   r@   Úcloser_   rT   rw   r   ro   Ú	SITE_NAMEr   ÚcommitÚtimeÚsleep)r   rX   rZ   Útotal_foundÚtotal_insertedÚtotal_skippedÚtotal_outdatedru   r   rm   Úshort_titler   r   s                r   Úmainr†   ¼   sG  € Ü	Ð<Ô>Ü	ˆH”X�JÐ
Ô Ü	Ð ¤ ¨3Ð
/Ô0ä‹:€Dä	Ð%Ô'Ü‹<€DÙÜÐ-Ô.Ø�
‰
ŒØä�tÓ€EÜ	ˆMœ#˜e›*˜ TÐ
*Ô+ä�e“*€KØ€NØ€MØ€Nàó )ˆÜ˜DÔ!Ø˜aÑˆNØä�d˜D Ñ.Ô/Ø˜QÑˆMØð ˆØˆØ�ÒÜ#/°°\Ñ0BÓ#CÑ ˆG�[áœ#˜g›,¨Ò+Ø˜w™-¨¨Ð,ˆKÜ�F˜;˜-Ð'FÐGÔHØ˜QÑˆMØä#& w£<°#Ò#5�'˜$˜3‘-¸7ˆð ˜'‘]Ø˜\Ñ*ØØÜ"Ø  Ñ,ñ
ˆô 	�d˜FÔ#Ø�‰ŒØ˜!Ñˆà˜7‘m C RÐ(ˆÜ��{�m 5¨¨jÑ)9Ð(:¸!Ð<Ô=ÙÜ�M¤# kÓ"2Ð!3°3Ð7Ô8ä�
‰
�3ŽðS)ðV 	‡J�J„Lä	ÐÔÜ	ˆK˜�} DÐ
)Ô*Ü	ˆN˜>Ð*¨$Ð
/Ô0Ü	Ð˜m˜_¨DÐ
1Ô2Ü	Ð  Ð 0°Ð
5Õ6r   Ú__main__)Ú__doc__r5   r'   r   r   Úbs4r   r   r   ri   r7   r}   r8   r	   rt   r   r   r   r-   r@   r_   ro   rw   r†   Ú__name__© r   r   ú<module>rŒ      s‹   ðñó Û 	Û Û Ý ß (à"€Ø&€Ø<€	àÐPð€ð €Ø€	òò&ò
òò
ò3òl(òV	òG7ðT ˆzÒÙ…Fð r   