Ë
    £,jª  ã                   ó  — d Z ddlZddlZddlZddlZddlZ ej                  d«       ej                  j                  dej                  j                  ej                  j                  e«      «      «       ddlmZ ddlZddlmZ dZdZdZd	e› d
�Zd	e› �ZdZdZeddœZdd„Zd„ Zdd„Zd„ Zdd„Zedk(  rKdej@                  v r1 e!ej@                  ej@                  jE                  d«      dz      «      ndZ# ee#¬«       yy)uƒ  
æƒ åŸŽåŒºäººæ°‘æ”¿åºœ â€” å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·å’Œç«£å·¥çŽ¯ä¿�éªŒæ”¶
=================================================
CMS: è‡ªå»ºé�™æ€�HTMLåˆ—è¡¨ + åˆ†é¡µ index_N.html
åˆ—è¡¨: /hcqzdlyxxgk/hjbhxxgk/jsxmjghbys/index.html â†’ index_2..10.html
è¯¦æƒ…: /hcqzdlyxxgk/hjbhxxgk/jsxmjghbys/content/post_{N}.html (content in td#zoomcon)
IP: 113.96.111.93 + Host header (no SSL needed)
é    NÚignore)Úpush_to_searchdb©ÚBeautifulSoupu=   æƒ åŸŽåŒº-å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·å’Œç«£å·¥çŽ¯ä¿�éªŒæ”¶zwww.hcq.gov.cnz113.96.111.93úhttp://z /hcqzdlyxxgk/hjbhxxgk/jsxmjghbysé
   é   zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36)ÚHostz
User-Agentc                 óB  — t        |«      D ]3  }	 t        j                  | t        d¬«      }d|_        |j
                  c S  y # t        $ rR}||dz
  k  rdd l}|j                  d«       n*t        d| d d › d	|› �t        j                  ¬
«       Y d }~ y Y d }~Œ�d }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8é   r   é   z
  [ERROR] éP   ú: )Úfile)ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚtimeÚsleepÚprintÚsysÚstderr)ÚurlÚretriesÚattemptÚrÚer   s         ú/root/gov_crawler/crawl_hcq.pyÚfetchr&   !   s‘   € Ü˜“>ò ˆð
	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJØ—6‘6ŠMñ	øô
 ò 	Ø˜ 1™Ò$ÛØ—
‘
˜1•ä˜
 3 s¨ 8 *¨B¨q¨cÐ2¼¿¹ÕDÝô ûð	ús   �.AÁ	BÁABÂBc                 ó˜  — | dk(  r
t         › d�}nt         › d| › d�}t        |«      }|sg S t        |d«      }g }|j                  d«      D ]ý  }|j	                  d«      }|sŒ|j                  dd	«      }|j                  d
d	«      xs |j                  d¬«      }|j	                  dd¬«      }	|	r|	j                  d¬«      nd	}
|r5|j                  d«      s$t        j                  j                  t        |«      }t        j                  ddt        › �|«      }|j                  |j!                  «       ||
j!                  «       dœ«       Œÿ |S )z2Fetch list page, return list of (title, url, date)r   z/index.htmlz/index_z.htmlúhtml.parserzdiv[id="fathernodid8"]ÚaÚhrefÚ ÚtitleT©ÚstripÚtdz17%)ÚwidthÚhttpúhttps?://www\.hcq\.gov\.cnr   )r,   r    Údate)Ú	LIST_BASEr&   r   ÚselectÚfindr   Úget_textÚ
startswithÚurllibÚparseÚurljoinÚDETAIL_BASEÚreÚsubÚIPÚappendr.   )Úpage_nor    r   ÚsoupÚitemsÚdivr)   r*   r,   Údate_tdr3   s              r%   Úfetch_list_pagerF   0   s3  € à�!‚|Ü�˜;Ð'‰ä�˜7 7 )¨5Ð1ˆÜ�‹:€DÙØˆ	Ü˜˜}Ó-€DØ€EØ�{‰{Ð3Ó4ò RˆØ�H‰H�S‹MˆÙØØ�u‰u�V˜RÓ ˆØ—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆà—(‘(˜4 u�(Ó-ˆÙ/6ˆw×Ñ dÐÔ+¸BˆÙ˜Ÿ™¨Ô/Ü—<‘<×'Ñ'¬°TÓ:ˆDä�v‰vÐ3°w¼r¸d°^ÀTÓJˆØ�‰˜uŸ{™{›}°TÀ4Ç:Á:Ã<ÑPÕQðRð €Ló    c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   r(   r)   r*   r+   )r1   Ú
javascriptú#ÚimgÚsrc)r1   z//zdata:)	Úbs4r   ÚstrÚfind_allr   r8   r9   r:   r;   )ÚtableÚbase_urlr   Útblr)   r*   rK   rL   s           r%   Úhtml_table_to_htmlrS   L   sÐ   € å!Ù
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@HœŸ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@HœŸ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€OrG   c                 ó´  ‡— t        | «      }|sdddg fS t        |d«      }|j                  dddi¬«      }|r |j                  dd«      j	                  «       nd}|sL|j                  d	«      }|r|j                  d
¬«      nd}t        j                  dd|«      j	                  «       }d}|j                  dddi¬«      }|r;|j                  dd«      }t        j                  d|«      }	|	r|	j                  d«      }|j                  d¬«      }
|
s||dg fS g }g }|
j                  g d¢d¬«      D ]î  }|j                  dk(  r(|j                  dd
¬«      }|sŒ(|j                  |«       Œ:|j                  dk(  r t        |«      }|sŒW|j                  |«       Œi|j                  dk(  sŒy|j                  dd«      }|j                  dd«      }|sŒ |j                  d«      s$t        j                   j#                  t$        |«      n|}|j                  d|› d|› d�«       Œð |
j                  dd gd¬«      D ]8  }|j                  dd
¬«      }|sŒt'        |«      d!kD  sŒ(|j                  |«       Œ: |
j                  d"«      D �]:  }|j                  d#d«      Š|j                  d$d«      }|j                  d
¬«      }t)        ˆfd%„d&D «       «      rht        j                  d'd(t*        › �‰«      }‰j                  d«      s$t        j                   j#                  t$        ‰«      }|j                  ||d)œ«       Œ¶d*|j-                  «       v sd+|j-                  «       v sŒÛt        j.                  d,|«      }|sŒôt        j                   j#                  t$        |j                  d«      «      }|j                  ||d)œ«       �Œ= |rd-j1                  |«      nd}||||fS ).z-Extract content from detail page (td#zoomcon)Nr(   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr+   r,   Tr-   u   _é‡�ç‚¹é¢†åŸŸä¿¡æ�¯å…¬å¼€$ÚPubDatez(\d{4}-\d{1,2}-\d{1,2})r   Úzoomcon)Úid)ÚprP   rK   F)Ú	recursiver]   ú rP   rK   rL   Úaltr1   z![z](ú)rD   Úspané   r)   r*   Úonclickc              3   óB   •K  — | ]  }|‰j                  «       v –— Œ y ­w)N)Úlower)Ú.0Úextr*   s     €r%   ú	<genexpr>zparse_detail.<locals>.<genexpr>�   s   øè ø€ ÒO sˆs�d—j‘j“lÔ"ÑOùs   ƒ)z.pdfz.docz.xlsz.zipr2   r   )rV   r    ÚpdfÚdownloadz['\"]([^'\"]+\.pdf)['\"]z

)r&   r   r6   r   r.   r7   r=   r>   ÚmatchÚgrouprO   rV   r@   rS   r8   r9   r:   r;   r<   ÚlenÚanyr?   rf   ÚsearchÚjoin)Ú
detail_urlr   rB   Ú
meta_titler,   Ú	title_tagÚdate_strÚ	meta_dateÚpub_contentÚdate_mÚzoomÚ
body_partsÚattachmentsÚelÚtxtÚmdrL   r`   Úfull_srcr)   rd   ÚfnameÚfull_urlÚ	url_matchÚbodyr*   s                            @r%   Úparse_detailr„   [   s~  ø€ ä�Ó€DÙØ�T˜4 Ð#Ð#Ü˜˜}Ó-€Dà—‘˜6¨&°.Ð)A�ÓB€JÙ5?ˆJ�N‰N˜9 bÓ)×/Ñ/Ô1ÀR€EÙØ—I‘I˜gÓ&ˆ	Ù2;�	×"Ñ"¨Ð"Ô.ÀˆÜ—‘Ð4°b¸%Ó@×FÑFÓHˆà€HØ—	‘	˜&¨°Ð(;�	Ó<€IÙØ—m‘m I¨rÓ2ˆÜ—‘Ð4°kÓBˆÙØ—|‘| A“ˆHØ�9‰9˜	ˆ9Ó"€DÙØ�h  bÐ(Ð(à€JØ€KØ�m‰mÒ1¸UˆmÓCò ;ˆØ�7‰7�cŠ>Ø—+‘+˜c¨�+Ó.ˆCÚØ×!Ñ! #Õ&Ø�W‰W˜ÒÜ# BÓ'ˆBÚØ×!Ñ! "Õ%Ø�W‰W˜ÓØ—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÚØILÏÉÐX^ÔI_œ6Ÿ<™<×/Ñ/´¸SÔAÐeh�Ø×!Ñ! B s e¨2¨h¨Z°qÐ"9Õ:ð;ð  �m‰m˜U F˜O°uˆmÓ=ò #ˆØ�k‰k˜# TˆkÓ*ˆÚ”3�s“8˜b“=Ø×Ñ˜cÕ"ð#ð
 �]‰]˜3Óó EˆØ�u‰u�V˜RÓ ˆØ—%‘%˜	 2Ó&ˆØ—
‘
 �
Ó&ˆäÓOÐ.NÔOÔOÜ—v‘vÐ;¸wÄrÀd¸^ÈTÓRˆHØ—?‘? 6Ô*Ü!Ÿ<™<×/Ñ/´¸TÓB�Ø×Ñ¨°hÑ?Õ@à�g—m‘m“oÑ%¨°w·}±}³Ò)FÜŸ	™	Ð"=¸wÓGˆIÚÜ!Ÿ<™<×/Ñ/´¸Y¿_¹_ÈQÓ=OÓP�Ø×"Ñ"¨E¸(Ñ#CÖDðEñ  '1ˆ6�;‰;�zÔ"°d€DØ�(˜D +Ð-Ð-rG   é   c                 ó(  — g }t        | t        «      }t        d|dz   «      D ]?  }t        |«      }|s n0|j	                  |«       t        d|› dt        |«      › d�d¬«       ŒA t        dt        |«      › �d¬«       g }d}d}t        |«      D ]Ñ  \  }}	|	d	   }
|	d
   }|	d   }t        |«      \  }}}}|xs |
}|xs |}|r"dj                  |D �cg c]  }|d   ‘Œ	 c}«      nd}|r|dz  }|s|dz  }|j                  t        |||||xs d|rt        j                  dd|xs d«      d d nd|dœ«       |dz   dz  dk(  sŒ³t        d|dz   › dt        |«      › �d¬«       ŒÓ t        dt        |«      › d|› d|› d�d¬«       t        |d«       y c c}w )Nr   zPage r   z itemsT)Úflushz
Total list items: r   r,   r    r3   ú;rV   r+   z\s+r_   i,  )Ú	site_namer,   r    Ú
source_urlÚpub_daterY   Úsummaryr{   r   z
  Parsed: ú/zParsed: z items (z empty body, z with attachments)Úhcq_hjbh)ÚminÚTOTAL_PAGESr   rF   Úextendr   rn   Ú	enumerater„   rq   r@   Ú	SITE_NAMEr=   r>   r   )ÚpagesÚ	all_itemsÚ	max_pagesrA   rC   ÚresultsÚ
empty_bodyÚwith_attachÚiÚitemr,   rr   Ú	list_dateÚparsed_titler‹   rƒ   r{   Úfinal_titleÚ
final_dater)   Ú
attach_strs                        r%   Úcrawlr¡   Ÿ   sÚ  € Ø€IÜ�Eœ;Ó'€IÜ˜˜I¨™MÓ*ò AˆÜ Ó(ˆÙÙØ×Ñ˜ÔÜ��g�Y˜b¤ U£ ¨FÐ3¸4Ö@ðAô 
Ð ¤ Y£Ð 0Ð
1¸Õ>Ø€GØ€JØ€KÜ˜YÓ'ò C‰ˆˆ4Ø�W‘ˆØ˜%‘[ˆ
Ø˜‘Lˆ	Ü4@ÀÓ4LÑ1ˆ�h  kØ"Ò+ eˆØÒ* ˆ
ÙCN�S—X‘X°+Ö>¨Q˜q ›yÒ>Ô?ÐTVˆ
ÙØ˜1ÑˆKÙØ˜!‰OˆJØ�‰Ü"Ø ØØ$Ø"Ø’z˜rÙBFœŸ™˜v s¨DªJ°BÓ7¸¸Ñ=ÈBØ%ñ	
ô 		ð �‰E�R‰<˜1ÓÜ�J˜q ™s˜e 1¤S¨£^Ð$4Ð5¸TÖBð/Cô0 
ˆH”S˜“\�N (¨:¨,°mÀKÀ=ÐPbÐ
cÐkoÕpÜ�W˜jÕ)ùò% ?s   ÃF
Ú__main__z--pagesr   )r”   )é   )r+   )r…   )$Ú__doc__r   Úosr=   Úurllib.parser9   ÚwarningsÚfilterwarningsÚpathÚinsertÚdirnameÚabspathÚ__file__Úcrawler_libr   r   rM   r   r“   ÚBASE_DOMAINr?   r4   r<   r�   ÚITEMS_PER_PAGEr   r&   rF   rS   r„   r¡   Ú__name__ÚargvÚintÚindexr”   © rG   r%   ú<module>r¶      s  ðñ÷ +× *Ó *Ø €× Ñ ˜Ô !à ‡�‡���2—7‘7—?‘? 2§7¡7§?¡?°8Ó#<Ó=Ô >Ý (ã Ý àK€	Ø€Ø€Ø�b�TÐ9Ð:€	Ø˜�tˆn€Ø€Ø€ð ð Dñ€óòó8òA.óH&*ðR ˆzÒØ<EÈÏÉÑ<Q‰C�—‘˜Ÿ™Ÿ™¨	Ó2°QÑ6Ñ7Ô8ÐWX€EÙ	�Öð rG   