Ë
    ñµ£j‘!  ã                   óœ  — 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mZ ddl	m
Z
mZ ddlZ eej                  «      dkD  r2ej                  d   j                  «       r eej                  d   «      ndZe� ed ee«      z   «       dZdZd	d
dœZ ej.                  dd«      ZdZd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zd„ Z d„ Z!e"dk(  r e!«        yy)u’   
çˆ¬è™«ï¼šè´µé˜³å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ - é¡¹ç›®çŽ¯è¯„å®¡æ‰¹å…¬ç¤º
ç«™ç‚¹ï¼šhttps://sthjj.gz.gov.cn/hjgl/jsxm/hpspgg/
CMSï¼šTRS CMS æ ‡å‡†åˆ†é¡µæ¨¡å¼�
é    N)ÚBeautifulSoup)ÚurljoinÚurlparseé   z[AutoPg] max_pages=z)https://sthjj.gz.gov.cn/hjgl/jsxm/hpspgg/u   è´µé˜³å¸‚-é¡¹ç›®çŽ¯è¯„å®¡æ‰¹z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36zhttps://sthjj.gz.gov.cn/)z
User-AgentÚRefererÚ	SEARCH_DBz/root/search.dbé   c                  ó¢   — t        j                  t        d¬«      } | j                  d«       | j                  d«       | j                  d«       | S )Né   ©ÚtimeoutzPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALzPRAGMA busy_timeout=30000)Úsqlite3ÚconnectÚDB_PATHÚexecute©Úconns    úcrawl_guiyang.pyÚ_get_dbr   "   s>   € Ü�?‰?œ7¨BÔ/€DØ‡L�LÐ*Ô+Ø‡L�LÐ,Ô-Ø‡L�LÐ,Ô-Ø€Kó    c                 óŠ   — | j                  d«       | j                  d«       | j                  d«       | j                  «        y )NaS  
        CREATE TABLE IF NOT EXISTS gov_raw (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            title TEXT NOT NULL,
            content TEXT,
            source_url TEXT NOT NULL UNIQUE,
            publish_date TEXT,
            site_name TEXT,
            created_at TEXT DEFAULT (datetime('now','localtime'))
        )
    zACREATE INDEX IF NOT EXISTS idx_gov_raw_site ON gov_raw(site_name)zDCREATE INDEX IF NOT EXISTS idx_gov_raw_date ON gov_raw(publish_date))r   Úcommitr   s    r   Úensure_tabler   )   s8   € Ø‡L�Lð 
ô 
	ð 	‡L�LÐTÔUØ‡L�LÐWÔXà‡K�K…Mr   c                 óL   — | j                  d|f«      }|j                  «       d uS )Nz(SELECT 1 FROM gov_raw WHERE source_url=?)r   Úfetchone)r   Ú
source_urlÚcurs      r   Ú
row_existsr   :   s&   € Ø
�,‰,ÐAÀJÀ=Ó
Q€CØ�<‰<‹> Ð%Ð%r   c                 óZ   — | j                  d||||t        f«       | j                  dkD  ryy)NzeINSERT OR IGNORE INTO gov_raw(title, content, source_url, publish_date, site_name) VALUES (?,?,?,?,?)r   TF)r   Ú	SITE_NAMEÚtotal_changes)r   ÚtitleÚcontentr   Úpublish_dates        r   Ú
insert_rowr%   >   s5   € Ø‡L�LØoØ	�˜ \´9Ð=ôð ×Ñ˜AÒØØr   c                 ó„  — | j                  d«      }|r�|j                  d«      D ]p  }|j                  dd«      }|rJ|j                  d«      s9|j                  d«      st	        t
        |«      n|}|j                  d|› d�«       Œa|j                  «        Œr t        |«      S | j                  d	«      }|rt        |«      S y)
u   ä»Žè¯¦æƒ…é¡µæ��å�–æ­£æ–‡z@#content, .content, .article-content, .info-content, .TRS_EditorÚimgÚsrcÚ zdata:Úhttpz
<img src="z">Úbody)
Ú
select_oneÚfind_allÚgetÚ
startswithr   ÚBASE_URLÚreplace_withÚ	decomposeÚstrÚfind)ÚsoupÚcontent_divr'   r(   Úimg_urlr+   s         r   Úextract_contentr8   G   sµ   € ð —/‘/Ð"dÓe€KÙà×'Ñ'¨Ó.ò 	 ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨'Ô2Ø8;¿¹ÀvÔ8Nœ'¤(¨CÔ0ÐTW�Ø× Ñ  :¨g¨Y°bÐ!9Õ:à—‘•ð	 ô �;ÓÐð �9‰9�VÓ€DÙÜ�4‹yÐØr   c                 óz  — t        |«      D ]ì  }	 |j                  | t        d¬«      }d|_        |j                  dk(  r»t        |j                  d«      }t        |«      }d}|j                  }g d¢}	|	D ]}  }
t        j                  |
|«      }|sŒ|j                  d«      j                  d	d
«      j                  dd
«      j                  dd«      j                  dd
«      j                  dd
«      } n ||fc S Œî y# t        j                  $ r+}||dz
  k  rt        j                  d|z  «       Y d}~�Œ)d}~ww xY w)u   èŽ·å�–è¯¦æƒ…é¡µå†…å®¹é<   ©Úheadersr   úutf-8éÈ   úhtml.parserr)   )u+   (\d{4}[-/\.å¹´]\d{1,2}[-/\.æœˆ]\d{1,2}æ—¥?)u6   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2})u6   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}[-/\.]\d{1,2}[-/\.]\d{1,2})z(\d{4}-\d{2}-\d{2})r   u   å¹´ú-u   æœˆu   æ—¥ú/ú.é   N)r)   r)   )Úranger.   ÚHEADERSÚencodingÚstatus_coder   Útextr8   ÚreÚsearchÚgroupÚreplaceÚrequestsÚRequestExceptionÚtimeÚsleep)ÚurlÚsessionÚretriesÚattemptÚrr5   r#   Údate_strrH   Údate_patternsÚpÚmÚes                r   Ú
get_detailr[   \   sD  € ä˜“>ò )ˆð	)Ø—‘˜C¬¸"�Ó=ˆAØ ˆAŒJØ�}‰} Ò#Ü$ Q§V¡V¨]Ó;�Ü)¨$Ó/�ð �Ø—v‘v�ò!�ð 'ò �AÜŸ	™	 ! TÓ*�AÚØ#$§7¡7¨1£:×#5Ñ#5°e¸CÓ#@×#HÑ#HÈÈsÓ#S×#[Ñ#[Ð\aÐbdÓ#e×#mÑ#mÐnqÐruÓ#v×#~Ñ#~ð  @Cð  DGó  $H˜Ùð	ð  Ð(Ò(ð' $ð	)ð6 øô ×(Ñ(ò 	)Ø˜ 1™Ò$Ü—
‘
˜1 ™<Ô(ÿùð	)ús   �A>C<ÂA'C<Ã<D:Ä D5Ä5D:c                  óÊ  — 	 t        j                  t        t        d¬«      } d| _        | j
                  dk7  rt        d| j
                  › �«       yt        j                  d| j                  «      }|rAt        |j                  d«      «      }|t        z   dz
  t        z  }t        d	|› d
|› d�«       |S t        | j                  d«      }|j                  d«      }d}|D ]O  }|j                  dd«      }t        j                  d|«      }	|	sŒ.t        |	j                  d«      «      }
|
|kD  sŒN|
}ŒQ t        d|› �«       |S # t        $ r}t        d|› �«       Y d}~yd}~ww xY w)u   èŽ·å�–æ€»é¡µæ•°r   r;   r=   r>   u   æ— æ³•è®¿é—®é¦–é¡µ: HTTP r   u   è®°å½•æ€»æ•°[ï¼š:]\s*(\d+)r   u   é¦–é¡µæ£€æµ‹åˆ°æ€»è®°å½•: u   æ�¡, å…±u   é¡µr?   za[href*="index_"]Úhrefr)   zindex_(\d+)\.htmu   é¦–é¡µæ£€æµ‹åˆ°æœ€å¤§é¡µ: u   èŽ·å�–æ€»é¡µæ•°å¤±è´¥: N)rM   r.   r0   rE   rF   rG   ÚprintrI   rJ   rH   ÚintrK   Ú	PAGE_SIZEr   ÚselectÚ	Exception)rU   rY   ÚtotalÚpagesr5   Ú
page_linksÚmax_pageÚar]   Úm2rX   rZ   s               r   Úget_total_pagesri   {   sL  € ðÜ�L‰Lœ¬7¸BÔ?ˆØˆŒ
Ø�=‰=˜CÒÜÐ-¨a¯m©m¨_Ð=Ô>Øä�I‰IÐ3°Q·V±VÓ<ˆÙÜ˜Ÿ™ ›
“OˆEØœYÑ&¨Ñ*¬yÑ8ˆEÜÐ.¨u¨g°X¸e¸WÀCÐHÔIØˆLä˜QŸV™V ]Ó3ˆØ—[‘[Ð!4Ó5ˆ
ØˆØò 	!ˆAØ—5‘5˜ Ó$ˆDÜ—‘Ð.°Ó5ˆBÚÜ˜Ÿ™ ›Ó$�Ø�x“<Ø ‘Hð	!ô 	Ð*¨8¨*Ð5Ô6ØˆøÜò ÜÐ'¨ sÐ+Ô,Üûðús2   ‚AE ÁA"E Â4AE ÄE Ä-E Å	E"Å
EÅE"c                  óJ  — t        «       } t        | «       t        «       }|dk(  rt        d«       | j	                  «        yt        d|› d�«       t        j                  «       }|j                  j                  t        «       d}d}t        dt        |t        xs |«      dz   «      D �](  }|dk(  rt        }n	d|dz
  › d�}	 |j                  |d	¬
«      }d|_        |j                   dk7  rt        d|› d|j                   › d�«       Œ`	 t%        |j&                  d«      }	d}
|	j)                  dd¬«      D �]d  }|d   }|j                  dd«      xs |j+                  d¬«      }|j-                  d«      s|j-                  d«      sd|v sŒVd|v s"|j-                  d«      s|j-                  d«      rŒ}|rt/        |«      dk  rŒŽt1        j2                  d|«      rŒ¥t5        ||«      }|
dz  }
t7        | |«      r|dz  }ŒÈt9        ||«      \  }}|rt%        |d«      j+                  d¬«      nd}t/        |«      d k  rt        d!|dd" › d#�«       |dz  }�Œt;        | ||||«      r3|dz  }| j=                  «        t        d$|› d%|dd& › d'|xs d(› d)�«       �Œ`|dz  }�Œg ||z   }t        d|› d*|› d+|
› d,|› d-|› d.�«       t?        j@                  d«       �Œ+ | j	                  «        t        d/|› d0|› d1||z   › d.�«       y# t"        $ r}t        d|› d|› �«       Y d}~�Œud}~ww xY w)2u   å…¨é‡�é‡‡é›†r   u   æ— æ³•ç¡®å®šæ€»é¡µæ•°ï¼Œé€€å‡ºNu   
å…± u    é¡µï¼Œå¼€å§‹é‡‡é›†...r   z/https://sthjj.gz.gov.cn/hjgl/jsxm/hpspgg/index_z.htmr:   r   r=   r>   u     ç¬¬u	   é¡µ HTTP u	   ï¼Œè·³è¿‡u   é¡µè¯·æ±‚å¤±è´¥: r?   rg   T)r]   r]   r"   r)   )Ústripz.htmlz/contentÚindex_z	index.htmz
index.htmlé   z^\d[\d\.\s\-]*$é   u     âš  å†…å®¹è¿‡çŸ­: r   u
   ... è·³è¿‡u     âœ“ [z] é(   z... (u	   æ— æ—¥æœŸú)rA   u   é¡µ: æœ¬é¡µu   æ�¡, ç´¯è®¡æ–°u
   æ�¡/è·³è¿‡u   æ�¡u   
âœ… é‡‡é›†å®Œæˆ�ï¼�æ–°å¢žu   æ�¡ï¼Œè·³è¿‡u   æ�¡ï¼Œæ€»å¤„ç�†)!r   r   ri   r^   ÚcloserM   ÚSessionr<   ÚupdaterE   rD   ÚminÚ_MAX_PGr0   r.   rF   rG   rb   r   rH   r-   Úget_textÚendswithÚlenrI   Úmatchr   r   r[   r%   r   rO   rP   )r   Útotal_pagesrR   Ú	total_newÚ
total_skipÚpagerQ   rU   rZ   r5   Úlinks_foundrg   r]   r"   Ú
detail_urlr#   rV   Úcontent_textÚ
page_totals                      r   Úcrawlr‚   ›   s_  € ä‹9€DÜ�Ôä!Ó#€KØ�aÒÜÐ.Ô/Ø�
‰
ŒØä	ˆF�;�-Ð5Ð
6Ô7ä×ÑÓ €GØ‡O�O×Ñœ7Ô#à€IØ€Jä�aœ˜[¬'Ò*@°[ÓAÀAÑEÓFó @ˆØ�1Š9Ü‰CàCÀDÈÁFÀ8È4ÐPˆCð	Ø—‘˜C¨�Ó,ˆAØ ˆAŒJØ�}‰} Ò#Ü˜˜d˜V 9¨Q¯]©]¨O¸9ÐEÔFØð $ô ˜QŸV™V ]Ó3ˆð ˆØ—‘˜s¨�Ó.ó &	 ˆAØ�V‘9ˆDØ—E‘E˜' 2Ó&Ò@¨!¯*©*¸4¨*Ó*@ˆEð —M‘M &Ô)¨T¯]©]¸7Ô-CÀzÐUYÑGYØØ˜4Ñ 4§=¡=°Ô#=ÀÇÁÈ|ÔA\ØÙœC ›J¨šNØô �x‰xÐ*¨EÔ2Øä   dÓ+ˆJà˜1ÑˆKÜ˜$ 
Ô+Ø˜a‘�
Øô !+¨:°wÓ ?ÑˆG�Xñ Zaœ=¨°-Ó@×IÑIÐPTÐIÔUÐfhˆLÜ�<Ó  2Ò%ÜÐ,¨U°3°B¨Z¨L¸
ÐCÔDØ˜a‘�
Ùä˜$  w°
¸HÔEØ˜Q‘�	Ø—‘”Ü˜ 	˜{¨"¨U°3°B¨Z¨L¸¸hÒ>UÈ+Ð=VÐVWÐXÖYà˜a‘’
ðM&	 ðP  Ñ+ˆ
Ü��d�V˜1˜[˜M¨°[°MÀÐPYÈ{ÐZdÐeoÐdpÐpsÐtÔuô 	�
‰
�1ŽðA@ðD 	‡J�J„LÜ	Ð'¨	 {°,¸z¸lÈ/ÐZcÐdnÑZnÐYoÐorÐ
sÕtøôo ò 	Ü�E˜$˜Ð0°°Ð4Ô5Ýûð	ús   ÃAK=Ë=	L"ÌLÌL"Ú__main__)é   )#Ú__doc__rM   rI   r   ÚosÚsysrO   Úbs4r   Úurllib.parser   r   Ú_SYSrx   ÚargvÚisdigitr_   ru   r^   r3   r0   r    rE   Úgetenvr   r`   r   r   r   r%   r8   r[   ri   r‚   Ú__name__© r   r   ú<module>r�      sé   ðñó Û 	Û Û 	Û 
Û Ý ß *Û Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/ð 7€Ø*€	àoØ)ñ€ð ˆ"�)‰)�KÐ!2Ó
3€Ø€	òòò"&òòó*ò>ò@Vuðr ˆzÒÙ	…Gð r   