Ë
    ~¿£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Zddl	m
Z
 ddlZdZdZeez   dz   ZdZdZej"                  j%                  d	d
«      ZddiZdZ eej.                  «      D ]=  \  ZZedk(  sŒedz    eej.                  «      k  sŒ% eej.                  edz      «      Z n dd„Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)uü   
æž—è¥¿åŽ¿ - å…¬å‘Šå…¬ç¤º (linxixian.gov.cn)
åˆ—è¡¨: zwdt/gggs/index.html â†’ index_{N}.html (N=page-1, i=0â†’é¦–é¡µ)
è¯¦æƒ…: ./202607/t20260713_XXXXXX.html
æ­£æ–‡: div#fontzoom > div#articleContnet > div#article > div.trs_editor_view
15æ�¡/é¡µ, 34é¡µ
é    N)ÚBeautifulSoupzhttp://www.linxixian.gov.cnz/zwdt/gggs/z
index.htmlu   æž—è¥¿åŽ¿-å…¬å‘Šå…¬ç¤ºu	   å†…è’™å�¤Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z--pagesé   c                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r	   r   r   s           úcrawl_linxixian.pyÚhtml_table_to_htmlr      sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                 ó<  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |d¬«      j                  «       j                  dd¬«      S # t        $ r+}t        d| › d|› �t        j                  ¬	«       Y d }~y
d }~ww xY w)N)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsz[WARN] fetch failed: z - ©Úfiler
   )r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r   Úfetchr3   )   sƒ   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   §?A' Á'	BÁ0!BÂBc                 óÐ  — g }| j                  d«      }|dk  r|S | j                  d|«      }|dk  r|dz   }| || }t        j                  d|t        j                  t        j                  z  «      D ]ñ  }|j                  d«      |j                  d«      |j                  d«      }}}t        j                  d	d
|«      j                  «       }	|	rt        |	«      dk  rŒl|}
|j                  d«      rt        t        z   |dd z   }
n<|j                  d«      r
t        |z   }
n!|j                  d«      st        t        z   |z   }
|j                  |	|
|j                  «       dœ«       Œó |S )zCExtract items from list page - only items inside div.list > ul > liz<div class="list">r   z</ul>i'  zG<li>.*?<a[^>]*href="([^"]+)"[^>]*>.*?<span>\[([^\]]+)\]</span>(.*?)</a>r   é   é   z<[^>]+>r
   é   ú./Nú/r   )Útitler0   Údate)ÚfindÚreÚfinditerÚIÚSÚgroupÚsubÚstripÚlenr   ÚBASE_URLÚLIST_DIRÚappend)ÚhtmlÚitemsÚ
list_startÚlist_endÚ	list_htmlÚmr	   r;   Ú
title_htmlr:   r0   s              r   Úextract_itemsrO   1   sH  € à€Eà—‘Ð/Ó0€JØ�A‚~ØˆØ�y‰y˜ *Ó-€HØ�!‚|Ø Ñ%ˆØ�Z Ð)€Iä�[‰[ÐcÐenÔpr×ptÑptÔuw×uyÑuyÑpyÓzò IˆØ!"§¡¨£¨Q¯W©W°Q«Z¸¿¹À»�Jˆdˆä—‘�z 2 zÓ2×8Ñ8Ó:ˆÙœ˜E›
 QšØàˆØ�?‰?˜4Ô ÜœXÑ%¨¨Q¨R¨Ñ0‰CØ�_‰_˜SÔ!Ü˜T‘/‰CØ—‘ Ô(ÜœXÑ%¨Ñ,ˆCØ�‰˜u¨S¸$¿*¹*»,ÑGÕHðIð €Lr   c                 óÎ  — t        | d«      }d}|j                  d«      }|r|j                  d¬«      }d}|j                  d«      }|r9|j                  «       }t	        j
                  d|«      }|r|j                  d«      }d}	g }
|j                  d	«      xs |j                  d
«      }|s||dg dœS g }|j                  g d¢d¬«      D �]˜  }|j                  dk(  r|j                  d«      rŒ%|j                  dk(  r|j                  d«      rŒF|j                  dk(  ró|j                  dd«      }d|v s$d|j                  «       v sd|j                  «       v rŒ�|j                  dd«      xs |j                  dd«      }|j                  d«      r
t        |z   }n]|j                  d«      r+|j                  dd«      d   dz   |j                  d«      z   }n!|j                  d«      st        t         z   |z   }|j#                  d|› d|› d�«       �ŒH|j                  dk(  r!t%        ||«      }|r|j#                  |«       �Œx|j                  dd¬«      }|s�Œ�|j                  d d¬!«      D ]ã  }|d"   }t	        j
                  d#|t        j&                  «      sŒ.|j                  d¬«      xs |j                  d$d«      }|j                  d«      r
t        |z   }n]|j                  d«      r+|j                  dd«      d   dz   |j                  d«      z   }n!|j                  d«      st        t         z   |z   }|
j#                  |xs d%|d&œ«       Œå |j#                  |«       �Œ› d'j)                  d(„ |D «       «      }	|	j+                  d)d«      j+                  d*d«      }	t-        «       }g }|
D ]/  }|d+   |vsŒ|j/                  |d+   «       |j#                  |«       Œ1 |||	|dœS ),zParse detail pager   r
   Úh1T©rC   zdiv.article_infoz(\d{4}-\d{2}-\d{2})r   zdiv#fontzoomzdiv.article_content_list)r:   r;   ÚcontentÚattachments)Úpr   r   )Ú	recursiverU   r   r   r   ztb2.jpgÚicon_z
/sysimage/Úaltr:   r9   z..r   r8   r   z![z](ú)ú r   )r	   r	   z\.(docx?|pdf|xlsx?|rar|zip)$Údownloadu   é™„ä»¶)r:   r0   z

c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)NrR   )Ú.0rU   s     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>’   s   è ø€ Ò8 ¨a¯g©g­iœ!Ñ8ùs   ‚˜õ   Â z&nbsp;r0   )r   r<   Úget_textÚ
select_oner=   ÚsearchrA   r   ÚnameÚfind_parentr   Úlowerr   rE   ÚrsplitÚlstriprF   rG   r   r?   Újoinr"   ÚsetÚadd)rH   r0   Úsoupr:   rQ   Ú	date_textÚinfo_divÚ	info_textrM   rS   rT   Úcontent_divÚpartsÚelr   rX   Útbl_htmlÚtextr   ÚahrefÚatitleÚseenÚ
unique_attÚatts                           r   Úparse_detailry   N   s®  € ä˜˜}Ó-€Dð €EØ	�‰�4‹€BÙ	Ø—‘ $�Ó'ˆð €IØ�‰Ð1Ó2€HÙØ×%Ñ%Ó'ˆ	Ü�I‰IÐ,¨iÓ8ˆÙØŸ™ ›
ˆIð €GØ€KØ—/‘/ .Ó1Ò`°T·_±_ÐE_Ó5`€KÙØ¨	¸bÐQSÑTÐTà€EØ×"Ñ"Ò#8ÀDÐ"ÓIó 'ˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9Øà�7‰7�eÒØ—&‘&˜ Ó#ˆCà˜CÑ 7¨c¯i©i«kÑ#9¸\ÈSÏYÉYË[Ñ=XØØ—&‘&˜ Ó#Ò: r§v¡v¨g°rÓ':ˆCØ�~‰~˜cÔ"Ü ‘n‘Ø—‘ Ô%Ø—j‘j  aÓ(¨Ñ+¨cÑ1°C·J±J¸tÓ4DÑD‘Ø—^‘^ FÔ+Ü¤Ñ)¨CÑ/�Ø�L‰L˜2˜c˜U " S E¨Ð+Ô,Ùà�7‰7�gÒÜ)¨"¨cÓ2ˆHÙØ—‘˜XÔ&ÙØ�{‰{˜3 dˆ{Ó+ˆÛØ—[‘[ ¨4�[Ó0ò 
T�Ø˜&™	�Ü—9‘9Ð<¸eÄRÇTÁTÕJØŸZ™Z¨d˜ZÓ3ÒL°q·u±u¸ZÈÓ7L�FØ×'Ñ'¨Ô,Ü (¨5Ñ 0™Ø×)Ñ)¨$Ô/Ø #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸e¿l¹lÈ4Ó>PÑ P™Ø"×-Ñ-¨fÔ5Ü (¬8Ñ 3°eÑ ;˜Ø×&Ñ&°Ò1C¸8ÈEÑ'RÕSð
Tð �L‰L˜ÖðO'ðR �k‰kÑ8 UÔ8Ó8€GØ�o‰o˜h¨Ó,×4Ñ4°X¸sÓC€Gô ‹5€DØ€JØò #ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø×Ñ˜cÕ"ð#ð
  I¸'ÐR\Ñ]Ð]r   c                  óh	  — t        j                  t        «      } | j                  «       }g }t	        t
        «      }|s0t        dt        j                  ¬«       t        j                  d«       t        |«      }|s0t        dt        j                  ¬«       t        j                  d«       t        dt        |«      › d�t        j                  ¬«       |j                  |«       t        j                  d|«      }|rt        |j!                  d«      «      nd}t        d	|› �t        j                  ¬«       t"        r2|t"        kD  r)t"        }t        d
t"        › d�t        j                  ¬«       t%        d|«      D ]q  }t&        › t(        › d|› d�}t	        |«      }|s nPt        |«      }|s nAt        d|dz   › dt        |«      › d�t        j                  ¬«       |j                  |«       Œs t        dt        |«      › d|› d�t        j                  ¬«       d}	d}
d}t+        |«      D �]  \  }}|j-                  d|d   f«       |j/                  «       rŒ.|dz  dk(  r6t        d|› dt        |«      › d|d   d d › d�t        j                  dd¬«       t	        |d   «      }|s$|dz  dk(  rt        dt        j                  ¬«       Œ t1        ||d   «      }|d   xs |d   }|d    xs |d    }|d!   }|d"   }|j3                  «       s*|
dz  }
|dz  dk(  rt        d#t        j                  ¬«       �Œt        j4                  d$d|«      j3                  «       }|r|d d% n|d d% }|rt7        j8                  |d&¬'«      nd(}d}|rVt        j                  d)|«      }|r>t        |j!                  d«      |j!                  d*«      z   |j!                  d+«      z   «      }	 |j-                  d,|t:        t<        |d   |||||f	«       |j>                  dkD  r|	dz  }	|t        |«      z  }tC        jD                  d.«       �Œ | jG                  «        | jI                  «        t        d/t:        › d|	› d0|
› d1|› d2�	«       y # t@        $ r0}|dz  dk(  rt        d-|› �t        j                  ¬«       Y d }~Œ‰d }~ww xY w)3Nz[ERROR] Cannot fetch list pager$   r   z [ERROR] No items found on page 1z[INFO] Page 1: z itemszvar countPage\s*=\s*(\d+)é"   z[INFO] Total pages: z[INFO] Limited to z pagesÚindex_z.htmlz[INFO] Page z: z[INFO] Total: z items from r   z'SELECT id FROM gov_raw WHERE page_url=?r0   é   z[INFO] [r9   z] r:   é(   z...rZ   T)r%   ÚendÚflushzFETCH FAILEDr;   rS   rT   zCONTENT EMPTYz\s+éÈ   F)Úensure_asciiz[]z(\d{4})-(\d{2})-(\d{2})r5   r6   zºINSERT OR IGNORE INTO gov_raw 
                (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank)
                VALUES (?,?,?,?,?,?,?,?,?)z
DB ERROR: g      à?z

[RESULT] z new, z empty, z attachments)%Úsqlite3ÚconnectÚDBÚcursorr3   ÚLIST_URLr-   r.   r/   ÚexitrO   rD   Úextendr=   rb   ÚintrA   Ú_MAX_PGÚrangerE   rF   Ú	enumerateÚexecuteÚfetchonery   rC   rB   ÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr,   ÚtimeÚsleepÚcommitÚclose)ÚconnÚcÚ	all_itemsrH   rI   rM   Útotal_pagesÚpgr0   Ú	new_countÚempty_countÚ	total_attÚidxÚitemÚdetailr:   rl   rS   rT   ÚplainÚsummaryÚatt_jsonÚ	date_rankr2   s                           r   Úmainr¨       s9  € Ü�?‰?œ2Ó€DØ�‰‹€Aà€Iô ”‹?€DÙÜÐ.´S·Z±ZÕ@Ü�‰�Œä˜$Ó€EÙÜÐ0´s·z±zÕBÜ�‰�Œä	ˆOœC ›J˜< vÐ
.´S·Z±ZÕ@Ø×Ñ�UÔô 	�	‰	Ð.°Ó5€AÙ%&”#�a—g‘g˜a“j”/¨B€KÜ	Ð   Ð
.´S·Z±ZÕ@å�;¤Ò(ÜˆÜÐ"¤7 )¨6Ð2¼¿¹ÕDô �A�{Ó#ò 	 ˆÜ�
œ8˜* F¨2¨$¨eÐ4ˆÜ�S‹zˆÙÙÜ˜dÓ#ˆÙÙÜ�˜R ™T˜F "¤S¨£Z L°Ð7¼c¿j¹jÕIØ×Ñ˜Õð	 ô 
ˆNœ3˜y›>Ð*¨,°{°mÀ6Ð
JÔQT×Q[ÑQ[Õ\à€IØ€KØ€Iä˜yÓ)ó 2‰	ˆˆTØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<Øà�‰7�aŠ<Ü�H˜S˜E ¤3 y£>Ð"2°"°T¸'±]À3ÀBÐ5GÐ4HÈÐLÔSV×S]ÑS]ÐcfÐnrÕsä�T˜%‘[Ó!ˆÙØ�Q‰w˜!Š|Ü�n¬3¯:©:Õ6Øä˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ˜]Ñ+ˆà�}‰}ŒØ˜1ÑˆKØ�Q‰w˜!Š|Ü�o¬C¯J©JÕ7Ùä—‘�v˜s GÓ,×2Ñ2Ó4ˆÙ!&�%˜˜‘+¨E°$°3¨KˆÙBM”4—:‘:˜k¸Õ>ÐSWˆàˆ	ÙÜ—	‘	Ð4°iÓ@ˆAÙÜ §¡¨£
¨Q¯W©W°Q«ZÑ 7¸!¿'¹'À!»*Ñ DÓE�	ð	9Ø�I‰Ið.ð œ	¤:¨t°E©{¸IÀwÐPWÐYaÐclÐmô	ð �z‰z˜AŠ~Ø˜Q‘�	ØœS Ó-Ñ-�	ô
 	�
‰
�3Žðe2ðh 	‡K�K„MØ‡J�J„Lä	ˆKœ	�{ " Y K¨v°k°]À(È9È+ÐUaÐ
bÕcøô ò 	9Ø�Q‰w˜!Š|Ü˜
 1 #Ð&¬S¯Z©ZÕ8ÿøð	9ús   ÏAQ8Ñ8	R1Ò&R,Ò,R1Ú__main__)r
   )"Ú__doc__r=   r.   Úosr�   r•   Úurllib.requestr   Úurllib.errorÚbs4r   rƒ   rE   rF   r‡   r’   r“   Úenvironr   r…   r(   r‹   r�   ÚargvÚir   rD   rŠ   r   r3   rO   ry   r¨   Ú__name__© r   r   ú<module>r´      sè   ðñ÷ × Ó ß #Ý Û à(€Ø€Ø�hÑ Ñ-€Ø$€	Ø€
Ø‡Z�Z‡^�^�KÐ!2Ó3€ØÐWÐ
X€à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó
òòò:O^òdfdðR ˆzÒÙ…Fð r   