Ë
    ¸¬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mZ d dl	m
Z
 d dlZdZdZdZdZ e j                   dd	«      Z ej$                  «        ed
¬«      z
  j'                  d«      ZdZdedefd„Zdededededz  fd„Zdedefd„Zdedefd„Zdedefd„Zd„ Zd„ Z e!dk(  r; e"ejF                  «      dkD  rejF                  d   ndZ$e$dk(  r e «        y e«        yy)é    N)ÚdatetimeÚ	timedelta)Úurljoinzhttps://sthjj.hefei.gov.cnz/hbyw/hpsp/jsxmhpgs/index.htmlz/content/column/6800451u"   å�ˆè‚¥å¸‚-å»ºè®¾é¡¹ç›®çŽ¯è¯„å…¬ç¤ºÚ	SEARCH_DBz/root/search.dbiG  )Údaysz%Y-%m-%dz/tmp/solve_hefei_jsl.jsÚurl_pathÚreturnc                 óF  — 	 t        j                  dt        gddd¬«      }|j                  j	                  «       }|j                  d«      D ]F  }|j	                  «       }|j                  d«      sŒ%	 t        j                  |«      }d|v rd|v r|c S ŒH t        d	|d
d › �d¬«       |j                  rt        d|j                  d
d › �d¬«       i S #  Y Œ‹xY w# t         j                  $ r t        dd¬«       Y i S t        $ r}t        d	|› �d¬«       Y d
}~i S d
}~ww xY w)zERun Node.js script to solve JS challenge, returns {jsluid, clearance}ÚnodeTé   )Úcapture_outputÚtextÚtimeoutú
ú{ÚjsluidÚ	clearancez  [JSL ERROR] NéÈ   ©Úflushz  [JSL STDERR] z  [JSL ERROR] Timeout)Ú
subprocessÚrunÚ
JSL_SCRIPTÚstdoutÚstripÚsplitÚ
startswithÚjsonÚloadsÚprintÚstderrÚTimeoutExpiredÚ	Exception)r   ÚresultÚoutÚlineÚdataÚes         ú /root/gov_crawler/crawl_hefei.pyÚ	solve_jslr*      s(  € ð0Ü—‘Ø”ZÐ Ø d°Bô
ˆð �m‰m×!Ñ!Ó#ˆØ—I‘I˜d“Oò 	ˆDØ—:‘:“<ˆDØ�‰˜sÕ#ðÜŸ:™: dÓ+�DØ 4Ñ'¨K¸4Ñ,?Ø#šøð	ô 	�˜s 4 C˜y˜kÐ*°$Õ7Ø�=Š=Ü�O F§M¡M°$°3Ð$7Ð#8Ð9ÀÕFð
 €IøðÙûô ×$Ñ$ò 3ÜÐ%¨TÖ2ð €Iô ò 0Ü�˜q˜cÐ"¨$×/Ñ/Ø€Iûð0ús<   ‚A.C Á2CÂC Â>C ÃCÃC Ã D Ã=D ÄDÄD r   r   c                 ó  — 	 t        j                  t        › | › �dd|› d|› �dœd¬«      }|j                  dk7  ry|j                  }	 |j                  |j                  xs d	d
¬«      }d|v r|S 	 d}ddl}|j                  d||j                  «      }|r-|j                  d«      j                  «       j                  «       }|sL|j                  d||j                  «      }|r-|j                  d«      j                  «       j                  «       }|r|gng g d¢z   D ]!  }	|	sŒ	 |j                  |	d
¬«      }d|v r|c S Œ# |j                  d	d¬«      S #  Y ŒçxY w#  Y ŒBxY w# t        $ r}
t        d|
› �d¬«       Y d}
~
yd}
~
ww xY w)u2   ä½¿ç”¨JSL cookiesè¯·æ±‚é¡µé�¢ï¼Œè‡ªåŠ¨æ£€æµ‹ç¼–ç �z<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z__jsluid_s=z; __jsl_clearance_s=)z
User-AgentÚCookier   )Úheadersr   r   Núutf-8Ústrict)Úerrorsz<title>r   s1   <meta[^>]*charset[\s]*=[\s]*["']?([a-zA-Z0-9_-]+)é   s)   Content-Type[^>]*charset=([a-zA-Z0-9_-]+))r.   ÚgbkÚgb2312Úgb18030Úreplaceu       [ERROR] è¯·æ±‚å¤±è´¥: Tr   )ÚrequestsÚgetÚBASE_URLÚstatus_codeÚcontentÚdecodeÚencodingÚreÚsearchÚIÚgroupÚlowerr#   r    )r   r   r   ÚrespÚrawr$   ÚcharsetÚ_reÚmÚencr(   s              r)   Úfetch_with_jslrH   2   s«  € ð,Ü�|‰|Üˆj˜˜
Ð#à\Ø'¨ xÐ/CÀIÀ;ÐOñð ô
ˆð ×Ñ˜sÒ"ØØ�l‰lˆð	Ø—Z‘Z §¡Ò 8°À�ZÓJˆFØ˜FÑ"Ø�ð #ð
 ˆÛà�J‰JÐPÐRUÐWZ×W\ÑW\Ó]ˆÙØ—g‘g˜a“j×'Ñ'Ó)×/Ñ/Ó1ˆGÙØ—
‘
ÐLÈcÐSV×SXÑSXÓYˆAÙØŸ'™' !›*×+Ñ+Ó-×3Ñ3Ó5�á!(�W‘I¨bÒ4YÑYò 	ˆCÙØðØŸ™ C°˜Ó9�Ø Ñ&Ø!’Mð 'ð	ð �z‰z˜'¨)ˆzÓ4Ð4øð1	Ùûð(Ùûô ò ÜÐ*¨1¨#Ð.°dÕ;ÜûðúsS   ‚8E! »E! Á&E Á/B3E! Ä#EÄ;E! Ä>E! ÅEÅE! ÅEÅE! Å!	FÅ*E?Å?FÚhtmlc                 óÆ  — g }t        j                  d| t         j                  «      }|s|S |j                  d«      }t        j                  d|t         j                  «      }|D ]ú  }t        j                  d|«      }|r|j                  d«      nd}t        j                  d|«      }|r|j                  d«      nd}	t        j                  d|«      }
|
r|
j                  d«      j                  «       nd}|sLt        j                  d|«      }|r4t        j                  d	d|j                  d«      «      j                  «       }|	sŒã|sŒæ|j                  ||	|d
œ«       Œü |S )u   è§£æž�åˆ—è¡¨é¡µçš„æ–‡ç« æ�¡ç›®z%class="doc_list[^"]*"[^>]*>(.*?)</ul>r1   z<li[^>]*>(.*?)</li>z(\d{4}-\d{2}-\d{2})Ú zhref="([^"]+)"ztitle="([^"]*)"z<span[^>]*>(.*?)</span>ú<[^>]+>)ÚtitleÚurlÚdate)r=   r>   ÚDOTALLr@   Úfindallr   ÚsubÚappend)rI   ÚitemsrF   Úul_htmlÚlisÚliÚdate_mrO   Úurl_mrN   Útitle_mrM   Úspan_ms                r)   Úparse_list_itemsr\   b   s$  € à€Eä
�	‰	Ð:¸DÄ"Ç)Á)ÓL€AÙØˆØ�g‰g�a‹j€Gä
�*‰*Ð+¨W´b·i±iÓ
@€CØò Eˆä—‘Ð1°2Ó6ˆÙ"(ˆv�|‰|˜AŒ¨bˆä—	‘	Ð+¨RÓ0ˆÙ %ˆe�k‰k˜!Œn¨2ˆä—)‘)Ð.°Ó3ˆÙ,3�—‘˜aÓ ×&Ñ&Ô(¸ˆÙä—Y‘YÐ9¸2Ó>ˆFÙÜŸ™˜z¨2¨v¯|©|¸A«Ó?×EÑEÓG�Ú’5Ø�L‰L 5°¸dÑCÕDð!Eð" €Ló    c                 ó„  — d}t        j                  d| t         j                  «      }|rD|j                  d«      j	                  «       }t        j
                  dd|«      j	                  «       }d}dD ]_  }t        j                  d|› d�| t         j                  t         j                  z  «      }|sŒ@|j                  d«      j	                  «       } n |sSdD ]N  }t        j                  d	|› d
�| t         j                  «      }|sŒ/|j                  d«      j	                  «       } n |sSdD ]N  }t        j                  d|› d
�| t         j                  «      }|sŒ/|j                  d«      j	                  «       } n |r>t        j
                  ddt        › d�|«      }t        j
                  ddt        › d�|«      }||fS )u%   æ��å�–è¯¦æƒ…é¡µçš„æ­£æ–‡HTMLå’Œæ ‡é¢˜rK   z<title>(.*?)</title>r1   u&   [_-].*?(å�ˆè‚¥|ç”Ÿæ€�çŽ¯å¢ƒ|æ”¿åºœ).*$)ÚzoomÚZoomÚarticler:   únews-contentzid\s*=\s*["\']?z["\']?[^>]*>(.*?)</div>)Ú
TRS_EditorÚconTxtzarticle-contentÚCustom_UnionStylezewb-articleÚnewscontnetÚminh500zclass="[^"]*z[^"]*">(.*?)</div>)r`   ra   r:   rb   z	id="[^"]*zhref="/zhref="ú/zsrc="/zsrc=")r=   r>   rP   r@   r   rR   Ú
IGNORECASEr8   )rI   rM   rZ   r:   ÚcidrF   Úclss          r)   Úextract_detail_contentrl   €   s—  € à€EÜ�i‰iÐ/°´r·y±yÓA€GÙØ—‘˜aÓ ×&Ñ&Ó(ˆÜ—‘Ð@À"ÀeÓL×RÑRÓTˆà€GàEò ˆÜ�I‰I˜¨¨Ð-DÐEÀtÌRÏYÉYÔY[×YfÑYfÑMfÓgˆÚØ—g‘g˜a“j×&Ñ&Ó(ˆGÙð	ñ
 ð=ò 	ˆCä—	‘	˜\¨#¨Ð.@ÐAÀ4ÌÏÉÓSˆAÚØŸ'™' !›*×*Ñ*Ó,�Ùð	ñ ØAò 	ˆCÜ—	‘	˜Y s eÐ+=Ð>ÀÄbÇiÁiÓPˆAÚØŸ'™' !›*×*Ñ*Ó,�Ùð		ñ Ü—&‘&˜ v¬h¨Z°qÐ%9¸7ÓCˆÜ—&‘&˜ e¬H¨:°QÐ$7¸ÓAˆØ�'ˆ>Ðr]   Úhtml_contentc                 óŠ   — | syt        j                  dd| «      }t        j                  dd|«      j                  «       }|d d S )NrK   rL   z\s+ú r   )r=   rR   r   )rm   r   s     r)   Úget_summaryrp   £   sA   € ÙØÜ�6‰6�*˜b ,Ó/€DÜ�6‰6�&˜#˜tÓ$×*Ñ*Ó,€DØ��ˆ:Ðr]   c            
      ó  — t        dd¬«       t        dt        › �d¬«       t        dd¬«       t        t        «      } | st        dd¬«       y t        d| d   d d	 › d
�d¬«       t	        j
                  t        «      }|j                  «       }d}d}d}d}d}||k  �rÈ|dz  }|dk(  rt        }nt        › d|› �}t        d|› d|› �d¬«       t        || d   | d   «      }	|	st        dd¬«       �nut        |	«      }
|
st        dd¬«       �nYt        dt        |
«      › d�d¬«       |
D ]Ð  }|d   }|r|t        k  r|dz  }Œ|d   }|d   }t        |j                  t        d«      | d   | d   «      }|}d}|rt        |«      \  }}|r|}nt        d|dd  › �d¬«       t        |«      xs |}	 |j!                  d||t"        |||f«       |j$                  dkD  r|dz  }n|dz  }t)        j*                  d «       ŒÒ |dk(  rIt-        j.                  d!|	«      }|r+t1        |j3                  d«      «      }t        d"|› �d¬«       n|	sn|
snt)        j*                  d«       ||k  r�ŒÈ|j5                  «        |j7                  «        t        d#d¬«       t        d$|› �d¬«       t        d%|› d�d¬«       t        d&|› d�d¬«       t        d'|› d�d¬«       y # t&        $ r!}t        d|d d › d|› �d¬«       Y d }~�Œd }~ww xY w)(Nu(   [INFO] å�ˆè‚¥å¸‚çŽ¯è¯„å®¡æ‰¹çˆ¬è™«å�¯åŠ¨Tr   u   [INFO] æˆªæ­¢æ—¥æœŸ: u     [JSL] æ­£åœ¨ç ´è§£JSæŒ‘æˆ˜...u   [ERROR] JSæŒ‘æˆ˜ç ´è§£å¤±è´¥u     [JSL] é€šè¿‡! jsluid=r   é   z...r   é2   r1   z?pageIndex=z  [PAGE z] r   u       [ERROR] é¡µé�¢èŽ·å�–å¤±è´¥u)       [WARN] æœªæ‰¾åˆ°æ–‡ç« åˆ—è¡¨ï¼Œç»“æ�Ÿz    õ    æ�¡rO   rN   rM   rK   u       [WARN] è¯¦æƒ…èŽ·å�–å¤±è´¥: iØÿÿÿútINSERT OR IGNORE INTO gov_raw (title, page_url, site_name, summary, content, publish_date) VALUES (?, ?, ?, ?, ?, ?)u       [ERROR] å…¥åº“å¤±è´¥: r   ú - g333333Ó?zpageCount:\s*(\d+)u       æ€»é¡µæ•°: u   
[DONE] å�ˆè‚¥å¸‚çˆ¬å�–å®Œæˆ�u     çˆ¬å�–é¡µæ•°: u
     æ–°å¢ž: u     å·²å­˜åœ¨: u     è·³è¿‡(æ—¥æœŸè¶…é™�): )r    ÚCUTOFF_DATEr*   Ú	LIST_PATHÚsqlite3ÚconnectÚDB_PATHÚcursorÚ
COLUMN_APIrH   r\   Úlenr5   r8   rl   rp   ÚexecuteÚ	SITE_NAMEÚrowcountr#   ÚtimeÚsleepr=   r>   Úintr@   ÚcommitÚclose)ÚcookiesÚconnÚcurÚ	total_newÚ	total_oldÚ
total_skipÚpageÚ	max_pagesr   rI   rT   ÚitemrO   Úpage_urlrM   Údetail_htmlÚdetail_titleÚcontent_htmlÚdtÚsummaryr(   Útotal_ms                         r)   Úcrawlr—   «   sP  € Ü	Ð4¸TÕBÜ	Ð!¤+ Ð
/°tÕ<ô 
Ð+°DÕ9Üœ	Ó"€GÙÜÐ,°DÕ9ØÜ	Ð# G¨HÑ$5°b°qÐ$9Ð#:¸#Ð
>ÀdÕKä�?‰?œ7Ó#€DØ
�+‰+‹-€Cà€IØ€IØ€JØ€DØ€Ià
�Ó
Ø�‰	ˆà�1Š9Ü ‰Hä$˜ [°°Ð7ˆHä�˜˜˜b  
Ð+°4Õ8Ü˜h¨°Ñ(9¸7À;Ñ;OÓPˆÙÜÐ2¸4Õ@Ùä  Ó&ˆÙÜÐ=ÀdÕKÙä�”S˜“Z�L Ð%¨TÕ2Øò #	ˆDØ˜‘<ˆDÙ˜œ{Ò*Ø˜a‘�
Øà˜E‘{ˆHØ˜‘MˆEô )¨×)9Ñ)9¼(ÀBÓ)GØ)0°Ñ):¸GÀKÑ<PóRˆKà ˆLØˆLÙÜ#9¸+Ó#FÑ ��LÙØ#%‘LäÐ7¸ÀÀ¸Ð7GÐHÐPTÕUÜ! ,Ó/Ò?°<ˆGðZØ—‘ð0à! 8¬Y¸ÀÈtÐTôð
 —<‘< !Ò#Ø ‘N‘Ià ‘N�Iô �J‰J�s�OðG#	ðL �1Š9ä—i‘iÐ 5°tÓ<ˆGÙÜ §¡¨aÓ 0Ó1�	Ü˜¨	 {Ð3¸4Ö@ñ ØÙØä�
‰
�1ŒðO �Ô
ðR 	‡K�K„MØ‡J�J„LÜ	Ð*°4Õ8Ü	Ð˜T˜FÐ
#¨4Õ0Ü	ˆJ�y�k Ð
&¨dÕ3Ü	ˆM˜)˜ DÐ
)°Õ6Ü	Ð$ Z L°Ð
5¸TÖBøô7 ò ZÜÐ2°<ÀÀÐ3DÐ2EÀSÈÈÐLÐTX×YÓYûðZús   Æ/6KË	LË K<Ë<Lc                  ó&  — t        dd¬«       t        t        «      } | st        dd¬«       yt        t        | d   | d   «      }|st        dd¬«       yt	        |«      }t        d	t        |«      › d
�d¬«       t        j                  t        «      }|j                  «       }d}|D ]‰  }|d   }t        |j                  t        d«      | d   | d   «      }d}	|rt        |«      \  }
}	t        |	«      xs |d   }	 |j                  d|d   |t        ||	|d   f«       |j                   dkD  r|dz  }Œ‹ |j%                  «        |j'                  «        t        d|› d
�d¬«       y# t"        $ r#}t        d|d   dd › d|› �d¬«       Y d}~Œåd}~ww xY w)u   å¢žé‡�: ä»…çˆ¬ç¬¬ä¸€é¡µu   [å¢žé‡�] å�ˆè‚¥å¸‚å¢žé‡�çˆ¬å�–Tr   u   [ERROR] JSç ´è§£å¤±è´¥Nr   r   u   [ERROR] é¡µé�¢èŽ·å�–å¤±è´¥u	     æœ€æ–° rt   r   rN   rK   rM   ru   rO   r1   z    [ERROR] é   rv   u     æ–°å¢žå…¥åº“: )r    r*   rx   rH   r\   r~   ry   rz   r{   r|   r5   r8   rl   rp   r   r€   r�   r#   r…   r†   )r‡   rI   rT   rˆ   r‰   Ú	new_countr�   r�   r‘   r“   Ú_r•   r(   s                r)   Úincrementalrœ     s¦  € ä	Ð*°4Õ8Üœ	Ó"€GÙÜÐ&¨dÕ3Øäœ) W¨XÑ%6¸ÀÑ8LÓM€DÙÜÐ*°$Õ7Øä˜TÓ"€EÜ	ˆI”c˜%“j�\ Ð
&¨dÕ3ä�?‰?œ7Ó#€DØ
�+‰+‹-€CØ€IØò IˆØ˜‘;ˆÜ$ X×%5Ñ%5´hÀÓ%CØ%,¨XÑ%6¸ÀÑ8LóNˆàˆÙÜ4°[ÓA‰OˆAˆ|Ü˜lÓ+Ò<¨t°G©}ˆð		IØ�K‰Kð,à�g‘ ¬)°W¸lÈDÐQWÉLÐYôð
 �|‰|˜aÒØ˜Q‘�	øðIð$ 	‡K�K„MØ‡J�J„LÜ	Ð˜Y˜K tÐ
,°DÖ9øô	 ò 	IÜ�L  g¡¨s°Ð!3Ð 4°C¸°sÐ;À4×HÒHûð	Iús   Ã:6E$Å$	FÅ-FÆFÚ__main__r1   Úfullrœ   )%ÚosÚsysr=   r   r   r‚   ry   r   r   Úurllib.parser   r6   r8   rx   r}   r€   Úgetenvr{   ÚnowÚstrftimerw   r   ÚstrÚdictr*   rH   Úlistr\   Útuplerl   rp   r—   rœ   Ú__name__r~   ÚargvÚmode© r]   r)   ú<module>r­      s1  ðã 	ð÷
 0× /× /ß (Ý  Û à'€Ø,€	Ø&€
Ø0€	Ø
ˆ"�)‰)�KÐ!2Ó
3€Øˆx�|‰|‹~¡	¨uÔ 5Ñ5×?Ñ?À
ÓK€ð '€
ð˜ð  ó ð6.˜Sð .¨#ð .¸#ð .À#ÈÁ*ó .ð`˜3ð  4ó ð<  ð  ¨ó  ðF˜cð  có òdCòN':ðT ˆzÒÙ˜cŸh™h›-¨!Ò+ˆ3�8‰8�AŠ;°€DØˆ}ÒÙ�á�ð r]   