Ë
    ¸¬ujÑ  ã                   óÈ  — 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 d dl	m	Z	m
Z
mZ d dlmZ dZdZdZ e j"                  dd	«      Zd
ZdZdej*                  v ZdZdddœZ ej2                  e«      Zej7                  «       Z e	j:                   e
 ed¬«      «      «      j=                  d¬«       edez  ¬«      z
  Zd„ Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%e&dk(  r e%«        yy)é    N)ÚBeautifulSoup)ÚdatetimeÚtimezoneÚ	timedelta)Úurljoinz&http://www.hanting.gov.cn/htlist/?gggszwww.hanting.gov.cnu   å¯’äº­åŒºå…¬å‘Šå…¬ç¤ºÚ	SEARCH_DBz/root/search.dbÚ1760120772858351616éP   z--incrementalé   z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zapplication/json;charset=utf-8)z
User-AgentzContent-Typeé   )Úhours©Útzinfoim  )Údaysc                 ó`  — d| › d�}	 t        j                  |ddt        gdœt        d¬«      }d|_        |j                  «       }|j                  d	i «      j                  d
g «      |j                  d	i «      j                  dd«      fS # t        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)Nz.http://www.hanting.gov.cn/els-service/article/z/15Ú98Úfwdate)ÚdqÚorderÚcatasé   )ÚjsonÚheadersÚtimeoutúutf-8ÚdataÚcontentsÚelementsTotalr   z  [API ERROR] page ú: )Nr   )	ÚrequestsÚpostÚCATAIDÚHEADERSÚencodingr   ÚgetÚ	ExceptionÚprint)ÚpageÚurlÚrr   Úes        ú"/root/gov_crawler/crawl_hanting.pyÚfetch_list_apir-   #   s¬   € Ø:¸4¸&ÀÐ
D€CðÜ�M‰M˜#¨$°xÌÈÑ$QÔ[bÐlnÔoˆØˆŒ
Ø�v‰v‹xˆØ�x‰x˜ Ó#×'Ñ'¨
°BÓ7¸¿¹À&È"Ó9M×9QÑ9QÐRaÐcdÓ9eÐeÐeøÜò ÜÐ# D 6¨¨A¨3Ð/Ô0Üûðús   ˆB B	 Â		B-ÂB(Â(B-c                 óÎ  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        |d«      }d}|j                  d	d
¬«      }|r%|j                  d«      }|r|j                  d¬«      }|s%|j                  d«      }|r|j                  d¬«      }d}	|j                  d	d¬«      }
|
r7t        j                  d|
j                  «       «      }|r|j                  d«      }	d}|j                  d	dd¬«      }|r,|j                  d	d¬«      }|rt        |«      }nt        |«      }|r|dk(  rd}|||	fS # t
        $ r}t        d| › d|› �«       Y d }~yd }~ww xY w)Nr   )r   r   r   z  [ERROR] fetch r   )NNNzhtml.parserÚ ÚdivÚdoctitle)Úclass_Úh1T)ÚstripÚtitleÚdocdatez(\d{4}-\d{2}-\d{2})é   Ú
doccontent)r2   ÚidÚozoom)r9   z<div id="ozoom"></div>u   <p>å†…å®¹åŠ è½½å¤±è´¥</p>)r    r%   r#   r$   Útextr&   r'   r   ÚfindÚget_textÚreÚsearchÚgroupÚstr)r)   r*   Úhtmlr+   Úsoupr5   r1   r3   Ú	title_tagÚdate_strr6   ÚdmÚcontent_htmlr8   r:   s                  r,   Úfetch_detailrH   .   so  € ð Ü�L‰L˜¤g°rÔ:ˆØˆŒ
Ø�v‰vˆô
 ˜˜}Ó-€Dð €EØ�y‰y˜ zˆyÓ2€HÙØ�]‰]˜4Ó ˆÙØ—K‘K d�KÓ+ˆEÙØ—I‘I˜gÓ&ˆ	ÙØ×&Ñ&¨TÐ&Ó2ˆEð €HØ�i‰i˜ iˆiÓ0€GÙÜ�Y‰YÐ-¨w×/?Ñ/?Ó/AÓBˆÙØ—x‘x “{ˆHð €LØ—‘˜5¨¸,�ÓG€JÙØ—‘ ¨'�Ó2ˆÙÜ˜u›:‰Lä˜z›?ˆLá˜<Ð+EÒEØ2ˆà�, Ð(Ð(øôO ò  ÜÐ    R¨ sÐ+Ô,Üûð ús   ‚/E  Å 	E$Å	EÅE$c                 ód   — t         j                  d| f«       t         j                  «       d   dkD  S )Nz/SELECT COUNT(*) FROM gov_raw WHERE page_url = ?r   )ÚcÚexecuteÚfetchone)Úpage_urls    r,   Úarticle_existsrN   \   s(   € Ü‡I�IÐ?À(ÀÔMÜ�:‰:‹<˜‰?˜QÑÐó    c                 óH   — 	 t         j                  d| ||df«       y #  Y y xY w)NzWINSERT OR REPLACE INTO gov_search(rowid, title, site_name, summary) VALUES (?, ?, ?, ?)r/   )rJ   rK   )Úrow_idr5   Ú	site_names      r,   Úsync_ftsrS   `   s,   € ðÜ	�	‰	ÐkØ˜5 )¨RÐ0õ	2øðÙús   ‚ �!c                 ó�  — |j                  dd«      j                  dd«      }d}t        j                  d|f«       t        j                  «       }|r|d   nd }	 t        j                  d|| ||t        ||df«       |xs t        j
                  }|rt        || t        «       y# t        $ r}	t        d|	› �«       Y d }	~	y	d }	~	ww xY w)
Nzhttp://r/   zhttps://z)SELECT id FROM gov_raw WHERE page_url = ?r   z©INSERT OR REPLACE INTO gov_raw
            (page_url, title, content, publish_date, site_name, source_url, summary, category)
            VALUES (?, ?, ?, ?, ?, ?, ?, ?)Tz  [DB ERROR] F)	ÚreplacerJ   rK   rL   Ú	SITE_NAMEÚ	lastrowidrS   r&   r'   )
r5   rM   rG   rE   Údisplay_urlÚsummaryÚrowÚexisting_idrQ   r+   s
             r,   Úinsert_articler\   g   sÁ   € Ø×"Ñ" 9¨bÓ1×9Ñ9¸*ÀbÓI€KØ€Gä‡I�IÐ9¸H¸;ÔGÜ
�*‰*‹,€CÙ�#�a’& T€KðÜ	�	‰	ð /ð �u˜l¨H´iÀÈgÐWYÐZô	\ð
 Ò+¤§¡ˆÙÜ�V˜U¤IÔ.ØøÜò Ü�˜a˜SÐ!Ô"Üûðús   ÁA	B$ Â$	CÂ-C Ã Cc            	      óÈ  — d} d}d}t        d«      \  }}t        |dz   dz  t        «      }t        d|› d|› �«       t	        d|dz   «      D �]å  }t        d|› d|› �«       t        |«      \  }}|€Œ&|st        d	«       Œ4t        d
t        |«      › d�«       |D �]q  }|j                  dd«      }	|j                  d«      r|j                  dd«      d d nd}
|j                  dd«      }|j                  dd«      }|j                  dd«      }|j                  dd«      }|rt        d|«      }nd|› d|› d|› d�}|
r7	 t        j                  |
d«      }|t        j                  d ¬«      k  r|dz  }ŒÙ	 t        |«      }t        r|r|dz  }Œót        d|	d d › d�d¬«       t        |«      \  }}}|s|	}|s|
r|
}t        ||||«      r$|r|dz  }t        d«       n| dz  } t        d«       nt        d «       t!        j"                  d!«       �Œt t$        j'                  «        t        d"|› d#�«       �Œè t$        j)                  «        t        d$| › d%|› d&|› �«       y #  Y ŒîxY w)'Nr   r7   é   r   z  Total items: z, pages to crawl: 1-z  List page ú/z    No itemsz
    Found z itemsÚsubjectr/   r   é
   ÚxxidÚdwidr   r   r)   zhttp://www.hanting.gov.cn/z.htmlz%Y-%m-%dr   z    Fetching: é#   z...ú )ÚendÚupdatedÚinsertedÚFAILEDg333333Ó?z  [COMMIT] page z doneu   
  âœ… å®Œæˆ�: æ–°å¢ž u	   , æ›´æ–° u	   , è·³è¿‡ )r-   ÚminÚ	MAX_PAGESr'   ÚrangeÚlenr%   r   r   ÚstrptimeÚcutoff_daterU   rN   ÚINCREMENTALrH   r\   ÚtimeÚsleepÚconnÚcommitÚclose)Ú	total_newÚtotal_updatedÚtotal_skippedÚ_ÚtotalÚtotal_pagesr(   ÚresultsÚitemr5   Úapi_daterb   rc   r   Úapi_urlrM   Ú	item_dateÚexistsÚd_titlerG   Údetail_dates                        r,   Úmainr„   }   sš  € Ø€IØ€MØ€Mô ˜aÓ �H€A€uÜ�u˜r‘z bÑ(¬)Ó4€KÜ	ˆO˜E˜7Ð"6°{°mÐ
DÔEä�a˜ q™Ó)ó >.ˆÜ�˜T˜F ! K =Ð1Ô2ä# DÓ)‰
ˆ�Øˆ?ØÙÜ�LÔ"Øä�
œ3˜w›<˜.¨Ð/Ô0àó /	ˆDØ—H‘H˜Y¨Ó+ˆEØ6:·h±h¸xÔ6H�t—x‘x ¨"Ó-¨c¨rÑ2ÈbˆHð —8‘8˜F BÓ'ˆDØ—8‘8˜F BÓ'ˆDØ—‘˜$ Ó%ˆBØ—h‘h˜u bÓ)ˆGáÜ"Ð#?ÀÓI‘à7¸°t¸1¸T¸FÀ!ÀDÀ6ÈÐO�áðÜ (× 1Ñ 1°(¸JÓ G�IØ ¤;×#6Ñ#6¸dÐ#6Ó#CÒCØ%¨Ñ*˜Ø ð Dô $ HÓ-ˆFÝ™vØ Ñ"�Øä�N 5¨¨" : ,¨cÐ2¸Õ<Ü1=¸hÓ1GÑ.ˆG�\ ;áØ�Ù¡8Ø&�ä˜g x°¸{ÔKÙØ! QÑ&�MÜ˜)Õ$à ‘N�IÜ˜*Õ%ä�h”ä�J‰J�sŽOð_/	ôb 	�‰ŒÜÐ    eÐ,Ö-ð}>.ô@ 	‡J�J„LÜ	Ð# I ;¨i¸°ÀiÐP]ÈÐ
_Õ`øðAÙús   Ä=4IÉI!Ú__main__)'Úosr>   Úsysrq   r   Úsqlite3r    Úbs4r   r   r   r   Úurllib.parser   ÚBASE_URLÚDOMAINrV   ÚgetenvÚDB_PATHr"   rk   Úargvrp   Ú
YEAR_LIMITr#   Úconnectrs   ÚcursorrJ   ÚnowrU   ro   r-   rH   rN   rS   r\   r„   Ú__name__© rO   r,   ú<module>r–      s  ðã 	ðó
 
Û 
Û Û Û Û Ý ß 2Ñ 2Ý  à3€Ø	€Ø#€	Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø	€Ø€	Ø §¡Ð)€Ø€
àWØ;ñ=€ð €w‡��wÓ€Ø‡K�KƒM€àˆh�l‰l™8¡I°AÔ$6Ó7Ó8×@Ñ@ÈÐ@ÓMÑPYÐ_bÐeoÑ_oÔPpÑp€ò	ò,)ò\òòò,KaðZ ˆzÒÙ…Fð rO   