Ë
    Ð¬zjÊ+  ã                   óÈ  — 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Zd dlZd dl	Z
d dlmZ d dlmZ e j                  j                  e j                  j!                  e«      «      Ze j                  j'                  ed«      ZdZdZdZdZd	Zd
ZdZdZd dlZd dlZ ej@                  «       Z!ddiZ"dd„Z#d„ Z$d„ Z%d„ Z&d„ Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,e-dk(  r e,«        yy)é    N)Údatetime)Úurljoinzquality_results.dbzroot@1.94.217.116z/root/quality_results.dbú/root/search.dbõ$   æ–°ç–†ç”Ÿæ€�çŽ¯å¢ƒä¿�æŠ¤äº§ä¸šå��ä¼šzwww.xjhbcy.cnzhttp://www.xjhbcy.cnz&http://www.xjhbcy.cn/articles/list/121iÂ  z
User-Agentz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36c                 ó  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  ||t
        ¬«      }|j                  «       }|j                  dd¬«      }|S # t        $ r
}Y d }~y d }~ww xY w)N)Úheaders)ÚtimeoutÚcontextzutf-8Úreplace)Úerrors)	ÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚCTXÚreadÚdecodeÚ	Exception)Úurlr	   ÚreqÚrespÚrawÚtextÚes          ú!/root/gov_crawler/crawl_xjhbcy.pyÚhttp_getr   (   sp   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°7ÄCÐ%ÓHˆØ�i‰i‹kˆØ�z‰z˜'¨)ˆzÓ4ˆØˆøÜò Üûðús   §A
A2 Á2	BÂ Bc                 ód  — g }t        «       }ddlm}  || d«      }|j                  d«      D �]  }d}|j	                  dd«      }t        j                  d|«      }|r|j                  d«      }|s%|j                  d	«      }	|	r|	j	                  d
d«      }|sŒkt        t        |«      }||v rŒ€|j                  |«       d}
|j                  d«      }|r.t        j                  ddt        |«      «      j                  «       }
d}|j                  d«      }|j                  d«      }|rm|rk|j                  d¬«      }|j                  d¬«      j!                  dd«      j!                  dd«      }d|vrt#        |«      dk(  r|dd dz   |dd z   }|› d|› �}|
s�Œk|j%                  |
||dœ«       �Œ‚ |S )u]   ä»Ž xjhbcy åˆ—è¡¨é¡µæ��å�–æ‰€æœ‰æ�¡ç›® (BeautifulSoup å®¹é”™, å‹¿ç”¨è„†å¼±æ­£åˆ™äº¤æ›¿æ¼�é¡¹)r   )ÚBeautifulSoupzhtml.parserzdiv.sign-item.cardÚ Úonclickz['\"](/articles/show/\d+)['\"]é   za[href*='/articles/show/']Úhrefzh5.list-titleú<[^>]+>zdiv.dayzdiv.year-monthT)Ústripu   å¹´ú-u   æœˆé   Né   )Útitler   Údate)ÚsetÚbs4r   ÚselectÚgetÚreÚsearchÚgroupÚ
select_oner   ÚBASE_URLÚaddÚsubÚstrr%   Úget_textr   ÚlenÚappend)ÚhtmlÚitemsÚ	seen_urlsr   ÚsoupÚcardr#   ÚocÚmÚar)   Úh5r*   ÚdayÚymÚdÚys                    r   Úparse_list_pagerG   3   s®  € à€EÜ“€IÝ!Ù˜˜}Ó-€DØ—‘Ð0Ó1ó "BˆàˆØ�X‰X�i Ó$ˆÜ�I‰IÐ7¸Ó<ˆÙØ—7‘7˜1“:ˆDÙØ—‘Ð <Ó=ˆAÙØ—u‘u˜V RÓ(�ÙØÜ”x Ó&ˆØ�9ÑØØ�‰�dÔàˆØ�_‰_˜_Ó-ˆÙÜ—F‘F˜: r¬3¨r«7Ó3×9Ñ9Ó;ˆEàˆØ�o‰o˜iÓ(ˆØ�_‰_Ð-Ó.ˆÙ‘2Ø—‘ 4�Ó(ˆAØ—‘ $�Ó'×/Ñ/°°sÓ;×CÑCÀEÈ2ÓNˆAØ˜!‰|¤ A£¨!¢Ø�b�q�E˜C‘K ! A B %Ñ'�Ø�S˜˜!˜�:ˆDÙÙØ�‰˜u¨T¸4Ñ@ÖAðE"BðF €Ló    c                 ó(  — t        | «      }|syd}t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }d}t        j                  d|t        j                  «      }|rú|j                  d«      j                  «       }t        j                  dd|t        j                  t        j                  z  ¬«      }t        j                  d	d|t        j                  t        j                  z  ¬«      }t        j                  d
d|«      }t        j                  dd|t        j                  ¬«      }t        j                  dd|«      }t        |«      dkD  r|dd dz   }||dœS )u%   èŽ·å�–è¯¦æƒ…é¡µï¼šæ ‡é¢˜ã€�æ­£æ–‡HTMLNr    z<h3[^>]*>(.*?)</h3>r$   r"   z:<div class="text-center mb-3">(.*?)<div class="footer_contz<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z\s+style="[^"]*"z9^<h3>.*?</h3>\s*<p class="text-muted">.*?</p>\s*</div>\s*z<p>\s*<br\s*/?>\s*</p>i'  z...)r)   Úcontent)	r   r/   r0   ÚDOTALLr5   r1   r%   ÚIr8   )r   r:   r)   ÚtmrK   Úcms         r   Ú
get_detailrP   ^   sM  € ä�C‹=€DÙØð €EÜ	�‰Ð)¨4´·±Ó	;€BÙ	Ü—‘�z 2 r§x¡x°£{Ó3×9Ñ9Ó;ˆð €GÜ	�‰ØEØŒb�i‰ió
€Bñ 
Ø—(‘(˜1“+×#Ñ#Ó%ˆä—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆä—&‘&Ð,¨b°'Ó:ˆä—&‘&ÐUÐWYÐ[bÔjl×jsÑjsÔtˆô —&‘&Ð2°B¸Ó@ˆÜˆw‹<˜%ÒØ˜f˜u�o¨Ñ-ˆGð Øñð rH   c                 ó8  — | syt        j                  dd| «      }t        j                  dd|«      }t        j                  dd|«      }t        j                  |«      }t        j                  dd|«      }t        j                  d	d
|«      }|j	                  «       S )u+   ä»ŽHTMLæ��å�–çº¯æ–‡æœ¬ï¼Œä¿�ç•™æ®µè�½ç»“æž„r    z</(p|div|li|h[1-6]|tr|td|th)>z	</\1>\n\nz	<br\s*/?>ú
r$   z[ \t]+ú z\n{3,}z

)r/   r5   Úhtml_modÚunescaper%   )Úhtml_contentr   s     r   Úextract_plain_textrW   „   s   € áØÜ�6‰6Ð2°LÀ,ÓO€DÜ�6‰6�,  dÓ+€DÜ�6‰6�*˜b $Ó'€DÜ×Ñ˜TÓ"€DÜ�6‰6�)˜S $Ó'€DÜ�6‰6�)˜V TÓ*€DØ�:‰:‹<ÐrH   c                  ó˜   — t        j                  t        «      } | j                  d«       | j	                  «        | j                  «        y )Na¼  
        CREATE TABLE IF NOT EXISTS crawl_results (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            site_id INTEGER DEFAULT 0,
            title TEXT,
            url TEXT UNIQUE,
            content TEXT,
            publish_date TEXT,
            summary TEXT,
            domain TEXT,
            category TEXT DEFAULT '',
            content_hash TEXT,
            crawl_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
        )
    )Úsqlite3ÚconnectÚ
QUALITY_DBÚexecuteÚcommitÚclose)Úconns    r   Úensure_tabler`   ‘   s5   € Ü�?‰?œ:Ó&€DØ‡L�Lð ô 	ð 	‡K�K„MØ‡J�J…LrH   c                 ó¢   — t        j                  t        «      }|j                  d| f«      }|j	                  «       }|j                  «        |d uS )Nz(SELECT id FROM crawl_results WHERE url=?)rY   rZ   r[   r\   Úfetchoner^   )r   r_   ÚcurÚrs       r   Úis_url_crawledre   ¥   sA   € Ü�?‰?œ:Ó&€DØ
�,‰,ÐAÀCÀ6Ó
J€CØ�‰‹€AØ‡J�J„LØ�Dˆ=ÐrH   c                 óú  — | d   }| j                  dd«      }| j                  dt        |«      d d «      }| d   }| d   }t        ||«      }t        j                  |xs dj                  «       «      j                  «       }t        j                  t        «      }	 |j                  d|||||t        ||f«       |j                  «        |j                  d	kD  |j                  «        S # |j                  «        w xY w)
Nr   rK   r    Úsummaryé,  r*   r)   z‰INSERT OR IGNORE INTO crawl_results (title, url, content, publish_date, summary, domain, category, content_hash) VALUES (?,?,?,?,?,?,?,?)r   )r.   rW   Ú
categorizeÚhashlibÚmd5ÚencodeÚ	hexdigestrY   rZ   r[   r\   ÚDOMAINr]   Útotal_changesr^   )	Úitemr   rK   rg   r*   r)   ÚcatÚcontent_hashr_   s	            r   Ú
store_itemrs   ¬   sâ   € Ø
ˆu‰+€CØ�h‰h�y "Ó%€GØ�h‰h�yÔ"4°WÓ"=¸d¸sÐ"CÓD€GØ�‰<€DØ�‰M€Eô �U˜GÓ
$€CÜ—;‘; ¢¨2×5Ñ5Ó7Ó8×BÑBÓD€Lä�?‰?œ:Ó&€Dð
Ø�‰ð'ð �C˜ $¨´¸¸lÐKô		
ð 	�‰ŒØ×!Ñ! AÑ%à�
‰
�øˆ�
‰
�ús   Â<C( Ã(C:c                 óò   ‡— | dz   |z   j                  «       Šg }dg d¢fdg d¢fdg d¢fdg d	¢fd
g d¢fdg d¢ffD ]+  \  }}t        ˆfd„|D «       «      sŒ|j                  |«       Œ- dj                  |«      S )NrS   u   çŽ¯è¯„é˜¶æ®µ)u   çŽ¯è¯„u   çŽ¯å¢ƒå½±å“�è¯„ä»·u   çŽ¯å¢ƒå½±å“�æŠ¥å‘Šu   ç¬¬ä¸€æ¬¡å…¬ç¤ºu   å¾�æ±‚æ„�è§�u   å®¡æ‰¹æŠ¥æ‰¹)u   å®¡æ‰¹u   æ‰¹å¤�u	   æ‹Ÿæ‰¹å¤�u   æŠ¥æ‰¹u	   æ‹ŸæŠ¥æ‰¹u   è®¸å�¯u   æ‰¹å‡†u   ç«£å·¥éªŒæ”¶)u   éªŒæ”¶u   ç«£å·¥u	   è¯•è¿�è¡Œu	   è¯•ç”Ÿäº§u   æ‹›æ ‡é‡‡è´­)u   æ‹›æ ‡u   æŠ•æ ‡u   é‡‡è´­u   è¯¢ä»·u   ä¸­æ¨™u   è§„åˆ’è®¾è®¡)u   è§„åˆ’u   è®¾è®¡u   å�¯ç ”u   å�¯è¡Œæ€§ç ”ç©¶u   é€‰å�€õ   å®‰å…¨è¯„ä»·)ru   u   å®‰è¯„u   å®‰å…¨é¢„è¯„ä»·u   å®‰å…¨éªŒæ”¶c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­w)N© )Ú.0ÚkwÚts     €r   ú	<genexpr>zcategorize.<locals>.<genexpr>Ï   s   øè ø€ Ò%˜2ˆr�QŒwÑ%ùs   ƒú,)ÚlowerÚanyr9   Újoin)r)   r   ÚtagsÚstageÚkwsrz   s        @r   ri   ri   Ä   s–   ø€ Ø	�‰�tÑ	×"Ñ"Ó$€AØ€Dà	ÒrÐsØ	ÒeÐfØ	ÒGÐHØ	ÒKÐLØ	ÒTÐUØ	ÒVÐWðò 	‰
ˆˆsô Ó% Ô%Õ%Ø�K‰K˜Õð	ð �8‰8�D‹>ÐrH   c                  óB  — t        d«       t        j                  t        «      } | j	                  dt
        f«      j                  «       }| j                  «        |st        d«       yt        j                  d«      }|j	                  d«       |j	                  d«       d}d	}|D ]J  }|\  }}}}	}
	 |j	                  d
|||xs ddd |	xs d|
xs ddd |df«       |j                  d	kD  r|dz  }ŒL |d	kD  r3|j                  «        |j	                  d|f«       |j                  «        |j	                  d|f«      j                  «       d	   }|j                  «        t        d|› dt        |«      › d|› d�«       y# t        $ r}t        d|› �«       Y d}~Œôd}~ww xY w)u@   å°†æœ¬åœ°æ•°æ�®ç›´æŽ¥å†™å…¥ search.dbï¼ˆæœ�åŠ¡å™¨æœ¬åœ°æ¨¡å¼�ï¼‰u   
ðŸ“¤ å�Œæ­¥åˆ° search.db...z_SELECT title, url, content, publish_date, summary FROM crawl_results WHERE domain=? ORDER BY idu     æœ¬åœ°æ²¡æœ‰æ•°æ�®Nr   zPRAGMA journal_mode=WALzPRAGMA busy_timeout=300000r   r   zwINSERT OR IGNORE INTO gov_raw (title, page_url, content, publish_date, summary, site_name, tags) VALUES (?,?,?,?,?,?,?)r    i@  rh   r"   z	  Error: z±INSERT INTO gov_search(rowid,title,site_name,summary) SELECT r.id,r.title,r.site_name,r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z  OK ú/u    æ�¡å�Œæ­¥åˆ° search.db (DBå…±u   æ�¡))ÚprintrY   rZ   r[   r\   rn   Úfetchallr^   ro   r   r]   rb   r8   )r_   ÚrowsÚdstÚ	site_nameÚ	new_countrd   r)   r   rK   Úpub_daterg   r   Útotals                r   Úsync_to_serverr�   Ô   s²  € ä	Ð
)Ô*ä�?‰?œ:Ó&€DØ�<‰<ØiÜ	ˆ	ó÷ �hƒjð 	ð 	‡J�J„LáÜÐ$Ô%Øä
�/‰/Ð+Ó
,€CØ‡K�KÐ)Ô*Ø‡K�KÐ,Ô-à6€IØ€IØò #ˆØ12Ñ.ˆˆs�G˜X wð	#Ø�K‰Kð)ð ˜˜gšm¨¨U¨dÐ3°X²^ÀØ’-˜R  #Ð&¨	°2ð7ô	ð × Ñ  1Ò$Ø˜Q‘�	øð#ð �1‚}Ø�
‰
Œà�‰ðQð ˆLô		ð
 	�
‰
Œà�K‰KØ8¸9¸,óHßHPÉË
ÐSTñV€Eà‡I�I„Kä	ˆE�)�˜Aœc $›i˜[Ð(FÀuÀgÈTÐ
RÕSøô# ò 	#Ü�I˜a˜S�/×"Ñ"ûð	#ús   Â1?E=Å=	FÆFÆFc                  ól  — t         j                  dd  } d| v }d| v }|rt        «        y |r	t        }d}nK| D �cg c]  }|j	                  d«      sŒ|‘Œ }}|r t        |d   j                  d«      d   «      nd}d|› d	�}t        d
t        › d|› d�«       t        dt        › d|› d�«       t        «        t        «        d}d}t        d|dz   «      D �]$  }	|	dk(  rt        }
nt        › d|	› �}
t        |
«      }|st        d|	d›d|› d�«       Œ<t        |«      }|st        d|	d›d|› d�«       Œ]d}d}|D ]|  }t        |d   «      r|dz  }|dz  }Œt        |d   «      }|r<|d   xs |d   |d<   |d   xs d|d<   t!        |j#                  dd«      «      d d |d<   t%        |«       |dz  }|dz  }Œ~ t        d|	d›d|› dt'        |«      › d|› d|› d�d z   d!¬"«       t)        j*                  |rd#nd$«       �Œ' t        «        t        d%|› d&|› �«       |dkD  rt        «        y t        d'«       y c c}w )(Nr"   z--fullz--syncu   å…¨é‡�z--pages=r   ú=u	   å¢žé‡�ï¼ˆu   é¡µï¼‰u   ðŸ”� u   çˆ¬è™« â€” u   æ¨¡å¼�u     æ€»é¡µæ•°: u   , æœ¬æ¬¡çˆ¬å�–: u   é¡µz?page=z  [pÚ3dr„   u   ] âœ— èŽ·å�–åˆ—è¡¨é¡µå¤±è´¥u   ] âœ— æœªè§£æž�åˆ°æ�¡ç›®r   r)   rK   r    rh   rg   u   ] âœ“ u   æ�¡ (æ–°å¢žu    è·³è¿‡ú)z                    ú)Úendg333333Ó?g      à?u   
ðŸ“Š å®Œæˆ�ï¼�æ–°å¢ž: u    | è·³è¿‡: u     æ— æ–°æ•°æ�®ï¼Œè·³è¿‡å�Œæ­¥)ÚsysÚargvr�   ÚTOTAL_PAGESÚ
startswithÚintÚsplitr…   Ú	SITE_NAMEr`   ÚrangeÚ	LIST_BASEr   rG   re   rP   rW   r.   rs   r8   ÚtimeÚsleep)ÚargsÚ	full_modeÚ	sync_onlyÚpages_to_crawlÚmoderA   Úpages_matchÚ	new_totalÚ
skip_totalÚpager   r:   r;   Úpage_newÚ	page_skiprp   Údetails                    r   Úmainr«   	  sš  € Ü�8‰8�A�Bˆ<€DØ˜DÐ €IØ˜DÐ €IáÜÔØáÜ$ˆØ‰à"&ÖC˜Q¨!¯,©,°zÕ*B’qÐCˆÐCÙ>Iœ˜[¨™^×1Ñ1°#Ó6°qÑ9Ô:ÈqˆØ˜>Ð*¨&Ð1ˆä	ˆE”)�˜K¨ v¨VÐ
4Ô5Ü	ˆMœ+˜Ð&6°~Ð6FÀcÐ
JÔKÜ	„Gä„Nà€IØ€JÜ�a˜¨!Ñ+Ó,ó %.ˆØ�1Š9Ü‰Cä�K˜v d VÐ,ˆCä˜‹}ˆÙÜ�D˜˜b˜	  >Ð"2Ð2MÐNÔOØä Ó%ˆÙÜ�D˜˜b˜	  >Ð"2Ð2JÐKÔLØàˆØˆ	Øò 	ˆDÜ˜d 5™kÔ*Ø˜Q‘�	Ø˜a‘�
Øä  U¡Ó,ˆFÙØ & w¡Ò @°4¸±=��W‘Ø"(¨Ñ"3Ò"9°r��Y‘Ü"4°V·Z±ZÀ	È2Ó5NÓ"OÐPTÐQTÐ"U��Y‘ä�tÔØ˜‰MˆHØ˜‰N‰Ið	ô  	��T˜"�I˜Q˜~Ð.¨f´S¸³Z°LÀÈHÈ:ÐU\Ð]fÐ\gÐghÐiÐltÑtÐz~Õô 	�
‰
™)‘3¨Ö-ðK%.ôN 
„GÜ	Ð$ Y K¨{¸:¸,Ð
GÔHà�1‚}ÜÕäÐ-Õ.ùòs Ds   ¸H1ÁH1Ú__main__)é   ).Úosr”   r/   ÚjsonrY   rj   r�   Úbase64Ú
subprocessr:   rT   r   Úurllib.parser   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRr   r[   Ú
SERVER_SSHÚ	SERVER_DBÚSERVER_SEARCH_DBrš   rn   r3   rœ   r–   ÚsslÚurllib.requestr   Ú_create_unverified_contextr   r   r   rG   rP   rW   r`   re   rs   ri   r�   r«   Ú__name__rw   rH   r   ú<module>r¿      sô   ðã 	ð
÷ W× V× V× V× VÝ Ý  ð �7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€Ø�W‰W�\‰\˜(Ð$8Ó9€
Ø €
Ø&€	Ø$Ð à2€	Ø	€Ø!€Ø4€	Ø€÷ Ø$€c×$Ñ$Ó&€àð 3ð€ó
ò)òV$òL
òò(òò0ò 2TòjF/ðP ˆzÒÙ…Fð rH   