Ë
    ý&˜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ZdZ	dZ
 ej                  dd«      Zd	d
ddœZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)ue  è¡¡é˜³æ�¾æœ¨ç»�æµŽå¼€å�‘åŒº - é€šçŸ¥å…¬å‘Š (www.hengyang.gov.cn/hysm/zwgk/tzgg)
CMS: å�šåˆ DFSæ¨¡æ�¿ç³»ç»Ÿ
åˆ—è¡¨: index.html + pages/{N}.html (N=2~26, å…±26é¡µ)
è¯¦æƒ…: title=div.zjym_j, date=div.zjym_x, content=div.zjym_d (ä¿�ç•™HTML)

ç”¨æ³•:
  python3 crawl_hengyang_hysm.py          # å…¨é‡�26é¡µ
  python3 crawl_hengyang_hysm.py 1        # å¢žé‡�1é¡µ
é    N)Údatetimezhttps://www.hengyang.gov.cnz/hysm/zwgk/tzggu(   è¡¡é˜³æ�¾æœ¨ç»�æµŽå¼€å�‘åŒº-é€šçŸ¥å…¬å‘ŠÚ	SEARCH_DBz/root/search.dbz[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/125.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8)z
User-AgentÚAcceptzAccept-Languageé   c                  ób   — t        j                  t        «      } t         j                  | _        | S )N)Úsqlite3ÚconnectÚDB_PATHÚRowÚrow_factory)Úconns    ú(/root/gov_crawler/crawl_hengyang_hysm.pyÚget_connr      s!   € Ü�?‰?œ7Ó#€DÜ—{‘{€DÔØ€Kó    c                 óÞ   — 	 t        j                  | t        d¬«      }d|_        |j                  dk(  r$t        |j                  «      dkD  r|j                  S y # t        $ r
}Y d }~y d }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8éÈ   éô  )ÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚlenÚtextÚ	Exception)ÚurlÚrespÚes      r   Úhttp_getr"       s]   € ðÜ�|‰|˜C¬¸"Ô=ˆØˆŒØ×Ñ˜sÒ"¤s¨4¯9©9£~¸Ò';Ø—9‘9ÐØøÜò Üûðús   ‚AA Á	A,Á'A,c                 óN   — | dk(  rt         › t        › d�S t         › t        › d| › d�S )Né   z/index.htmlz/pages/z.html)ÚBASEÚLIST_DIR)Úpages    r   Úget_list_urlr(   +   s1   € Øˆq‚yÜ�œ�z Ð-Ð-ÜˆV”H�:˜W T F¨%Ð0Ð0r   c                 ót  — g }t        j                  d| t         j                  «      D �]  }|j                  d«      j	                  «       }|j                  d«      }t        j
                  d|«      }|r|j                  d«      n|j                  d«      j	                  «       }|j                  d«      j	                  «       }t        |«      dk  r|dv rŒ®|j                  d	«      s+|j                  d
«      r	t        |z   nt        › t        › d
|› �}|j                  |j	                  «       ||dœ«       �Œ |S )Nz_<li[^>]*>\s*<a[^>]*href="([^"]+)"[^>]*>(.*?)</a>\s*<span>\s*\[?(\d{4}-\d{2}-\d{2})\]?\s*</span>r$   r   ztitle="([^"]+)"é   é   é   )u   é¦–é¡µu   é€šçŸ¥å…¬å‘Šu   æ”¿åŠ¡å…¬å¼€u   ç»�å¼€åŒºä»‹ç»�Úhttpú/)Útitler   Údate)ÚreÚfinditerÚDOTALLÚgroupÚstripÚsearchr   Ú
startswithr%   r&   Úappend)ÚhtmlÚitemsÚmÚhrefÚa_tagÚ
title_attrr/   r0   s           r   Ú
parse_listr?   1   s  € Ø€EÜ�[‰[ØjØŒb�i‰ióó Jˆð �w‰w�q‹z×ÑÓ!ˆØ—‘˜“
ˆÜ—Y‘YÐ1°5Ó9ˆ
Ù'1�
× Ñ  Ô#°q·w±w¸q³z×7GÑ7GÓ7IˆØ�w‰w�q‹z×ÑÓ!ˆÜˆu‹:˜Š>˜eÐ'dÑdØØ�‰˜vÔ&Ø"&§/¡/°#Ô"6”4˜$’;¼t¸fÄXÀJÈaÐPTÈvÐ<VˆDØ�‰˜uŸ{™{›}°TÀ4ÑHÖIðJð €Lr   c                 ó:  — t        | «      }|sy |}t        j                  d|t        j                  «      }|r8t        j                  dd|j                  d«      «      j                  «       }|r|}d}t        j                  d|«      }|r|j                  d«      }d}t        j                  d|t        j                  «      }	|	rè|	j                  d«      }
t        j                  dd|
t        j                  ¬«      }
t        j                  d	d|
t        j                  ¬«      }
t        j                  d
d|
t        j                  ¬«      }
t        j                  dd|
t        j                  ¬«      }
t        j                  dd|
t        j                  ¬«      }
|
j                  «       }
|
r|
}g }t        j                  d|«      }t        j                  d|«      }t        |«      D ]^  \  }}|t        |«      k  r||   nd|dz   › �}|j                  d«      r	t        |z   n|}|j                  |j                  «       |dœ«       Œ` t        j                  d|t        j                  «      D ]`  }|j                  d«      }|j                  d«      j                  «       }|j                  d«      r	t        |z   }|j                  ||dœ«       Œb t        j                  dd|«      j                  «       }t        j                  dd|«      d d }|s|d d }t        t        j                  dd|«      j                  «       «      }|dk  r(|r&d| › d|› d�|z   }|D ]  }|d|d   › d|d   › d�z  }Œ n%|D ]   }|d   |xs dvsŒ|d|d   › d|d   › d�z  }Œ" || ||||dœS ) Nz(<div[^>]*class="zjym_j"[^>]*>(.*?)</div>z<[^>]+>Ú r$   u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})z(<div[^>]*class="zjym_d"[^>]*>(.*?)</div>z^\s*<ul[^>]*>\s*<li[^>]*>)Úflagsz</li>\s*</ul>\s*$z<script[^>]*>.*?</script>z<link[^>]*>z<style[^>]*>.*?</style>zdata-pdf="([^"]+)"z,<span[^>]*class="edui-pdf"[^>]*>(.*?)</span>u	   PDFé™„ä»¶r.   )Únamer   zG<a[^>]*href="([^"]*\.(pdf|doc|docx|xls|xlsx|zip|rar))"[^>]*>([^<]+)</a>r+   ú z\s+r   é,  é   z<p><a href="z">z</a></p>z
<p><a href="r   rC   )r/   r   r0   ÚcontentÚsummaryÚattachments)r"   r1   r6   r3   Úsubr4   r5   ÚfindallÚ	enumerater   r7   r%   r8   r2   ÚI)r   Útitle_from_listr9   r/   ÚtmÚtr0   ÚdmrG   ÚcmÚrawrI   Ú	pdf_linksÚ	pdf_namesÚiÚpdf_urlrC   Úfull_urlÚamÚurl2Úname2rH   Útext_lenÚatts                           r   Úextract_detailr^   D   s^  € Ü�C‹=€DÙØà€EÜ	�‰Ð>ÀÄbÇiÁiÓ	P€BÙ	Ü�F‰F�:˜r 2§8¡8¨A£;Ó/×5Ñ5Ó7ˆÙØˆEà€DÜ	�‰Ð>ÀÓ	E€BÙ	Ø�x‰x˜‹{ˆà€GÜ	�‰Ð>ÀÄbÇiÁiÓ	P€BÙ	Ø�h‰h�q‹kˆÜ�f‰fÐ1°2°sÄ"Ç)Á)ÔLˆÜ�f‰fÐ)¨2¨s¼"¿)¹)ÔDˆÜ�f‰fÐ1°2°sÄ"Ç)Á)ÔLˆÜ�f‰f�^ R¨´B·I±IÔ>ˆÜ�f‰fÐ/°°SÄÇ	Á	ÔJˆØ�i‰i‹kˆÙØˆGð €KÜ—
‘
Ð0°$Ó7€IÜ—
‘
ÐJÈDÓQ€IÜ 	Ó*ò D‰
ˆˆ7Ø ¤3 y£>Ò1ˆy˜Š|¸À1ÀQÁ3À%Ð7HˆØ%,×%7Ñ%7¸Ô%<”4˜'’>À'ˆØ×Ñ D§J¡J£L¸ÑBÕCðDô �k‰kØRØŒb�d‰dóò 9ˆð �x‰x˜‹{ˆØ—‘˜“×!Ñ!Ó#ˆØ�?‰?˜3ÔÜ˜$‘;ˆDØ×Ñ E°$Ñ7Õ8ð9ô �f‰f�Z  gÓ.×4Ñ4Ó6€GÜ�f‰f�V˜S 'Ó*¨4¨CÐ0€GÙØ˜˜�+ˆä”2—6‘6˜* b¨'Ó2×8Ñ8Ó:Ó;€HØ�"‚}™à    R¨ w¨hÐ7¸'ÑAˆØò 	LˆCØ˜¨¨E©
 |°2°c¸&±k°]À(ÐKÑK‰Gñ	Lð ò 	PˆCØ�5‰z '¢-¨RÒ0Ø˜^¨C°©J¨<°r¸#¸f¹+¸ÀhÐOÑO‘ð	Pð
 ØØØØØ"ñð r   c                  óì  — d} d }t        t        j                  dd  «      }d}|t        |«      k  rL||   }|dv rd} n,|dk(  r'|dz   t        |«      k  rt	        ||dz      «      }|dz  }|dz  }|t        |«      k  rŒL|r|}n
| rdnt
        }| rdnd}t        d	d
› �d¬«       t        dt        › d|› d�d¬«       t        dt        › �d¬«       t        d
› d¬«       d}d}d}	t        d|dz   «      D �]…  }
t        |
«      }t        d|
› d|› d|› �d¬«       t        |«      }|st        dd¬«       Œ@t        |«      }|st        dd¬«        �n,t        dt        |«      › d�d¬«       t        |«      D �]   \  }}t        |d   |d   «      }|s#t        d|dz   › d|d   d d › d�d¬«       |	dz  }	Œ>t        «       }	 |d   xs dd d }|d    xs dd d! }|j!                  d"|d   |d   ||d#   xs d|t        d$f«       |j"                  dkD  }|j%                  «        |r+|dz  }| r)t        d|dz   › d%|d   d d& › d|d#   › d�d¬«       n|dz  }|j)                  «        t+        j,                  d(«       �Œ �Œˆ t        d	d)› �d¬«       t        d*|› d+|› d,|	› �d¬«       |dkD  rBt        «       }	 |j!                  d-t        f«       |j%                  «        |j)                  «        t        d/|› d0�d¬«       y # t&        $ r!}| rt        d'|› �d¬«       |	dz  }	Y d }~ŒÏd }~ww xY w# |j)                  «        w xY w# t&        $ r}t        d.|› �d¬«       Y d }~Œ‚d }~ww xY w# |j)                  «        w xY w)1NFr$   r   )Ú1Úincrementalz--incrementalTz--pagesu   å¢žé‡�u   å…¨é‡�ú
z2==================================================)Úflushu   ðŸ�  z (ú)z   DB: u   
ðŸ“„ åˆ—è¡¨é¡µ r.   z: u     [WARN] èŽ·å�–å¤±è´¥ï¼Œè·³è¿‡u'     [WARN] æ— æ–‡ç« é“¾æŽ¥ï¼Œç»“æ�Ÿåˆ†é¡µu	     å�‘çŽ° u
    ç¯‡æ–‡ç« r   r/   z  [u   ] âœ— é(   u   ... (è¯¦æƒ…èŽ·å�–å¤±è´¥)rG   rA   i ¡ rH   rE   z}INSERT OR IGNORE INTO gov_raw (title, page_url, content, publish_date, summary, site_name, tags) VALUES (?, ?, ?, ?, ?, ?, ?)r0   u   çŽ¯è¯„é˜¶æ®µu   ] âœ… é2   z
  [ERROR] g333333Ó?uZ   â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€u   âœ… æ–°å¢ž: u    | è·³è¿‡: u    | é”™è¯¯: z¥INSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary, rowid_col) SELECT id, title, site_name, substr(content, 1, 500), id FROM gov_raw WHERE site_name=?u     [WARN] FTSå�Œæ­¥:u   ðŸ“¤ å®Œæˆ�ï¼�å…± u    æ�¡æ–°æ•°æ�®)ÚlistÚsysÚargvr   ÚintÚTOTAL_PAGES_ALLÚprintÚ	SITE_NAMEr
   Úranger(   r"   r?   rL   r^   r   ÚexecuteÚtotal_changesÚcommitr   ÚcloseÚtimeÚsleep)ra   Úpages_overrideÚ	args_listrV   ÚargÚtotal_pagesÚmodeÚ	new_countÚ
skip_countÚerror_countr'   r   r9   r:   ÚitemÚdetailr   rG   rH   Úchangedr!   s                        r   Úmainr€   �   sÙ  € à€KØ€NÜ”S—X‘X˜a˜b�\Ó"€IØ	€AØ
Œc�)‹nÒ
Ø˜‰lˆØÐ7Ñ7Ø‰KØ�IÒ ! a¡%¬#¨i«.Ò"8Ü  ¨1¨q©5Ñ!1Ó2ˆNØ�‰FˆAØ	ˆQ‰ˆð Œc�)‹nÓ
ñ Ø$‰á&‘a¬OˆÙ"‰8¨€Dä	ˆBˆvˆhˆ-˜tÕ$Ü	ˆE”)�˜B˜t˜f AÐ
&¨dÕ3Ü	ˆG”G�9Ð
 TÕ*Ü	ˆVˆH˜TÕ"à€IØ€JØ€Kä�a˜ q™Ó)ó .ˆÜ˜4Ó ˆÜÐ! $  q¨¨°R¸°uÐ=ÀTÕJÜ˜‹}ˆÙÜÐ2¸4Õ@Øä˜4Ó ˆÙÜÐ;ÀDÕIÚä�	œ#˜e›*˜ ZÐ0¸Õ=ä  Ó'ó 	‰GˆAˆtÜ# D¨¡K°°g±Ó?ˆFÙÜ˜˜A˜a™C˜5  t¨G¡}°S°bÐ'9Ð&:Ð:RÐSÐ[_Õ`Ø˜qÑ �Øä“:ˆDðØ! )Ñ,Ò2°°G°VÐ<�Ø! )Ñ,Ò2°°D°SÐ9�Ø—‘ð3à˜G‘_ f¨U¡m°W¸fÀV¹nÒ>RÐPRÐT[Ô]fÐhvÐwôð
 ×,Ñ,¨qÑ0�Ø—‘”ÙØ ‘N�IÙ"Ü  A a¡C 5¨¨v°g©¸sÀÐ/CÐ.DÀBÀvÈfÁ~ÐFVÐVWÐXÐ`dÖeà !‘O�Jð —
‘
”ä�J‰J�sŽOò?	ð.ô` 
ˆBˆxˆjˆ/ Õ&Ü	ˆL˜˜ ;¨z¨l¸+ÀkÀ]Ð
SÐ[_Õ`à�1‚}Ü‹zˆð	Ø�L‰Lð1ä3<°,ôð
 �K‰KŒMð
 �J‰JŒLä	Ð˜y˜k¨Ð
7¸tÖDøô7 ò !ÙÜ˜J q cÐ*°$Õ7Ø˜qÑ •ûð!ûð
 —
‘
•ûô" ò 	9ÜÐ'¨ sÐ+°4×8Ò8ûð	9ûð �J‰J�LúsU   Æ<BK9Ê0'L; Ë9	L#ÌLÌL&ÌL#Ì#L&Ì&L8Ì;	MÍMÍM! ÍMÍM! Í!M3Ú__main__)Ú__doc__r1   r   r   Úosrh   rs   r   r%   r&   rm   Úgetenvr
   r   rk   r   r"   r(   r?   r^   r€   Ú__name__© r   r   ú<module>r‡      sˆ   ðñ÷ ,× +× +Ý à$€Ø€Ø6€	Ø
ˆ"�)‰)�KÐ!2Ó
3€àoØOØ0ñ€ð
 €òòò1òò&HòV`EðF ˆzÒÙ…Fð r   