Ë
    ¸¬ujò  ã                   ón  — 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	Z	ddl
Z
ddlmZ ej                  j                  ej                  j                  e«      «      Zej                  j%                  ed«      ZdZdZdZdZd	Z ej2                  «       Zd
diZd„ Zd„ Zd„ Zd„ Zd„ Z d„ Z!e"dk(  rƒdejF                  v rm ee«      Z$e$rb ee$«      dd Z%e%D ]Q  Z& e'de&d   › �«        ee&d   «      Z(e(sŒ e'de(d   › �«        e'd e)e(d   «      › �«        e'de(d   dd › �«       ŒS yy e «        yy)u|   
çŸ³å®¶åº„ç‚¼åŒ–å…¬ç¤ºä¿¡æ�¯çˆ¬è™«
python3 crawl_sjlh.py          # å…¨é‡�
python3 crawl_sjlh.py --test   # æµ‹è¯•ç¬¬ä¸€æ�¡
é    N)Úurljoinzquality_results.dbzroot@1.94.217.116z.http://sjlh.sinopec.com/sjlh/csr/public_infor/zhttp://sjlh.sinopec.comu   çŸ³å®¶åº„ç‚¼åŒ–zsjlh.sinopec.comz
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36c                 ó  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |dt
        ¬«      }|j                  «       j                  dd¬«      S # t        $ r
}Y d }~y d }~ww xY w)N)Úheadersé   )ÚtimeoutÚcontextzutf-8Úreplace)Úerrors)	ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚCTXÚreadÚdecodeÚ	Exception)ÚurlÚreqÚrespÚes       ú/root/gov_crawler/crawl_sjlh.pyÚhttp_getr      sj   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2¼sÐ%ÓCˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<Ð<øÜò Üûðús   §AA. Á.	BÁ<Bc           
      óR  — g }t        j                  d| t         j                  «      D ]|  }|j                  |j	                  d«      j                  «       t        t        |j	                  d«      j                  «       «      |j	                  d«      j                  «       dœ«       Œ~ |S )Nzv<li><span Class="title"><a title="([^"]*)" href="([^"]*)"[^>]*>.*?</a></span><span Class="date">\s*([^<]+)</span></li>é   é   é   )Útitler   Údate)ÚreÚfinditerÚDOTALLÚappendÚgroupÚstripr   ÚLIST_URL)ÚhtmlÚitemsÚms      r   Ú
parse_listr*      sœ   € Ø€EÜ�[‰[ð  Sð  UYô  []÷  [dñ  [dó  eò ~ˆØ�‰˜qŸw™w q›z×/Ñ/Ó1¼'Ä(ÈAÏGÉGÐTUËJ×L\ÑL\ÓL^Ó:_Ðij×ipÑipÐqrÓis×iyÑiyÓi{Ñ|Õ}ð~à€Ló    c                 ó  — t        | «      }|sy d}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }d}t        j                  d|t        j                  «      }|rû|j	                  d«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  dd|«      }t        j                  d	d|«      }t        j                  d
d|j                  «       «      }t        j                  dd|«      }|j                  «       }d}t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       }|rt        j                  dd|«      d d nd}	t        j                  dd|	«      j                  «       }	||||	dœS )NÚ z%<div class="lfnews-title">(.*?)</div>r   zE<div class="lfnews-content">(.*?)</div>\s*<div class="lfnews-bottom">z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z@<div[^>]*id="[^"]*_label"[^>]*style=\'display:none\'>[^<]*</div>z,<div[^>]*_ControlWrapper_RichHtmlField[^>]*>z
</div>\s*$z<img[^>]*icon_pdf\.gif[^>]*>u   ðŸ“„ zQ<div class="lfnews-bottom-right">.*?<div>\s*([0-9]{4}-[0-9]{2}-[0-9]{2})\s*</div>z<[^>]+>i,  u   é¡µé�¢å†…å®¹)r   Úcontentr   Úsummary)r   r    Úsearchr"   r$   r%   ÚsubÚI)
r   r'   r   Útmr/   ÚcmÚrawr   Údmr0   s
             r   Úfetch_detailr8   "   s–  € Ü�C‹=€DÙØØ€EÜ	�‰Ð;¸TÄ2Ç9Á9Ó	M€BÙ	Ø—‘˜“×!Ñ!Ó#ˆØ€GÜ	�‰Ð[Ð]aÔce×clÑclÓ	m€BÙ	Ø�h‰h�q‹kˆÜ�f‰fÐ1°2°sÄ"Ç)Á)ÌBÏDÉDÁ.ÔQˆÜ�f‰fÐ/°°SÄÇ	Á	Ì"Ï$É$ÁÔOˆä�f‰fÐXÐZ\Ð^aÓbˆÜ�f‰fÐDÀbÈ#ÓNˆÜ�f‰f�] B¨¯	©	«Ó4ˆä�f‰fÐ4°g¸sÓCˆØ—)‘)“+ˆØ€DÜ	�‰ÐgÐimÔoq×oxÑoxÓ	y€BÙ	Ø�x‰x˜‹{× Ñ Ó"ˆÙ7>Œb�f‰f�Z  WÓ-¨d¨sÑ3ÀB€GÜ�f‰f�_ b¨'Ó2×8Ñ8Ó:€GØ w¸ÈÑQÐQr+   c                 óh   — t        j                  d| «      }|rt        |j                  d«      «      S y)NzmaxPage\s*=\s*(\d+)r   )r    r1   Úintr$   )r'   r)   s     r   Úget_total_pagesr;   ?   s+   € Ü
�	‰	Ð(¨$Ó/€AÙÜ�1—7‘7˜1“:‹ÐØr+   c                  óÀ  — t        d«       t        t        «      } | st        d«       y t        | «      }t        d|› �«       g }t	        | «      }|j                  |«       t        dt        |«      › d�«       t        d|dz   «      D ]P  }t        t        › d|› �«      } | sŒt	        | «      }|j                  |«       t        d	|› d
t        |«      › d�«       ŒR t        dt        |«      › d�«       |D ]j  }t        d|d   d d › d�d¬«       t        |d   «      }|r6|d   |d<   |d   |d<   |d   r|d   |d<   |d   r|d   |d<   t        d«       Œ`t        d«       Œl t        j                  t        «      }|j                  d«       d}|D ]a  }	 |j                  dt        t        |d   |d   |j                  dd«      |d   |j                  dd«      f«       |j                   dkD  r|dz  }Œc |j#                  «        |j                  dt        f«      j%                  «       d   }	|j'                  «        t        d|› d|	› �«       t)        |«       |S #  Y ŒÎxY w)Nu#   çˆ¬å�–: çŸ³å®¶åº„ç‚¼åŒ–å…¬ç¤ºä¿¡æ�¯u   æ— æ³•èŽ·å�–é¦–é¡µu   æ€»é¡µæ•°: u     ç¬¬1é¡µ: u    æ�¡r   r   z?page=u     ç¬¬u   é¡µ: u   
åˆ—è¡¨å…± u
     è¯¦æƒ…: r   é   z...ú )Úendr   r/   r0   r   ÚOKÚFAILzêCREATE TABLE IF NOT EXISTS quality_results (id INTEGER PRIMARY KEY AUTOINCREMENT, site_name TEXT, domain TEXT, title TEXT, url TEXT, content TEXT, publish_date TEXT, summary TEXT, created_at TEXT DEFAULT (datetime('now','localtime')))r   zvINSERT OR IGNORE INTO quality_results (site_name,domain,title,url,content,publish_date,summary) VALUES (?,?,?,?,?,?,?)r-   z6SELECT COUNT(*) FROM quality_results WHERE site_name=?u   
å…¥åº“: æ–°å¢žu   , ç´¯è®¡)Úprintr   r&   r;   r*   ÚextendÚlenÚranger8   Úsqlite3ÚconnectÚ
QUALITY_DBÚexecuteÚ	SITE_NAMEÚDOMAINÚgetÚtotal_changesÚcommitÚfetchoneÚcloseÚsync_to_server)
r'   Útotal_pagesÚ	all_itemsr(   ÚpageÚitemÚdetailÚdbÚinsertÚtotals
             r   Ú	crawl_allrZ   E   s–  € Ü	Ð
/Ô0Ü”HÓ€DÙÜÐ"Ô#ØÜ! $Ó'€KÜ	ˆK˜�}Ð
%Ô&Ø€IÜ�tÓ€EØ×Ñ�UÔÜ	ˆKœ˜E›
�| 4Ð
(Ô)Ü�a˜ q™Ó)ò 3ˆÜœ8˜* F¨4¨&Ð1Ó2ˆÙØÜ˜4Ó ˆØ×Ñ˜ÔÜ��d�V˜5¤ U£ ¨DÐ1Õ2ð3ô 
ˆLœ˜Y›Ð(¨Ð
-Ô.Øò ˆÜ�
˜4 ™=¨¨"Ð-Ð.¨cÐ2¸Õ<Ü˜d 5™kÓ*ˆÙØ$ YÑ/ˆD�‰OØ$ YÑ/ˆD�‰OØ�fŠ~Ø% f™~��V‘Ø�gŠØ & w¡��W‘Ü�$�Kä�&�Mðô 
�‰œÓ	$€BØ‡J�Jð  |ô  }Ø€FØò ˆð	Ø�J‰Jð  PÜ!¤6¨4°©=¸$¸u¹+ÀtÇxÁxÐPYÐZ\ÓG]Ð_cÐdjÑ_kÐmq×muÑmuÐvð  ACó  nDð  EôFà×Ñ !Ò#Ø˜!‘�øðð ‡I�I„KØ�J‰JÐOÔR[ÐQ]Ó^×gÑgÓiÐjkÑl€EØ‡H�H„JÜ	Ð˜V˜H H¨U¨GÐ
4Ô5Ü�9ÔØÐøð	Ùús   ÆAIÉIc                 óò  — | sy t        d«       g }| D ]¨  }|d   j                  dd«      }|d   j                  dd«      }|j                  dd«      xs dj                  dd«      }|j                  dd«      xs dj                  dd«      }|d	   }|j                  d
t        › d|› d|› d|› d|› d|› d|› d�«       Œª ddj                  |«      z   dz   }d}	t        |	d«      5 }
|
j                  |«       d d d «       t        j                  ddd|	t        › d|	› �gddd¬«      }|j                  dk7  rt        d|j                  › �«       y t        j                  dddt        d|	› d|	› �gddd¬«      }|j                  dk(  rt        d«       nt        d|j                  d d  › �«       t        j                  |	«       t        j                  dddt        d!gddd¬«       t        d"«       y # 1 sw Y   ŒùxY w)#Nu   
å�Œæ­¥åˆ°æœ�åŠ¡å™¨...r   ú'z''r   r/   r-   r0   r   zoINSERT OR IGNORE INTO gov_raw (site_name, page_url, title, content, publish_date, summary, date_rank) VALUES ('z','z');zBEGIN;zCOMMIT;z/tmp/sync_sjlh.sqlÚwÚscpz-ozConnectTimeout=10ú:Té<   )Úcapture_outputÚtextr   r   u     SCPå¤±è´¥: Ússhzsqlite3 /root/search.db < z && rm éx   u
     å�Œæ­¥OKu     å�Œæ­¥å¤±è´¥: éÈ   z†sqlite3 /root/search.db "INSERT INTO gov_search(gov_raw) SELECT rowid FROM gov_raw WHERE rowid NOT IN (SELECT rowid FROM gov_search);"u     FTSæ›´æ–°å®Œæˆ�)rB   r	   rL   r#   rJ   ÚjoinÚopenÚwriteÚ
subprocessÚrunÚ
SERVER_SSHÚ
returncodeÚstderrÚosÚunlink)r(   Ú	sql_linesrU   ÚtÚuÚcÚsÚdÚsqlÚtmpÚfÚrs               r   rQ   rQ   x   s�  € ÙØÜ	Ð
#Ô$à€IØò ˆØ�‰M×!Ñ! # tÓ,ˆØ�‰K×Ñ  TÓ*ˆØ�X‰X�i Ó#Ò) r×2Ñ2°3¸Ó=ˆØ�X‰X�i Ó#Ò) r×2Ñ2°3¸Ó=ˆØ�‰LˆØ×Ñð  Kô  LUð  KVð  VYð  Z[ð  Y\ð  \_ð  `að  _bð  beð  fgð  ehð  hkð  lmð  knð  nqð  rsð  qtð  twð  xyð  wzð  z}ð  ~õ  	ðð �R—W‘W˜YÓ'Ñ
'¨)Ñ
3€CØ
€CÜ	ˆc�3‹ð ˜1Ø	�‰�Œ÷ô 	�‰˜˜tÐ%8¸#Ä*ÀÈQÈsÈeÐ?TÐUØ&*°¸rô	C€Aà‡|�|�qÒÜ�˜aŸh™h˜ZÐ(Ô)Øä�‰˜˜tÐ%8¼*ÐHbÐcfÐbgÐgnÐorÐnsÐFtÐuØ&*°¸sô	D€Aà‡|�|�qÒÜˆlÕäÐ  §¡¨$¨3 Ð 0Ð1Ô2Ü‡I�Iˆc„Nä‡N�N�E˜4Ð!4´jð _ð`à"&¨T¸2õ?ô 
Ð
Õ÷)ð ús   Ã#G-Ç-G6Ú__main__z--testr   u   æ ‡é¢˜: r   r   u   æ—¥æœŸ: r   u   å†…å®¹é•¿åº¦: r/   u   æ‘˜è¦�: r0   éd   )*Ú__doc__Úsysrn   r    ÚjsonrF   ÚsslÚurllib.requestr   ri   Úbase64Úurllib.parser   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRrf   rH   rk   r&   ÚBASErJ   rK   Ú_create_unverified_contextr   r   r   r*   r8   r;   rZ   rQ   Ú__name__Úargvr'   r(   rU   rB   ru   rD   © r+   r   ú<module>r�      sg  ðñ÷
 K× J× J× JÓ JÝ  à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€Ø�W‰W�\‰\˜(Ð$8Ó9€
Ø €
Ø;€Ø €Ø€	Ø	€Ø$€c×$Ñ$Ó&€ØÐvÐ
w€òòòRò:ò1òf#ðJ ˆzÒØ�3—8‘8ÑÙ˜Ó!ˆÙÙ˜tÓ$ R aÐ(ˆEØò ;�Ù˜  g¡ Ð0Ô1Ù   e¡Ó-�ÚÙ˜H Q v¡Y KÐ0Ô1Ù˜N©3¨q°©|Ó+<Ð*=Ð>Ô?Ù˜H Q y¡\°$°3Ð%7Ð$8Ð9Õ:ñ;ð ñ 	�ð r+   