Ë
    ¸¬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 d dlm	Z	m
Z
  e j                  dd«      ZdZdZdZd	Zd
Zd
Zd„ Zddefd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)Údatetime)ÚThreadPoolExecutorÚas_completedÚ	SEARCH_DBz/root/search.dbu%   è¾¾å·žå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-å…¬ç¤ºå…¬å‘Šz
2023-06-18zhttps://sthjj.dazhou.gov.cné
   é   c                 óh   — t        dt        j                  «       j                  d«      › d| › �«       y )Nú[z%H:%M:%Sz] )Úprintr   ÚnowÚstrftime)Úmsgs    ú!/root/gov_crawler/crawl_dazhou.pyÚlogr      s)   € Ü	ˆAŒh�l‰l‹n×%Ñ% jÓ1Ð2°"°S°EÐ
:Õ;ó    é   c                 óÈ  — dt         dz   dddœ}t        |«      D ]†  }	 |r|j                  «       nd }t        j                  j                  | ||¬«      }t        j                  j                  ||¬«      5 }|j                  «       j                  dd	¬
«      cd d d «       c S  y # 1 sw Y   nxY wŒ—# t        $ r'}	||dz
  k  rt        j                  d«       Y d }	~	ŒÂd }	~	ww xY w)Nz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z/news-list-ggtz.htmlÚXMLHttpRequestz0application/x-www-form-urlencoded; charset=UTF-8)z
User-AgentÚRefererzX-Requested-WithzContent-Type)ÚdataÚheaders©Útimeoutzutf-8Úreplace)Úerrorsé   é   )ÚBASE_URLÚrangeÚencodeÚurllibÚrequestÚRequestÚurlopenÚreadÚdecodeÚ	ExceptionÚtimeÚsleep)
ÚurlÚ	post_bodyÚretriesr   r   Úattemptr   ÚreqÚrespÚes
             r   Ú	fetch_urlr1      sæ   € àTÜÐ4Ñ4Ø,ØJñ	€Gô ˜“>ò ˆð	Ù)2�9×#Ñ#Ô%¸ˆDÜ—.‘.×(Ñ(¨°4ÀÐ(ÓIˆCÜ—‘×'Ñ'¨°WÐ'Ó=ð EÀØ—y‘y“{×)Ñ)¨'¸)Ð)ÓD÷Eó Eð	ð ÷Eð Eúð Eøäò 	Ø˜ 1™Ò$Ü—
‘
˜1”ÿøð	ús0   žAB1Á5!B$Â	B1Â$B-	Â)B1Â1	C!Â:CÃC!c                 óÌ   — t         › d| › d�}d}t        ||«      }|sg dfS 	 t        j                  |«      }|j	                  dg «      |j	                  dd«      fS #  g dfcY S xY w)u&   èŽ·å�–åˆ—è¡¨é¡µ, è¿”å›ž (items, total)z/api-ajax_list-ú.htmlz¹ajax_type%5B%5D=13_news&ajax_type%5B%5D=20&ajax_type%5B%5D=13&ajax_type%5B%5D=news&ajax_type%5B%5D=Y-m-d&ajax_type%5B%5D=40&ajax_type%5B%5D=20&ajax_type%5B%5D=0&ajax_type%5B%5D=&is_ds=1r   r   Útotal)r   r1   ÚjsonÚloadsÚget)Úpager*   Úbodyr/   Újs        r   Ú
fetch_listr;   )   sx   € äˆJ�o d V¨5Ð
1€Cð G€DÜ�S˜$Ó€DÙØ�1ˆuˆðÜ�J‰J�tÓˆØ�u‰u�V˜RÓ  !§%¡%¨°Ó"3Ð3Ð3øðØ�1ˆuŠús   ¢8A ÁA#c                 ó\  — t         › d| › d�}t        |t        ¬«      }|syt        j                  d|t        j
                  «      }|r|j                  d«      j                  «       S t        j                  d|t        j
                  «      }|r|j                  d«      j                  «       S y)u%   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡ (div.xxq_essay)z/news-show-r3   r   Ú z+<div class="xxq_essay">(.*?)</div>\s*</div>r   z&class="xxq_essay">(.*?)</div>\s*</div>)r   r1   ÚDETAIL_TIMEOUTÚreÚsearchÚDOTALLÚgroupÚstrip)Únews_idr*   ÚhtmlÚms       r   Úfetch_detailrG   6   s‹   € äˆJ�k ' ¨%Ð
0€CÜ�S¤.Ô1€DÙØÜ
�	‰	Ð@À$ÌÏ	É	ÓR€AÙØ�w‰w�q‹z×ÑÓ!Ð!Ü
�	‰	Ð;¸TÄ2Ç9Á9ÓM€AÙØ�w‰w�q‹z×ÑÓ!Ð!Ør   c                  ó  — dd l } | j                  t        «      }|j                  d«       |j	                  «       }t        d«      \  }}|st        d«       y |dz  |dz  rdndz   }t        d|› d|› d�«       g }t        dt        |dz   d	«      «      D ]—  }t        |«      \  }}|s n…|j                  |«       |d
z  dk(  rt        d|› d|› dt        |«      › d�«       |d   j                  dd«      d d
 }	|	r|	t        k  rt        d|› d|	› d�«        nt        j                  d«       Œ™ t        dt        |«      › d�«       g }
d}d}|D ]ˆ  }|j                  dd«      j                  «       d d
 }|r|t        k  r|dz  }Œ7|j                  dd«      }|j                  d|f«       |j!                  «       d   dkD  r|dz  }Œx|
j#                  |«       ŒŠ t        dt        |
«      › d|› d|› �«       |
st        d«       |j%                  «        y d„ }t        dt        |
«      › d �«       g }t'        t(        ¬!«      5 }|
D �ci c]  }|j+                  ||«      |“Œ }}d}t-        |«      D ]J  }|dz  }|j#                  |j/                  «       «       |d"z  dk(  sŒ0t        d#|› dt        |
«      › d$�«       ŒL 	 d d d «       |D �cg c]  }|sŒt0        |d   |d   |d%   |d	   f‘Œ }}t        |«      t        |«      z
  }t        d&t        |«      › d'|› d(�«       d)}d}t        dt        |«      |«      D ]:  }||||z    }|j3                  d*|«       |j5                  «        |t        |«      z  }Œ< t        d+|› d�«       	 |j                  d,«       |j5                  «        t        d-«       |j%                  «        t        d/|› d0�«       y c c}w # 1 sw Y   �ŒxY wc c}w # t6        $ r}t        d.|› �«       Y d }~ŒSd }~ww xY w)1Nr   zPRAGMA busy_timeout=10000r   u   ERROR: æ— æ³•èŽ·å�–åˆ—è¡¨r   u   å…± u    æ�¡, u    é¡µr   r   u     åˆ—è¡¨ç¬¬ú/u   é¡µ (u   æ�¡)éÿÿÿÿÚ	inputtimer=   u     ç¬¬u   é¡µå·²è¾¾æˆªæ­¢æ—¥æœŸu	   ï¼Œå�œæ­¢g333333Ó?u
   åˆ—è¡¨å…± u    æ�¡r*   z/SELECT COUNT(*) FROM gov_raw WHERE page_url = ?u   æ–°å¢ž: u   , å·²å­˜åœ¨: u   , æ—¥æœŸè¿‡æ»¤: u   æ— æ–°å¢žæ�¡ç›®c                 ó–   — t        | d   «      }|r9| j                  dd«      || j                  dd«      | j                  dd«      d d fS y )NÚidÚtitler=   r*   rK   r   )rG   r7   )ÚitemÚcontents     r   Úprocess_itemzmain.<locals>.process_item~   sQ   € Ü˜t D™zÓ*ˆÙØ—H‘H˜W RÓ(¨'°4·8±8¸EÀ"Ó3EÀtÇxÁxÐP[Ð\^ÓG_Ð`cÐacÐGdÐeÐeØr   u   å¹¶å�‘èŽ·å�–u   æ�¡è¯¦æƒ…...)Úmax_workerséd   z  u    å®Œæˆ�r   u   å…¥åº“ u    æ�¡ (ç©ºæ­£æ–‡ u    æ�¡)...é2   zbINSERT OR IGNORE INTO gov_raw(site_name, title, content, page_url, publish_date) VALUES(?,?,?,?,?)u   å…¥åº“å®Œæˆ�: z4INSERT INTO gov_search(gov_search) VALUES('rebuild')u   FTSé‡�å»ºå®Œæˆ�u   FTSé‡�å»ºé”™è¯¯: u   [DONE] è¾¾å·žçˆ¬å�–å®Œæˆ�: +u    æ–°å¢ž)Úsqlite3Úconnectr   ÚexecuteÚcursorr;   r   r   ÚminÚextendÚlenr7   ÚCUTOFF_DATEr(   r)   rC   ÚfetchoneÚappendÚcloser   ÚMAX_WORKERSÚsubmitr   ÚresultÚ	SITE_NAMEÚexecutemanyÚcommitr'   )rU   ÚconnÚcÚitemsÚtotal_itemsÚtotal_pagesÚ	all_itemsr8   Ú_ÚoldestÚto_fetchÚskipped_existÚskipped_daterO   rK   r*   rQ   ÚresultsÚexecutorÚfuturesÚdoneÚfÚrÚinsert_dataÚempty_countÚ
BATCH_SIZEÚinsertedÚiÚbatchr0   s                                 r   Úmainr}   D   s9  € Ûà�?‰?œ9Ó%€DØ‡L�LÐ,Ô-Ø�‰‹€Aô $ A›Ñ€Eˆ;ÙÜÐ'Ô(Øà "Ñ$¨k¸BÒ.>©ÀAÑF€KÜˆ$ˆ{ˆm˜6 + ¨dÐ3Ô4ð €IÜ�aœ˜[¨1™_¨aÓ0Ó1ò ˆÜ˜dÓ#‰ˆˆqÙÙØ×Ñ˜ÔØ�"‰9˜Š>Ü�+˜d˜V 1 [ M°´s¸9³~Ð6FÀdÐKÔLà�r‘—‘˜{¨BÓ/°°Ð4ˆÙ�fœ{Ò*Ü�%˜�vÐ2°6°(¸)ÐDÔEÙÜ�
‰
�3�ðô ˆ*”S˜“^Ð$ DÐ)Ô*ð €HØ€MØ€LØò 
ˆØ—H‘H˜[¨"Ó-×3Ñ3Ó5°c°rÐ:ˆ	Ù˜¤[Ò0Ø˜AÑˆLØØ�h‰h�u˜bÓ!ˆØ	�	‰	ÐCÀcÀVÔLØ�:‰:‹<˜‰?˜QÒØ˜QÑˆMØØ�‰˜Õð
ô ˆ(”3�x“=�/ ¨}¨oÐ=MÈlÈ^Ð\Ô]áÜÐÔØ�
‰
ŒØòô ˆ,”s˜8“}�o \Ð2Ô3Ø€GÜ	¬Ô	4ð 8¸ØIQÖRÀ�8—?‘? <°Ó6¸Ñ<ÐRˆÐRØˆÜ˜gÓ&ò 	8ˆAØ�A‰IˆDØ�N‰N˜1Ÿ8™8›:Ô&Ø�c‰z˜Q‹Ü�b˜˜˜a¤ H£˜¨gÐ6Õ7ñ		8÷8ð AHÖM¸1Ê1”I˜q ™t Q q¡T¨1¨Q©4°°1±Ò6ÐM€KÐMÜ�g“,¤ [Ó!1Ñ1€Käˆ'”#�kÓ"Ð#Ð#3°K°=ÀÐIÔJØ€JØ€HÜ�1”c˜+Ó&¨
Ó3ò ˆØ˜A˜a 
™lÐ+ˆØ	�‰ØpØô	
ð 	�‰ŒØ”C˜“JÑ‰ðô ˆ.˜˜
 $Ð'Ô(ð%Ø	�	‰	ÐHÔIØ�‰ŒÜÐÔð 	‡J�J„LÜÐ
& x j°Ð8Õ9ùòG S÷8ñ 8üò Nøô, ò %ÜÐ ˜sÐ#×$Ñ$ûð%úsH   É OÉOÉ>OÊOËO"ËO"Î,O' ÏOÏOÏ'	PÏ0PÐPÚ__main__)ÚosÚsysr5   r?   Úurllib.requestr!   r(   r   Úconcurrent.futuresr   r   Úgetenvr   rc   r\   r   r`   ÚLIST_TIMEOUTr>   r   r1   r;   rG   r}   Ú__name__© r   r   ú<module>r‡      s‡   ðã 	ð÷
 /× .× .Ý ß ?àˆB�I‰I�kÐ#4Ó5€	Ø3€	Ø€Ø(€Ø€Ø€Ø€ò<ð "¨1°ló ò$òòf:ðP ˆzÒÙ…Fð r   