Ë
    ¸¬uj&-  ã                   ó  — 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ZdZdZdZdZd	Zd
dddœZdZ eej,                  «      D ]k  \  ZZej3                  d«      r	  eej7                  dd«      d   «      ZŒ4edk(  sŒ:edz    eej,                  «      k  sŒS	  eej,                  edz      «      ZŒm edk\  rendZd„ Zdd„Z d„ Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&e'dk(  r e&«        yy# e$ r dZY ŒÍw xY w# e$ r Y Œ²w xY w# e$ r Y Œ½w xY w)u˜  
å…°é™µåŽ¿äººæ°‘æ”¿åºœ - å»ºè®¾é¡¹ç›®çŽ¯å¢ƒå½±å“�è¯„ä»·å®¡æ‰¹ (lanling.gov.cn/zwgk/fdgkzynr/zdly1/sthj/jsxmhjyxpj.htm)
CMS: è¥¿å®‰å�šè¾¾ (system/resource + vsb_content)
åˆ—è¡¨: é�™æ€� HTML, ul.list-text>li>a>h2>p æ ‡é¢˜ + div.info>span å�‘å¸ƒæ—¥æœŸ YYYY/MM/DD
      15æ�¡/é¡µ, åˆ†é¡µ jsxmhjyxpj/N.htm (N=1..12, é¦–é¡µ=jsxmhjyxpj.htm)
è¯¦æƒ…: div.vsb_content æ­£æ–‡ (å�šè¾¾æ ‡å‡†), æ—¥æœŸå�–é¡µé�¢ YYYY-MM-DD
é    N)ÚBeautifulSoupzhttps://www.lanling.gov.cnz$/zwgk/fdgkzynr/zdly1/sthj/jsxmhjyxpju"   å…°é™µåŽ¿-å»ºè®¾é¡¹ç›®çŽ¯è¯„å®¡æ‰¹u   å±±ä¸œzcrawl_lanling_hjxpj.pyz/mnt/data/search.dbzkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languageé   z--pages=ú=z--pagesc                 ó  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } | j                  «       S )NÚ u   â€‹u   â€Œu   â€�u   ï»¿ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú(/root/gov_crawler/crawl_lanling_hjxpj.pyÚclean_titler   5   so   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 óJ  — dd l }d }t        |«      D ]d  }	 |xs |j                  | t        |¬«      }|j                  dk(  r|j
                  xs d|_        |c S |}t        j                  d|dz   z  «       Œf t        |t        «      r|‚|S # t        $ r}|}Y d }~ŒAd }~ww xY w)Nr   )ÚheadersÚtimeoutéÈ   úutf-8g      ø?r   )ÚrequestsÚrangeÚgetÚHEADERSÚstatus_codeÚapparent_encodingÚencodingÚ	ExceptionÚtimeÚsleepÚ
isinstance)	ÚurlÚsessionr   Úretriesr   ÚlastÚiÚrÚes	            r   Úfetchr,   >   s©   € ÛØ€DÜ�7‹^ò 	"ˆð	ØÒ$˜H×)Ñ)¨#´wÈÐ)ÓPˆAØ�}‰} Ò#Ø×0Ñ0Ò;°G�”
Ø’ØˆDô 	�
‰
�3˜!˜a™%‘=Õ!ð	"ô �$œ	Ô"Øˆ
Ø€Køô ò 	Ø�Dûð	ús   –ABÁBÂ	B"ÂBÂB"c                 óª   — |dk(  rt         t        z   dz   }nt         t        z   d|› d�z   }t        || ¬«      }|j                  j	                  dd¬«      S )Nr   z.htmú/©r&   r   r   ©Úerrors)ÚBASE_URLÚ	LIST_BASEr,   ÚcontentÚdecode)r&   Úpager%   r*   s       r   Ú
fetch_listr7   P   sU   € Øˆq‚yÜœÑ" VÑ+‰äœÑ" q¨¨¨d ^Ñ3ˆÜˆc˜7Ô#€AØ�9‰9×Ñ˜G¨IÐÓ6Ð6r   c                 óÆ  — g }t        j                  d| t         j                  «      D ]¶  }|j                  d«      |j                  d«      |j                  d«      j	                  «       }}}t
        j                  j                  t        |«      }t        |«      }|j                  dd«      }t        j                  d|«      sd}|sŒ |sŒ£|j                  |||f«       Œ¸ |S )	NuU   <a href="([^"]+)"[^>]*>\s*<h2>\s*<p>([^<]*)</p>.*?<span>å�‘å¸ƒæ—¥æœŸï¼š([^<]*)</span>r   é   é   r.   ú-z^\d{4}-\d{2}-\d{2}$r   )r   ÚfinditerÚSÚgroupr   ÚurllibÚparseÚurljoinr2   r   r   ÚmatchÚappend)Ú	html_textÚitemsÚmÚhrefÚtitleÚdateÚabs_urls          r   Ú
parse_listrK   Y   s¾   € Ø€EÜ�[‰[Ø`Ø”2—4‘4óò 1ˆð ŸG™G A›J¨¯©°«
°A·G±G¸A³J×4DÑ4DÓ4F�TˆeˆÜ—,‘,×&Ñ&¤x°Ó6ˆÜ˜EÓ"ˆØ�|‰|˜C Ó%ˆÜ�x‰xÐ.°Ô5ØˆDÚ’WØ�L‰L˜' 5¨$Ð/Õ0ð1ð €Lr   c           	      ó¬  — d}d}d}t         r‘t        | d«      }|j                  d«      }|r3t        |j                  dd¬«      «      }t	        j
                  dd|«      }|j                  d¬	«      }|j                  d
¬«      }|rt        |«      }n|rt        |«      }|sXt	        j                  d| t        j                  «      }	|	r1t        |	j                  d«      «      }t	        j
                  dd|«      }|s8t	        j                  d| t        j                  «      }	|	r|	j                  d«      }|s8t	        j                  d| t        j                  «      }	|	r|	j                  d«      }|sct	        j                  d| «      }	|	rK|	j                  d«      › dt        |	j                  d«      «      d›dt        |	j                  d«      «      d›�}|||fS )Nr   úhtml.parserrH   r
   T)r   u    \s*-\s*å…°é™µåŽ¿äººæ°‘æ”¿åºœ\s*$zread-content-wrap)Úclass_Úvsb_content)Úidz<title>([^<]*)</title>r   z=<div[^>]*class="[^"]*read-content-wrap[^"]*"[^>]*>(.*?)</div>r   z*<div[^>]*id="vsb_content"[^>]*>(.*?)</div>z#(20\d{2})[-/](\d{1,2})[-/](\d{1,2})r;   r9   Ú02dr:   )r   Úfindr   Úget_textr   r   ÚstrÚsearchr=   r>   Úint)
rD   Úpage_urlrH   rI   Úcontent_htmlÚsoupr   ÚrcwÚvsbrF   s
             r   Úparse_detailr\   j   s‘  € Ø€EØ€DØ€LÝÜ˜Y¨Ó6ˆØ�I‰I�gÓˆÙÜ §
¡
¨3°d 
Ó ;Ó<ˆEÜ—F‘FÐ>ÀÀEÓJˆEà�i‰iÐ2ˆiÓ3ˆØ�i‰i˜=ˆiÓ)ˆÙÜ˜s›8‰LÙÜ˜s›8ˆLÙÜ�I‰IÐ/°¼B¿D¹DÓAˆÙÜ §¡¨£
Ó+ˆEÜ—F‘FÐ>ÀÀEÓJˆEÙÜ�I‰IÐVÐXaÔce×cgÑcgÓhˆÙØŸ7™7 1›:ˆLÙÜ�I‰IÐCÀYÔPR×PTÑPTÓUˆÙØŸ7™7 1›:ˆLáÜ�I‰IÐ<¸iÓHˆÙØ—g‘g˜a“j�\ ¤3 q§w¡w¨q£z£?°3Ð"7°q¼¸Q¿W¹WÀQ»Z»ÈÐ8MÐNˆDØ�$˜Ð$Ð$r   c           
      óÀ	  ‡‡‡‡— | sddg fS t        j                  dd| t         j                  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        j                  dd| t         j                  t         j                  z  ¬«      } t        rQ	 t	        | d«      }|j                  d«      D ]%  }d	D ]  }|j                  j                  |d «       Œ  Œ' t        |«      } | }t        j                  d
d|t         j                  ¬«      }g Ši Šˆˆˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }g Šˆfd„}t        j                  d||t         j                  t         j                  z  ¬«      }t        j                  d| t         j                  «      rdnd}t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }t        j                  dd|t         j                  ¬«      }g }	|j                  d«      D ]ï  }
|
j                  «       }|sŒt        j                  dd|«      }t        j                  |«      }|j                  dd«      j                  dd«      }t        j                  dd|«      }|sŒ~‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ |	j%                  |j                  «       «       Œñ dj'                  |	«      }‰j!                  «       D ]  \  }}|j                  ||«      }Œ t#        ‰«      D ]  \  }}|j                  d|› d�|«      }Œ t        j                  dd|«      }t        j                  dd|«      }t        j                  |«      }t        j                  d d|«      }t        j                  d!d|«      }t        j                  d"d|«      }t)        «       }g }|j                  d«      D ]X  }t        j                  d#dt        j                  dd|«      «      }|sŒ2||v rŒ7|j+                  |«       |j%                  |«       ŒZ dj'                  |«      j                  «       }||‰fS # t        $ r Y �Œâw xY w)$Nr   r   z
<!--.*?-->)Úflagsz<script[^>]*>.*?</script>z<style[^>]*>.*?</style>rM   T)ÚstyleÚclassÚlangÚdirÚalignÚvalignÚwidthÚheightÚborderÚcellpaddingÚcellspacingz;<img[^>]*src="[^"]*fileTypeImages/icon_[a-z]+\.gif"[^>]*/?>c                 ó  •— | j                  d«      }| j                  d«      }t        j                  dd|«      }t        j                  |«      j                  «       }t        j                  dd|«      j                  «       }|s5t        j                  j                  |j                  d«      d   «      xs d}t        j                  j                  ‰|«      }‰j                  ||f«       d	t        ‰«      › d
�}d|› d|› d�‰|<   |S )Nr   r9   ú<[^>]+>r   u   ^é™„ä»¶[:ï¼š]\s*ú?r   u   é™„ä»¶Ú__LINK__Ú__z	<a href="z" target="_blank">z</a>)r>   r   r   r   r   r   ÚosÚpathÚbasenameÚsplitr?   r@   rA   rC   Úlen)	rF   rG   ÚinnerÚtxtrJ   ÚkeyÚattachmentsÚlink_protectrW   s	         €€€r   Ú
_link_replz html_to_text.<locals>._link_repl§   sè   ø€ Ø�w‰w�q‹zˆØ—‘˜“
ˆÜ�f‰f�Z  UÓ+ˆÜ×Ñ Ó$×*Ñ*Ó,ˆÜ�f‰fÐ(¨"¨cÓ2×8Ñ8Ó:ˆÙÜ—'‘'×"Ñ" 4§:¡:¨c£?°1Ñ#5Ó6ÒB¸(ˆCÜ—,‘,×&Ñ& x°Ó6ˆØ×Ñ˜G S˜>Ô*Øœ˜\Ó*Ð+¨2Ð.ˆØ'¨ yÐ0BÀ3À%ÀtÐLˆ�SÑØˆ
r   z&<a\s[^>]*href="([^"]+)"[^>]*>(.*?)</a>c                 óh   •— ‰j                  | j                  d«      «       dt        ‰«      dz
  › d�S )Nr   Ú__TBL__r   rn   )rC   r>   rs   )rF   Útable_protects    €r   Ú	_tbl_replzhtml_to_text.<locals>._tbl_repl·   s3   ø€ Ø×Ñ˜QŸW™W Q›ZÔ(Øœ˜]Ó+¨AÑ-Ð.¨bÐ1Ð1r   z<table[^>]*>.*?</table>z<table[^>]*>r   z</p>z</p>

z	<br\s*/?>ú
z(</?(?:span|font|o:p|st1?:[a-z]+)\b[^>]*>z

rk   õ   Â r
   z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+r{   rn   z__LINK__\d+__z__TBL__\d+__z[ \t]+\nz\n{3,}z	[ \t]{2,}r	   )r   r   r=   ÚIr   Úfind_allÚattrsÚpoprT   r!   rU   rr   r   r   r   r   rE   Ú	enumeraterC   ÚjoinÚsetÚadd)r4   rW   Ú_soupÚtagÚattrÚcontent2ry   r}   Ú	has_tableÚpartsÚblockÚbÚplainÚkÚvr)   ÚtblÚoutÚseenÚfinalÚprv   rw   rx   r|   s    `                    @@@r   Úhtml_to_textr˜   �   s+  û€ ÙØ�1�bˆyÐÜ�f‰f�] B¨´r·t±tÔ<€GÜ�f‰fÐ1°2°wÄbÇdÁdÌRÏTÉTÁkÔR€GÜ�f‰fÐ/°°WÄBÇDÁDÌ2Ï4É4ÁKÔP€GÝð	Ü! '¨=Ó9ˆEØ—~‘~ dÓ+ò .�ð Lò .�DØ—I‘I—M‘M $¨Õ-ñ.ð.ô ˜%“jˆGð €HÜ�v‰vØFÈÈHÜ�d‰dô€Hð €KØ€Löô �v‰vÐ?ÀÈXÔ]_×]aÑ]aÔdf×dhÑdhÑ]hÔi€Hà€Mô2ô �v‰vÐ0°)¸XÌRÏTÉTÔTV×TXÑTXÉ[ÔY€HÜ—Y‘Y˜°¼¿¹Ô>‘ÀA€Iä�v‰v�g˜z¨8¼2¿4¹4Ô@€HÜ�v‰v�l D¨(¼"¿$¹$Ô?€HÜ�v‰vÐAÀ2ÀxÔWY×W[ÑW[Ô\€Hà€EØ—‘ Ó'ò  ˆØ�K‰K‹MˆÙØÜ—‘�z 2 qÓ)ˆÜ×!Ñ! %Ó(ˆØ—‘˜f cÓ*×2Ñ2°8¸SÓAˆÜ—‘Ð7¸¸UÓCˆÙØØ ×&Ñ&Ó(ò 	 ‰DˆAˆqØ—	‘	˜!˜Q“‰Að	 ä Ó.ò 	0‰FˆAˆsØ—	‘	˜G A 3 b˜/¨3Ó/‰Að	0à�‰�Q—W‘W“YÕð ð  �+‰+�eÓ
€CØ×"Ñ"Ó$ò  ‰ˆˆ1Ø�k‰k˜!˜QÓ‰ð ä˜MÓ*ò 0‰ˆˆ3Ø�k‰k˜G A 3 b˜/¨3Ó/‰ð0ô �&‰&Ð! 2 sÓ
+€CÜ
�&‰&� " cÓ
*€Cä
×
Ñ
˜CÓ
 €CÜ
�&‰&�˜d CÓ
(€CÜ
�&‰&�˜F CÓ
(€CÜ
�&‰&�˜s CÓ
(€Cä‹5€DØ€EØ�Y‰Y�vÓò ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÙØØ�$‰;ØØ�‰�ŒØ�‰�Q�ðð �+‰+�eÓ
×
"Ñ
"Ó
$€Cà�	˜;Ð&Ð&øô_ ò 	Úð	ús   Â*AS Ó	SÓSc                 ó”  — | j                  d|f«      }|j                  «       ry	 d}	 ddlm}  ||«      }| j                  d|||||t
        t        t        ||f
«      }|j                  dkD  ryt        j                  dd|«      }	t        j                  |	«      }	t        j                  d	d
|	«      j                  «       d d }	| j                  d|j                  |t
        |	f«       yy# t        $ r Y Œ¼w xY w# t        j                   $ r=}
dt#        |
«      v r*t%        j&                  d«       t)        | |||||«      cY d }
~
S ‚ d }
~
ww xY w)Nz'SELECT id FROM gov_raw WHERE page_url=?FÚotherr   )Úclassify_industryz¨INSERT OR IGNORE INTO gov_raw (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, industry) VALUES (?,?,?,?,?,?,?,?,?,?)rk   r   r	   r
   r   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedr:   )ÚexecuteÚfetchoneÚcrawler_libr›   r!   Ú	SITE_NAMEÚ
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorrT   r"   r#   Ústore_record)Úconnr%   rH   r4   rI   rŒ   ÚcurÚindustryr›   Úsummaryr+   s              r   r§   r§   ï   sA  € Ø
�,‰,Ð@À3À&Ó
I€CØ
‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHð �l‰lð+ð �#�u˜g t¬Y¼
ÄKÐQZÐ\dÐeó	
ˆð �<‰<˜!ÒÜ—f‘f˜Z¨¨WÓ5ˆGÜ×'Ñ'¨Ó0ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGØ�L‰LØfØ—‘ ¤y°'Ð:ôð Øøô# ò 	Ùð	ûô$ ×#Ñ#ò Ø”s˜1“vÑÜ�J‰J�qŒMÜ  c¨5°'¸4ÀÓKÕKØûð	úsF   ¦C7 ©C( ·B/C7 Ã(	C4Ã1C7 Ã3C4Ã4C7 Ã7EÄ
1EÄ;EÅEÅEc            
      ó^  — dd l } | j                  «       }|j                  j                  t        «       t        j                  t        d¬«      }|j                  d«       |j                  d«       d}d}t        «       }t        dt        dz   «      D �]j  }	 t        ||«      }t        |«      }	t        d|› dt!        |	«      › d�d	¬
«       |	st        dd	¬
«        �n#|	D �]  \  }
}}|
|v rŒ|j#                  |
«       	 t%        |
|¬«      }|j&                  j)                  dd¬«      }t+        ||
«      \  }}}|s|}|s|}t-        ||
«      \  }}}t!        t/        j0                  dd|«      j3                  «       «      }|dk  rt        d|d d › �d	¬
«       |dz  }Œ½t5        ||
||||«      }|r|dz  }t        d|d d › d|› d�d	¬
«       n|dz  }t7        j8                  d«       �Œ t7        j8                  d«       �Œm |j;                  «        |j=                  «        t        d|› �d	¬
«       t        d |› �d	¬
«       t        d!t>        › d"�d	¬
«       y # t        $ r}t        d|› d|› �d	¬
«       Y d }~ Œxd }~ww xY w# t        $ r#}t        d|
› d|› �d	¬
«       |dz  }Y d }~�ŒÈd }~ww xY w)#Nr   é<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr   zPage z fetch error: T)Úflushz: found z itemszEmpty page, stop paginationr/   r   r   r0   z  detail error z: rk   r   é
   z  skip empty: é   z  + é(   z (ú)g333333Ó?g      à?u   æ–°å¢ž: u   è·³è¿‡: z=== z	 done ===) r   ÚSessionr   Úupdater   r¥   ÚconnectÚDB_PATHr�   r†   r   Ú_PAGESr7   r!   ÚprintrK   rs   r‡   r,   r4   r5   r\   r˜   r   r   r   r§   r"   r#   ÚcommitÚcloser    )r   Úsr¨   Ú	new_countÚ
skip_countÚ	seen_urlsr6   rD   r+   rE   rJ   rH   rI   r*   ÚdhtmlÚdtitleÚddaterX   r4   rŒ   Ú_Ú	plain_lenÚoks                          r   ÚmainrÅ     sª  € ÛØ×ÑÓ€AØ‡I�I×Ñ”WÔÜ�?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+à€IØ€JÜ“€Iä�aœ !™Ó$ó (ˆð	Ü" 1 dÓ+ˆIô ˜9Ó%ˆÜ��d�V˜8¤C¨£J <¨vÐ6¸dÕCÙÜÐ/°tÕ<ÚØ$)ó 	Ñ ˆG�U˜DØ˜)Ñ#ØØ�M‰M˜'Ô"ðÜ˜'¨1Ô-�ØŸ	™	×(Ñ(¨¸Ð(ÓC�ô
 +7°u¸gÓ*FÑ'ˆF�E˜<ÙØ�ÙØ�Ü$0°¸wÓ$GÑ!ˆG�Y ÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIØ˜2Š~Ü˜ v¨c¨r { mÐ4¸DÕAØ˜a‘�
ØÜ˜d G¨V°W¸eÀYÓOˆBÙØ˜Q‘�	Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸DÖAà˜a‘�
Ü�J‰J�sŽOð9	ô: 	�
‰
�3ŽðQ(ðT 	‡K�K„MØ‡J�J„LÜ	ˆH�Y�KÐ
 ¨Õ-Ü	ˆH�Z�LÐ
!¨Õ.Ü	ˆD”�˜9Ð
%¨TÖ2øôW ò 	Ü�E˜$˜˜~¨a¨SÐ1¸Õ>Ýûð	ûô ò Ü˜¨ y°°1°#Ð6¸dÕCØ˜a‘�
Ýûðús0   ÂIÃ>*J É	I=ÉI8É8I=Ê 	J,Ê	J'Ê'J,Ú__main__)Nr°   r:   )(Ú__doc__Úsysro   r   r"   Úhtmlr   Úurllib.parser?   r¥   Úbs4r   ÚImportErrorr2   r3   r    r¡   r¢   r¶   r   Ú
_MAX_PAGESr„   Úargvr)   ÚaÚ
startswithrV   rr   Ú
ValueErrorrs   r·   r   r,   r7   rK   r\   r˜   r§   rÅ   Ú__name__© r   r   ú<module>rÔ      sm  ðñó Û 	Û 	Û Û Û Û ðÝ!ð
 (€Ø2€	Ø0€	Ø€
Ø&€Ø
€ð @ØOØ'ñ€ð €
Ù�c—h‘hÓò 
�D€A€qØ‡|�|�JÔð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆi‹˜A ™E¡C¨¯©£MÓ1ð	Ù˜SŸX™X a¨!¡e™_Ó-‰Jð
ð " Q’‰¨A€òóò$7òò"#%òL\'ò~òD:3ðz ˆzÒÙ…Fð øðu	 ò Ø‚Mðûð, ò 	Ùð	ûð
 ò 	Ùð	ús5    C* Á$C7Â DÃ*C4Ã3C4Ã7C?Ã>C?ÄD
Ä	D
