Ë
    ¸¬uj`  ã                   óú   — 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
m
Z
  ej                  «       Zde_        ej                  e_        dZdZdZedd	œZd
ZdZdez   Zd„ Zd„ Zd„ Zedk(  r e«        yy)uN   Crawler for sthj.fy.gov.cn - é˜œé˜³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ è¡Œæ”¿è®¸å�¯ï¼ˆçŽ¯è¯„ï¼‰é    N)ÚdatetimeFzsthj.fy.gov.cnz124.232.185.40Ústhj_fyzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36)ÚHostz
User-Agentz/root/search.dbé   úhttps://c                 óò   — t         j                  j                  dt        z   | z   t        ¬«      }t         j                  j                  |t        d¬«      }|j                  «       j                  dd¬«      }|S )Nr   )Úheadersé   )ÚcontextÚtimeoutzutf-8Úreplace)Úerrors)	ÚurllibÚrequestÚRequestÚ	SERVER_IPÚHEADERSÚurlopenÚssl_ctxÚreadÚdecode)ÚurlÚreqÚrespÚhtmls       ú"/root/gov_crawler/crawl_sthj_fy.pyÚfetchr      s`   € Ü
�.‰.×
 Ñ
  ¬iÑ!7¸#Ñ!=ÄwÐ
 Ó
O€CÜ�>‰>×!Ñ! #¬wÀÐ!ÓC€DØ�9‰9‹;×Ñ˜g¨iÐÓ8€DØ€Kó    c                 óž  — t        | «      }t        j                  d|t        j                  «      }|r|j	                  d«      j                  «       nd}t        j                  d|«      }|r|j	                  d«      nd}t        j                  d|«      }|r|j	                  d«      j                  «       nd}t        j                  d|t        j                  «      }|r|j	                  d«      nd}	|	s:t        j                  d|t        j                  «      }
|
r|
j	                  d«      nd}	t        j                  d	d
|	«      }t        j                  dd
|«      }t        j                  dd
|«      }t        j                  dd|«      }t        j                  dd|«      }t        j                  dd|«      }|j                  «       }|||||	fS )z%Fetch and extract detail page contentz,<div class="text-center u-title">(.*?)</div>é   Ú u"   å�‘å¸ƒæ—¶é—´ï¼š(\d{4}-\d{2}-\d{2})u   æ�¥æº�ï¼š([^<]+)u   é˜œé˜³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€z@<div class="g-detailbox[^>]* id="zoom"[^>]*>(.*?)</div>\s*</div>z#id="zoom"[^>]*>(.*?)</div>\s*</div>z<p[^>]*>ú
z</p>z	<br\s*/?>ú<[^>]+>z&nbsp;ú z\n\s*\n+z

)r   ÚreÚsearchÚDOTALLÚgroupÚstripÚsub)Ú
detail_urlr   ÚtÚtitleÚdÚpub_dateÚsÚsourceÚcÚcontent_htmlÚc2Úcontent_texts               r   Úextract_detailr6      sm  € ä�Ó€Dä
�	‰	ÐAÀ4ÌÏÉÓS€AÙ"#ˆA�G‰G�A‹J×ÑÔ¨€Eä
�	‰	Ð7¸Ó>€AÙˆq�w‰w�qŒz B€Hä
�	‰	Ð% tÓ,€AÙ#$ˆQ�W‰W�Q‹Z×ÑÔÐ*D€Fä
�	‰	ÐUÐW[Ô]_×]fÑ]fÓg€AÙ!"�1—7‘7˜1”:¨€LÙÜ�Y‰YÐ=¸tÄRÇYÁYÓOˆÙ&(�r—x‘x ”{¨bˆä—6‘6˜+ t¨\Ó:€LÜ—6‘6˜' 4¨Ó6€LÜ—6‘6˜,¨¨lÓ;€LÜ—6‘6˜* b¨,Ó7€LÜ—6‘6˜) S¨,Ó7€LÜ—6‘6˜+ v¨|Ó<€LØ×%Ñ%Ó'€Là�(˜F L°,Ð>Ð>r   c                  ó‚  — t        j                  t        «      } | j                  «       }|j	                  d«       | j                  «        d}d}t        dt        dz   «      D �]¦  }d|z  }t        dt        j                  «       j                  d«      |fz  «       	 t        |«      }t!        j"                  d	|t         j$                  «      }t        d
t'        |«      z  «       |D �]  \  }	}
}t(        |	z   }t!        j*                  dd|«      j-                  «       }|j	                  d|f«       |j/                  «       r|dz  }Œ_	 t1        |	«      \  }}}}}|s|}|rt'        |«      dk  rt        d|
z  «       |dz  }Œ™t'        |«      dkD  r|d d n|}|j	                  d|t(        |	z   ||||t2        df«       |j4                  dkD  r|dz  }t        d|
›d|d d ›�«       | j                  «        t        j                  d«       �Œ" �Œ© | j9                  «        t        d«       t        d||fz  «       y # t        $ r0}t        d||fz  «       t        j                  d«       Y d }~�Œ
d }~ww xY w# t        $ rA}t        d|
›d|›�«       | j7                  «        t        j                  d«       Y d }~�ŒÓd }~ww xY w)NzøCREATE TABLE IF NOT EXISTS gov_raw (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        title TEXT,
        url TEXT UNIQUE,
        content TEXT,
        summary TEXT,
        pub_date TEXT,
        site_name TEXT,
        crawl_time TEXT
    )r   r    z$/OpennessTarget/31/8325/page_%d.htmlz[%s] Fetching list page %d...z%H:%M:%Sz!  ERROR fetching list page %d: %sé   z9href="(/OpennessContent/show/(\d+)\.html)"[^>]*>(.*?)</a>z  Found %d itemsr#   r!   z)SELECT id FROM gov_raw WHERE page_url = ?é2   z%  SKIP %s: empty or too short contenti,  z�INSERT OR IGNORE INTO gov_raw (page_url, source_url, title, publish_date, content, summary, site_name, category) VALUES (?, ?, ?, ?, ?, ?, ?, ?)u   çŽ¯è¯„å…¬ç¤ºz  + z: g333333Ó?z  ERROR detail z
=== Done ===zNew: %d, Skipped: %d)Úsqlite3ÚconnectÚDB_PATHÚcursorÚexecuteÚcommitÚrangeÚ	MAX_PAGESÚprintr   ÚnowÚstrftimer   Ú	ExceptionÚtimeÚsleepr%   Úfindallr'   ÚlenÚPAGE_URL_BASEr*   r)   Úfetchoner6   Ú	SITE_NAMEÚrowcountÚrollbackÚclose)Úconnr2   Ú	total_newÚ
total_skipÚpageÚlist_urlr   ÚeÚitemsÚhrefÚitem_idÚ
title_htmlÚpage_urlr-   Údetail_titler/   r1   r5   r3   Úsummarys                       r   Úmainr]   ;   s”  € Ü�?‰?œ7Ó#€DØ�‰‹€Að ‡I�Ið 		ô 	
ð 	‡K�K„Mà€IØ€Jä�aœ Q™Ó'ó 5ˆØ9¸DÑ@ˆÜÐ-´·±³×1HÑ1HÈÓ1TÐVZÐ0[Ñ[Ô\ð	Ü˜“?ˆDô —
‘
ÐWÐY]Ô_a×_hÑ_hÓiˆÜÐ ¤3 u£:Ñ-Ô.à).ó &	Ñ%ˆD�'˜:Ü$ tÑ+ˆHÜ—F‘F˜: r¨:Ó6×<Ñ<Ó>ˆEð �I‰IÐAÀHÀ;ÔOØ�z‰zŒ|Ø˜a‘�
ØðÜM[Ð\`ÓMaÑJ�˜h¨°¸lÙ#Ø#(�LÙ#¤s¨<Ó'8¸2Ò'=ÜÐAÀGÑKÔLØ !‘O�JØô 14°LÓ0AÀCÒ0G˜, t¨Ñ,È\�ð —	‘	ð gØœ}¨tÑ3°\À8È\Ð[bÔdmÐo}Ð~ôð —:‘: ’>Ø ‘N�IÝª'°<ÀÀÑ3DÐEÔFØ—‘”Ü—
‘
˜3–òA&	ð5ðn 	‡J�J„LÜ	Ð
ÔÜ	Ð
  I¨zÐ#:Ñ
:Õ;øôg ò 	ÜÐ5¸¸q¸	ÑAÔBÜ�J‰J�qŒMÝûð	ûôV ò Ý²¹!Ð<Ô=Ø—‘”Ü—
‘
˜1”Ýûð	ús7   ÂH8Å8I4Å?BI4È8	I1É%I,É,I1É4	J>É=6J9Ê9J>Ú__main__)Ú__doc__Úurllib.requestr   Úurllib.errorÚsslr%   r:   ÚosÚsysrF   r   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_modeÚBASE_DOMAINr   rL   r   r<   rA   rJ   r   r6   r]   Ú__name__© r   r   ú<module>rl      s—   ðá Tß D× D× D× DÝ à
$ˆ#×
$Ñ
$Ó
&€Ø€Ô Ø—m‘m€Ô à€Ø€	Ø€	àð Dñ€ð
 €Ø€	ð ˜[Ñ(€òò?ò:M<ð^ ˆzÒÙ…Fð r   