Ë
    ¸¬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)u<   Crawler for yayc.gov.cn - é›¨åŸŽåŒºäººæ°‘æ”¿åºœ å…¬ç¤ºå…¬å‘Šé    N)ÚdatetimeFzwww.yayc.gov.cnz124.161.245.169ÚyayczoMozilla/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é   úhttp://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_yayc.pyÚfetchr      s`   € Ü
�.‰.×
 Ñ
  ¬YÑ!6¸Ñ!<ÄgÐ
 Ó
N€CÜ�>‰>×!Ñ! #¬wÀÐ!ÓC€DØ�9‰9‹;×Ñ˜g¨iÐÓ8€DØ€Kó    c                 óÔ  — t        | «      }t        j                  d|«      }|r|j                  d«      j	                  «       nd}|skt        j                  d|t        j
                  «      }|rD|j                  d«      j	                  «       }t        j                  dd|«      j	                  «       }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
|t        j                  «      }|r|D ]  \  }}|
d|›d|›d�z  }
Œ 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+<meta name="ArticleTitle" content="([^"]*)"é   Ú z<title>(.*?)</title>u    \s*-\s*é›¨åŸŽåŒºäººæ°‘æ”¿åºœ\s*$z1<meta name="PubDate" content="(\d{4}-\d{2}-\d{2})z,<meta name="ContentSource" content="([^"]*)"zI<div class="mt30 xqing-web-box">(.*?)</div>\s*<div class="xqing-web-file"z+<div class="mt30 xqing-web-box">(.*?)</div>zI<a[^>]*href="([^"]+)"[^>]*>([^<]+\.(?:pdf|doc|docx|xls|xlsx|zip|rar))</a>u   <br><br>é™„ä»¶ï¼š<a href="z">z</a>z<p[^>]*>ú
z</p>z	<br\s*/?>ú<[^>]+>z&nbsp;ú z\n\s*\n+z

)	r   ÚreÚsearchÚgroupÚstripÚDOTALLÚsubÚfindallÚI)Ú
detail_urlr   ÚtÚtitleÚt2ÚdÚpub_dateÚsÚsourceÚcÚcontent_htmlÚc2ÚattachmentsÚ
attach_urlÚattach_nameÚcontent_texts                   r   Úextract_detailr<      sý  € ä�Ó€Dä
�	‰	Ð@À$ÓG€AÙ"#ˆA�G‰G�A‹J×ÑÔ¨€EÙÜ�Y‰YÐ.°´b·i±iÓ@ˆÙØ—H‘H˜Q“K×%Ñ%Ó'ˆEä—F‘FÐ>ÀÀEÓJ×PÑPÓRˆEä
�	‰	ÐFÈÓM€AÙˆq�w‰w�qŒz B€Hä
�	‰	ÐAÀ4ÓH€AÙ#$ˆQ�W‰W�Q‹Z×ÑÔ¨"€Fä
�	‰	Ð^Ð`dÔfh×foÑfoÓp€AÙ!"�1—7‘7˜1”:¨€LÙÜ�Y‰YÐEÀtÌRÏYÉYÓWˆÙ&(�r—x‘x ”{¨bˆô —*‘*ÐiÐkoÔqs×quÑquÓv€KÙØ'2ò 	_Ñ#ˆJ˜ÙÂjÒR]Ð^Ñ^‰Lð	_ô —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                  «       }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 �]K  \  }	}
}}}t$        |	z   }|j'                  «       }|s%t        j(                  d
d|«      j'                  «       }|j+                  d|f«       |j-                  «       r|dz  }Œs	 t/        |	«      \  }}}}}|s|}|s|j'                  «       }|rt#        |«      dk  rt        d|
d d z  «       |dz  }ŒÂt#        |«      dkD  r|d d n|}|j+                  d|t$        |	z   ||||t0        df«       |j2                  dkD  r|dz  }t        d|
d d ›d|d d ›�«       | j5                  «        t        j                  d«       �ŒN �ŒÕ | j9                  «        t        d«       t        d||fz  «       y # t        $ r0}t        d||fz  «       t        j                  d«       Y d }~�Œ6d }~ww xY w# t        $ rD}t        d|
d d ›d|›�«       | j7                  «        t        j                  d«       Y d }~�Œd }~ww xY w)Nr   r    z!/gongkai/jichu/40016.html?page=%dz[%s] Fetching list page %d...z%H:%M:%Sz!  ERROR fetching list page %d: %sé   zp<li>.*?<a href="(/gongkai/show/([^"]+\.html))"[^>]*title="([^"]*)"[^>]*>(.*?)</a>.*?<span>([^<]+)</span>.*?</li>z  Found %d itemsr#   r!   z)SELECT id FROM gov_raw WHERE page_url = ?é2   z%  SKIP %s: empty or too short contenté   i,  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ÚrangeÚ	MAX_PAGESÚprintr   ÚnowÚstrftimer   Ú	ExceptionÚtimeÚsleepr%   r+   r)   ÚlenÚPAGE_URL_BASEr(   r*   ÚexecuteÚfetchoner<   Ú	SITE_NAMEÚrowcountÚcommitÚrollbackÚclose)Úconnr5   Ú	total_newÚ
total_skipÚpageÚlist_urlr   ÚeÚitemsÚhrefÚitem_idÚ
title_attrÚ	link_textÚdate_strÚpage_urlr/   Údetail_titler2   r4   r;   r6   Úsummarys                         r   Úmainre   F   sÂ  € Ü�?‰?œ7Ó#€DØ�‰‹€Aà€IØ€Jä�aœ Q™Ó'ó 9ˆØ6¸Ñ=ˆÜÐ-´·±³×1HÑ1HÈÓ1TÐVZÐ0[Ñ[Ô\ð	Ü˜“?ˆDô —
‘
ð  Oð  QUô  WY÷  W`ñ  W`ó  aˆÜÐ ¤3 u£:Ñ-Ô.à>Có *	Ñ:ˆD�'˜: y°(Ü$ tÑ+ˆHØ×$Ñ$Ó&ˆEÙÜŸ™˜z¨2¨yÓ9×?Ñ?ÓA�ð �I‰IÐAÀHÀ;ÔOØ�z‰zŒ|Ø˜a‘�
ØðÜM[Ð\`ÓMaÑJ�˜h¨°¸lÙ#Ø#(�LÙØ'Ÿ~™~Ó/�HÙ#¤s¨<Ó'8¸2Ò'=ÜÐAÀGÈCÈRÀLÑPÔQØ !‘O�JØô 14°LÓ0AÀCÒ0G˜, t¨Ñ,È\�ð —	‘	ð gØœ}¨tÑ3°\À8È\Ð[bÔdmÐo}Ð~ôð —:‘: ’>Ø ‘N�IÝ¨'°#°2ª,¸ÀSÀbÑ8IÐJÔKØ—‘”Ü—
‘
˜3–òI*	ð9ðv 	‡J�J„LÜ	Ð
ÔÜ	Ð
  I¨zÐ#:Ñ
:Õ;øôo ò 	ÜÐ5¸¸q¸	ÑAÔBÜ�J‰J�qŒMÝûð	ûô^ ò Ý°¸¸"²¹qÐAÔBØ—‘”Ü—
‘
˜1”Ýûð	ús8   Á<IÄ9AI?ÆB
I?É	I<É%I7É7I<É?	KÊ9KËKÚ__main__)Ú__doc__Úurllib.requestr   Úurllib.errorÚsslr%   rA   ÚosÚsysrK   r   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_modeÚBASE_DOMAINr   rQ   r   rC   rF   rN   r   r<   re   Ú__name__© r   r   ú<module>rt      s–   ðá Bß D× D× D× DÝ à
$ˆ#×
$Ñ
$Ó
&€Ø€Ô Ø—m‘m€Ô à€Ø€	Ø€	àð Dñ€ð
 €Ø€	Ø˜KÑ'€òò(?òTD<ðL ˆzÒÙ…Fð r   