Ë
    ¸¬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
 ddlmZ e	j                  e	_        dZdZdZdZd	Zd
ZddiZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uH   Crawl chq.mas.gov.cn - é©¬éž�å±±æ…ˆæ¹–é«˜æ–°åŒºé€šçŸ¥å…¬å‘Š (Lonsun CMS)é    N)Údatetime)Úurljoinzhttps://chq.mas.gov.cnz-https://chq.mas.gov.cn/content/column/4716840Úchq_mas_tzggz/root/search.dbé   é   z
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 óø   — t         › d| › dt        › �}t        j                  j	                  |t
        ¬«      }t        j                  j                  |d¬«      }|j                  «       j                  dd¬«      }|S )	Nz?pageIndex=z
&pageSize=©Úheadersé   ©Útimeoutúutf-8Úreplace©Úerrors)	Ú
COLUMN_URLÚ	PAGE_SIZEÚurllibÚrequestÚRequestr
   ÚurlopenÚreadÚdecode)ÚpageÚurlÚreqÚrespÚhtmls        ú/root/gov_crawler/crawl_chq.pyÚfetch_list_pager       sj   € ÜˆL˜ D 6¨´I°;Ð
?€CÜ
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CÜ�>‰>×!Ñ! #¨rÐ!Ó2€DØ�9‰9‹;×Ñ˜g¨iÐÓ8€DØ€Kó    c                 ó   — t        j                  d| t         j                  «      }g }|D ]a  \  }}}|j                  «       }d|vrŒ|j	                  d«      st        t        |«      n|}|j                  ||j                  «       |dœ«       Œc |S )z3Extract article URLs and dates from list page HTML.zq<li[^>]*>.*?<a href="([^"]+)"[^>]*title="([^"]*)"[^>]*>.*?</a>.*?<span[^>]*class="right date"[^>]*>([^<]+)</span>zchq.mas.gov.cnÚhttp)r   ÚtitleÚdate)ÚreÚfindallÚDOTALLÚstripÚ
startswithr   ÚBASEÚappend)r   ÚitemsÚresultÚhrefr$   Údate_strr%   Úfull_urls           r   Ú
parse_listr2      s‹   € ä�J‰JØ|ØŒb�i‰ió€Eð €FØ!&ò OÑˆˆe�XØ�~‰~Óˆà 4Ñ'ØØ.2¯o©o¸fÔ.E”7œ4 Ô&È4ˆØ�‰˜h°·±³ÈÑMÕNðOð €Mr!   c                 óR  — 	 t         j                  j                  | t        ¬«      }t         j                  j	                  |d¬«      }|j                  «       j                  dd¬«      }t        j                  d|t        j                  «      }|s%t        j                  d|t        j                  «      }|sy	|j                  d
«      j                  «       }g }t        j                  d|t        j                  «      D ]ç  }t        | |«      }t        j                  dt        j                  |«      z   dz   |t        j                  t        j                  z  «      }	d	}
|	r4t        j                   dd	|	j                  d
«      «      j                  «       }
|
s'|j#                  d«      d   j%                  dd
«      d   }
|j'                  d|
› d|› d�«       t)        d|
dd › �«       Œé |}|r|ddj+                  |«      z   z  }|S # t,        $ r}t)        d|› �«       Y d}~y	d}~ww xY w)z<Fetch article detail page and extract content + attachments.r	   r   r   r   r   r   zM<div[^>]*class="wzcon j-fontContent"[^>]*>(.*?)</div>\s*<(?:script|style|div)z,class="wzcon j-fontContent"[^>]*>(.*?)</div>Ú é   z1href="([^"]*\.(?:pdf|doc|docx|xls|xlsx|zip|rar))"z<a[^>]*href="z"[^>]*>(.*?)</a>z<[^>]+>ú/éÿÿÿÿú.r   ú[z](ú)z
    +ATT: Né(   u   

**é™„ä»¶ï¼š**
ú
z  Detail error: )r   r   r   r
   r   r   r   r&   Úsearchr(   Úgroupr)   r'   ÚIr   ÚescapeÚsubÚsplitÚrsplitr,   ÚprintÚjoinÚ	Exception)r   r   r   r   ÚmÚcontent_htmlÚattachmentsr/   ÚfullÚa_matchÚtextÚcontentÚes                r   Úfetch_detailrO   -   sì  € ð$Ü�n‰n×$Ñ$ S´'Ð$Ó:ˆÜ�~‰~×%Ñ% c°2Ð%Ó6ˆØ�y‰y‹{×!Ñ! '°)Ð!Ó<ˆô �I‰IÐfÐhlÔnp×nwÑnwÓxˆÙÜ—	‘	ÐIÈ4ÔQS×QZÑQZÓ[ˆAÙØà—w‘w˜q“z×'Ñ'Ó)ˆð ˆÜ—J‘JÐSÐUaÔce×cgÑcgÓhò 
	,ˆDÜ˜3 Ó%ˆDä—i‘iÐ 0´2·9±9¸T³?Ñ BÐEXÑ XÐZfÔhj×hlÑhlÔoq×oxÑoxÑhxÓyˆGØˆDÙÜ—v‘v˜j¨"¨g¯m©m¸AÓ.>Ó?×EÑEÓG�ÙØ—z‘z #“ rÑ*×1Ñ1°#°qÓ9¸!Ñ<�Ø×Ñ  4 &¨¨4¨&°Ð2Ô3Ü�J˜t C R˜y˜kÐ*Õ+ð
	,ð ˆÙØÐ,¨t¯y©y¸Ó/EÑEÑEˆGàˆøÜò ÜÐ   Ð$Ô%Üûðús   ‚B5H Â8EH È	H&ÈH!È!H&c                 ód  — | syt        j                  t        «      }|j                  d«       |j	                  «       }d}| D ]Û  }|j                  d|d   f«      j                  «       }|rt        d|d   d d › �«       Œ>|j                  dt        |d   |d   |d   |d	   |d	   r0t        t        j                  |d	   d
«      j                  «       «      nd|d   r|d   d d nd|d   f«       |j                  «        |dz  }t        d|d   d d › d|d	   › �«       ŒÝ |j                  «        |S )Nr   úPRAGMA busy_timeout=30000ú)SELECT id FROM gov_raw WHERE source_url=?r   ú  SKIP: r$   r;   zŒINSERT INTO gov_raw (site_name, source_url, page_url, title, publish_date, date_rank, summary, content)
            VALUES (?,?,?,?,?,?,?,?)r%   ú%Y-%m-%drM   éÈ   r4   r5   ú  OK: é2   ú | )Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorÚfetchonerD   Ú	SITE_NAMEÚintr   ÚstrptimeÚ	timestampÚcommitÚclose)ÚrecordsÚconnÚcÚcountÚrÚexistings         r   Ú
save_to_dbrk   V   sF  € ÙØÜ�?‰?œ7Ó#€DØ‡L�LÐ,Ô-Ø�‰‹€AØ€EØò 8ˆØ—9‘9ÐHÈ1ÈUÉ8È+ÓV×_Ñ_ÓaˆÙÜ�H˜Q˜w™Z¨¨˜_Ð-Ð.Ô/ØØ	�	‰	ð (ä˜a ™h¨¨%©°!°G±*¸aÀ¹iØPQÐRXÒPY”3”x×(Ñ(¨¨6©°JÓ?×IÑIÓKÔLÐ_`Ø)*¨9ª�1�Y‘<  Ñ%¸2¸qÀ¹|ðMô	Nð
 	�‰ŒØ�‰
ˆÜ��q˜‘z # 2�Ð' s¨1¨V©9¨+Ð6Õ7ð8ð 	‡J�J„LØ€Lr!   c                  ó4  — t        dt        › d�«       g } t        dt        dz   «      D ]h  }	 t	        |«      }t        |«      }|st        d|› d�«        n>t        d|› dt        |«      › d�«       | j                  |«       t        | «      dk\  r nŒj t        d
t        | «      › �«       d}t        | «      D �]k  \  }}t        d|dz   › dt        | «      › d|d   d d › d�«       	 t        |d   «      }||d<   t        j                  t        «      }	|	j                  d«       |	j                  «       }
|
j                  d|d   f«      j!                  «       }|r%t        d|d   d d › �«       |	j#                  «        ŒÇ|
j                  dt        |d   |d   |d   |d   |d   r0t%        t'        j(                  |d   d«      j+                  «       «      nd|r|d d nd|f«       |	j-                  «        |	j#                  «        |dz  }t        d|d   d d › d|d   › �«       �Œn t        d |› dt        | «      › d!�«       y # t        $ r}t        d|› d	|› �«       Y d }~ �ŒÐd }~ww xY w# t        $ r"}t        d|d   d d › d|› �«       Y d }~�ŒÚd }~ww xY w)"Nz=== Crawling z ===r5   zPage z: no items, stoppingz: z itemsiÙ  z
: error - z
Total list items: r   r9   r6   z] r$   rW   z...r   rM   rQ   rR   rS   r;   z�INSERT INTO gov_raw (site_name, source_url, page_url, title, publish_date, date_rank, summary, content)
                VALUES (?,?,?,?,?,?,?,?)r%   rT   rU   r4   rV   rX   z  Error importing z
=== Complete: z new records ===)rD   r_   ÚrangeÚ	MAX_PAGESr    r2   ÚlenÚextendrF   Ú	enumeraterO   rY   rZ   r[   r\   r]   r^   rd   r`   r   ra   rb   rc   )Ú	all_itemsr   r   r-   rN   ÚsavedÚiÚitemrM   rf   rg   rj   s               r   Úmainrv   n   sÏ  € Ü	ˆMœ)˜ DÐ
)Ô*ð €IÜ�aœ Q™Ó'ò ˆð	Ü" 4Ó(ˆDÜ˜tÓ$ˆEÙÜ˜˜d˜VÐ#7Ð8Ô9ÙÜ�E˜$˜˜r¤# e£* ¨VÐ4Ô5Ø×Ñ˜UÔ#Ü�9‹~ Ò%Ùð &ðô 
Ð ¤ Y£Ð 0Ð
1Ô2ð €EÜ˜YÓ'ó B‰ˆˆ4Ü��!�A‘#��aœ˜I›Ð' r¨$¨w©-¸¸Ð*<Ð)=¸SÐAÔBð	BÜ" 4¨¡;Ó/ˆGØ%ˆD�‰Oä—?‘?¤7Ó+ˆDØ�L‰LÐ4Ô5Ø—‘“ˆAØ—y‘yÐ!LÈtÐTYÉ{ÈnÓ]×fÑfÓhˆHÙÜ˜  g¡¨s°Ð!3Ð 4Ð5Ô6Ø—
‘
”ØØ�I‰Ið ,ä  $ u¡+¨t°E©{¸DÀ¹MÈ4ÐPVÉ<ØW[Ð\bÒWc”sœ8×,Ñ,¨T°&©\¸:ÓF×PÑPÓRÔSÐijÙ(/�w˜t ‘}°R¸ðBôCð
 �K‰KŒMØ�J‰JŒLØ�Q‰JˆEÜ�F˜4 ™=¨¨"Ð-Ð.¨c°$°v±,°Ð@ÖAð-Bô4 
Ð˜U˜G 1¤S¨£^Ð$4Ð4DÐ
EÕFøôE ò 	Ü�E˜$˜˜z¨!¨Ð-Ô.Þûð	ûô> ò 	BÜÐ& t¨G¡}°S°bÐ'9Ð&:¸"¸Q¸CÐ@×AÒAûð	Bús=   ­'IÁ:IÃ'BI,Å?B%I,É	I)ÉI$É$I)É,	JÉ5JÊJÚ__main__)Ú__doc__Úsysr&   ÚjsonrY   Úurllib.requestr   Úurllib.errorÚ	tracebackÚsslr   Úurllib.parser   Ú_create_unverified_contextÚ_create_default_https_contextr+   r   r_   r[   r   rn   r
   r    r2   rO   rk   rv   Ú__name__© r!   r   ú<module>r„      s…   ðá Nß K× K× K× KÝ Ý  à$'×$BÑ$B€Ô !à€Ø<€
Ø€	Ø
€Ø€	Ø€	ð ÐPð€ò
òò &òRò02Gðj ˆzÒÙ…Fð r!   