Ë
    €Ûµjß+  ã                   ó¸   — 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mZm	Z	 d dl
m
Z
 dZdZdddd	œZdd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)é    N)ÚBeautifulSoupÚNavigableStringÚTag)Údatetimeu%   é�’é“œå³¡å¸‚äººæ°‘æ”¿åºœ-ç¤¾ä¼šä¿�éšœz)http://www.qtx.gov.cn/xxgk/zfxxgkml/shbz/zoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) 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-Languagec                 ó  — t        |«      D ]C  }	 t        j                  | t        d¬«      }d|_        |j
                  dk(  r|j                  c S ŒE y # t        $ r'}||dz
  k  rt        j                  d«       Y d }~Œrd }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8éÈ   é   é   )
ÚrangeÚrequestsÚgetÚHEADERSÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚretriesÚiÚrÚes        ú&/root/gov_crawler/crawl_qtxgov_shbz.pyÚfetchr      s{   € Ü�7‹^ò ˆð	Ü—‘˜S¬'¸2Ô>ˆAØ ˆAŒJØ�}‰} Ò#Ø—v‘v’ð $ð	ð øô ò 	Ø�7˜1‘9Š}Ü—
‘
˜1”ÿøð	ús   �=AÁ	BÁA>Á>Bc                  ó.  — t        t        «      } | st        d«       g S t        j                  d| «      }|rt        |j                  d«      «      nd}t        d|› �«       t        g}t        d|«      D ]  }|j                  t        d|› d�z   «       Œ  |S )u   èŽ·å�–åˆ—è¡¨é¡µæ‰€æœ‰URLu   ERROR: æ— æ³•èŽ·å�–é¦–é¡µz3createPageHTML\((\d+),\s*\d+,\s*"index",\s*"html"\)r   u   æ€»é¡µæ•°: Úindex_z.html)	r   ÚBASE_URLÚprintÚreÚsearchÚintÚgroupr   Úappend)ÚhtmlÚmÚtotal_pagesÚ	page_urlsr   s        r   Úget_page_urlsr-   !   s’   € ä”‹?€DÙÜÐ)Ô*Øˆ	ä
�	‰	ÐHÈ$ÓO€AÙ%&”#�a—g‘g˜a“j”/¨A€KÜ	ˆK˜�}Ð
%Ô&ä�
€IÜ�1�kÓ"ò 7ˆØ×Ñœ f¨Q¨C¨uÐ$5Ñ5Õ6ð7ð Ðó    c                 ó¢  — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]}  }|j                  d«      }|sŒ|j                  dd«      }|j	                  d	¬
«      }|j                  dd¬«      }|r|j	                  d	¬
«      nd}	|sŒg|sŒj|j                  |||	f«       Œ t        dt        |«      › d�«       |S )u   è§£æž�åˆ—è¡¨é¡µúhtml.parserÚulÚpageList©Úclass_ÚliÚaÚhrefÚ T©ÚstripÚspanr   u     åˆ—è¡¨é¡µè§£æž�: õ    æ�¡)r   ÚfindÚfind_allr   Úget_textr(   r#   Úlen)
r)   ÚitemsÚsoupr1   r5   r6   r7   Útitler;   Údates
             r   Ú
parse_listrE   2   sÓ   € à€EÜ˜˜}Ó-€DØ	�‰�4 
ˆÓ	+€BÙØˆà�k‰k˜$Óò 	.ˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆØ—
‘
 �
Ó&ˆØ�w‰w�v fˆwÓ-ˆÙ,0ˆt�}‰} 4ˆ}Ô(°bˆÚ’EØ�L‰L˜$  tÐ,Õ-ð	.ô 
Ð¤ E£
˜|¨4Ð
0Ô1Ø€Lr.   c                 ó  — g }| j                  d«      D ]Õ  }g }|j                  ddg«      D ]‚  }t        |j                  dd«      «      }|j                  d¬«      }|j                  dk(  rdnd}|j                  d|› d	|› d
|› d	�«       |dkD  sŒd|j                  d|› d|› d	�g|dz
  z  «       Œ„ t        d„ |D «       «      sŒ°|j                  ddj                  |«      z   dz   «       Œ× |rddj                  |«      z   dz   S y)uW   å°†HTMLè¡¨æ ¼æ¸²æŸ“ä¸ºåŽŸç”ŸHTML <table>ï¼ˆé�¿å…�markdownåº“ç®¡é�“è¡¨å…¼å®¹æ€§é—®é¢˜ï¼‰ÚtrÚtdÚthÚcolspanr   Tr9   ú<ú>z</z></c              3   ó    K  — | ]  }|–— Œ y ­w)N© )Ú.0Úcs     r   ú	<genexpr>z+render_table_to_markdown.<locals>.<genexpr>T   s   è ø€ Ò �QŒqÑ ùs   ‚z<tr>r8   z</tr>z<table>z</table>)	r>   r&   r   r?   Únamer(   ÚextendÚanyÚjoin)ÚtableÚrowsrG   ÚcellsrH   rJ   Ú	cell_textÚtags           r   Úrender_table_to_markdownr[   H   s  € à€DØ�n‰n˜TÓ"ò 
;ˆØˆØ—+‘+˜t T˜lÓ+ò 	CˆBÜ˜"Ÿ&™& ¨AÓ.Ó/ˆGØŸ™¨$˜Ó/ˆIØŸ'™' Tš/‘$¨tˆCØ�L‰L˜1˜S˜E  9 +¨R°¨u°AÐ6Ô7Ø˜‹{Ø—‘  #  c¨#¨¨aÐ0Ð1°W¸q±[ÑAÕBð	Cô Ñ ˜%Ô Õ Ø�K‰K˜ §¡¨£Ñ/°'Ñ9Õ:ð
;ñ Ø˜2Ÿ7™7 4›=Ñ(¨:Ñ5Ð5Ør.   c           	      ó  — g }| j                   D �]ñ  }t        |t        «      r$|j                  «       }|r|j	                  |«       Œ8t        |t
        «      sŒI|j                  dk(  rt        |«      }|r|j	                  |«       Œw|j                  dk(  rl|j                  dd«      }|rW|j                  dd«      }|j                  d«      r|n|j                  d«      rd|z   nd	}|r|j	                  d
|› d|› d�«       Œò|j                  dk(  �rÁ|j                  d«      r�Œ|j                  d«      }|r t        |«      }|r|j	                  |«       �ŒHg }	|j                   D �]5  }
t        |
t        «      r.t        |
«      j                  «       }|sŒ0|	j	                  |«       ŒBt        |
t
        «      sŒS|
j                  dk(  rV|
j                  dd«      }|
j                  d¬«      }|r|r|	j	                  d|› d|› d�«       Œ£|sŒ¦|	j	                  |«       Œ¸|
j                  dk(  r|	j	                  d«       ŒÙ|
j                  dv r(|
j                  d¬«      }|sŒü|	j	                  |«       �Œ|
j                  d¬«      }|s�Œ%|	j	                  |«       �Œ8 dj                  |	«      j                  «       }|r|j	                  |«       �ŒÃ|j                  dk(  s�ŒÔt        |«      }|r|j                  |«       �Œô |S )uI   ä»Žå†…å®¹å®¹å™¨ä¸­æ��å�–æ­£æ–‡ï¼Œè·³è¿‡è¡¨æ ¼å†…éƒ¨çš„pï¼ˆé�¿å…�é‡�å¤�ï¼‰rV   ÚimgÚsrcr8   ÚaltÚhttpú/úhttp://www.qtx.gov.cnNz![z](ú)Úpr6   r7   Tr9   ú[Úbrú
)r;   ÚstrongÚemÚbÚur   Údiv)ÚchildrenÚ
isinstancer   r:   r(   r   rR   r[   r   Ú
startswithr=   Ústrr?   rU   Úextract_content_textrS   )ÚelementÚblocksÚchildr   Úmdr^   r_   Úfull_srcÚinner_tableÚ
text_partsrP   Útr7   ÚtxtÚsubs                  r   rq   rq   [   s¶  € à€Fà×!Ñ!ó MˆÜ�eœ_Ô-Ø—;‘;“=ˆDÙØ—‘˜dÔ#Øä˜%¤Ô%Øð �:‰:˜Ò Ü)¨%Ó0ˆBÙØ—‘˜bÔ!Øð �:‰:˜ÒØ—)‘)˜E 2Ó&ˆCÙØ—i‘i  rÓ*�Ø"%§.¡.°Ô"8™3Ð`c×`nÑ`nÐorÔ`sÐ?VÐY\Ò?\Ðy}�ÙØ—M‘M B s e¨2¨h¨Z°qÐ"9Ô:Øð �:‰:˜Óà�z‰z˜#ŒÙð  Ÿ*™* WÓ-ˆKÙÜ-¨kÓ:�ÙØ—M‘M "Ô%Ùð ˆJØ—^‘^ó 1�Ü˜a¤Ô1Ü˜A›Ÿ™›�AÚØ"×)Ñ)¨!Õ,Ü ¤3Õ'Ø—v‘v ’}Ø Ÿu™u V¨RÓ0˜ØŸj™j¨t˜jÓ4˜Ù¡CØ&×-Ñ-°°#°°b¸¸¸aÐ.@ÕAÚ Ø&×-Ñ-¨cÕ2ØŸ™ 4šØ"×)Ñ)¨$Õ/ØŸ™Ð#JÑJØŸJ™J¨T˜JÓ2˜ÚØ&×-Ñ-¨aÖ0àŸJ™J¨T˜JÓ2˜ÛØ&×-Ñ-¨aÖ0ð-1ð0 —7‘7˜:Ó&×,Ñ,Ó.ˆDÙØ—‘˜dÔ#Ùð �:‰:˜ÔÜ& uÓ-ˆCÙØ—‘˜cÔ"Ùð[Mð^ €Mr.   c           
      óL  ‡— | j                  d«      r| }nr| j                  d«      r/t        j                  dd«      d   dz   | j                  d«      z   }n2| j                  d«      rd| z   }nt        j	                  d«      dz   | z   }t        |«      }|st        d|› �«       ||dg d	œS t        |d
«      }|}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|}|j                  dddi¬«      }	|	r$|	j                  d«      r|	d   j                  «       }d}
g }|j                  dd¬«      }|rt        |«      }dj                  |«      }
nC|j                  d«      D ]  }|j                  d¬«      }|sŒ|
|dz   z  }
Œ! |
j                  «       }
|j                  dt        j                   dt        j"                  «      ¬«      D ]—  }|j                  dd«      }|j                  d¬«      xs d}|j                  d«      r|n0|j                  d«      rd|z   n|j                  dd«      d   dz   |z   Št%        ˆfd„|D «       «      rŒ„|j'                  |‰dœ«       Œ™ t        j(                  d d!|
«      j                  «       }|d"d# }|r|d"d$ nd}d}|r0	 t+        j,                  |d%«      }t/        |j1                  «       «      }t        d&|d"d' › d(|› d)t3        |
«      › d*�«       |||
|t5        j6                  |d+¬,«      ||d-œS #  Y ŒDxY w).u   è§£æž�è¯¦æƒ…é¡µr`   z../ra   r   r   rb   u     ERROR: æ— æ³•èŽ·å�–è¯¦æƒ…é¡µ r8   )rC   rD   ÚcontentÚattachmentsr0   ÚmetarR   ÚArticleTitle)Úattrsr}   ÚPubDaterl   Ú
xl_con_conr3   z

rd   Tr9   r6   z"\.(doc|docx|pdf|xls|xlsx|rar|zip)$)r7   r7   u   é™„ä»¶r   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r   NrN   )rO   r6   Ú	full_hrefs     €r   rQ   zparse_detail.<locals>.<genexpr>é   s   øè ø€ Ò>¨Q�1�U‘8˜yÕ(Ñ>ùs   ƒ)rR   r   z\s+ú Nr   é
   z%Y-%m-%dz  OK: é   z... | z | content=rP   F)Úensure_ascii)rC   rD   r}   Úsummaryr~   Ú	date_rankÚ
source_url)ro   r"   ÚrsplitÚlstripÚrstripr   r#   r   r=   r   r:   rq   rU   r>   r?   r$   ÚcompileÚIrT   r(   r{   r   Ústrptimer&   Ú	timestampr@   ÚjsonÚdumps)r7   Ú
list_titleÚ	list_dater   r)   rB   rC   Ú
meta_titlerD   Ú	meta_dater}   r~   Úcontent_divrs   rd   r   Úa_tagÚa_hrefÚa_textÚclean_contentrŠ   Údate_parsedr‹   Údtr…   s                           @r   Úparse_detailr¡   °   sr  ø€ à‡��vÔØ‰Ø	�‰˜Ô	Ü�o‰o˜c 1Ó% aÑ(¨3Ñ.°·±¸UÓ1CÑC‰Ø	�‰˜Ô	Ø%¨Ñ,‰ä�o‰o˜cÓ" SÑ(¨4Ñ/ˆä�‹:€DÙÜÐ/°¨uÐ5Ô6àØØØñ	
ð 	
ô ˜˜}Ó-€Dð €EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆð €DØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜Ñ#×)Ñ)Ó+ˆð €GØ€Kà—)‘)˜E¨,�)Ó7€KÙÜ% kÓ2ˆØ—+‘+˜fÓ%‰ð —‘˜sÓ#ò 	)ˆAØ—:‘: D�:Ó)ˆDÚØ˜4 &™=Ñ(‘ð	)ð —-‘-“/ˆð —‘˜s¬¯©Ð4YÔ[]×[_Ñ[_Ó)`�Óaò CˆØ—‘˜6 2Ó&ˆØ—‘ d�Ó+Ò7¨xˆØ$×/Ñ/°Ô7‘FÐbh×bsÑbsÐtwÔbxÐ>UÐX^Ò>^ð  B÷  Iñ  Ið  JMð  OPó  Qð  RSñ  Tð  WZñ  Zð  ]cñ  cˆ	äÓ>°+Ô>Õ>Ø×Ñ¨°yÑAÕBðCô —F‘F˜6 3¨Ó0×6Ñ6Ó8€MØ˜D˜SÐ!€Gñ  $�$�s˜‘)¨€KØ€IÙð	Ü×"Ñ" ;°
Ó;ˆBÜ˜BŸL™L›NÓ+ˆIô 
ˆF�5˜˜"�:�,˜f [ M°¼SÀ»\¸NÈ!Ð
LÔMàØØØÜ—z‘z +¸EÔBØØñð øð		Ùús   Ê0/L ÌL#c                  óR  — t        dt        › d�«       t        «       } t        dt        | «      › d�«       g }| D ]A  }t	        |«      }|sŒt        |«      }t        j                  d«       |j                  |«       ŒC t        dt        |«      › d�«       t        j                  j                  d«      rd}nd	}d
d l}|j                  |d¬«      }|j                  d«       |j                  «       }|j!                  «        t        dt        › d�«       d
}	|D ]¿  \  }
}}t#        |
||«      }|j                  d|j%                  dd«      |d   |j%                  dd«      |j%                  dd«      |j%                  dd«      t        |j%                  dd«      |j%                  dd
«      |j%                  dd«      f	«       |	dz  }	t        j                  d«       ŒÁ |j!                  «        t        d|	› d�«       |j                  dt        f«       |j'                  «       d
   }|j                  dt        f«       |j'                  «       d
   }|j)                  «        t        d|› d|› �«       t        d «       t        t+        j,                  t        d!t.        d"d#œd$d%¬&«      «       y )'Nz=== u    çˆ¬è™« (fixç‰ˆ) ===u   å…± u
    é¡µå¾…çˆ¬r   u
   åˆ—è¡¨å…± r<   z/root/search.dbz/mnt/data/search.dbr   é<   )r   zPRAGMA busy_timeout=60000u
   å·²æ¸…ç�† u
    æ—§æ•°æ�®zÝ
            INSERT OR REPLACE INTO gov_raw (page_url, title, publish_date, content, summary, site_name, attachments, date_rank, source_url, script_name) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, 'crawl_qtxgov_shbz.py')
        rŒ   r8   rC   rD   r}   rŠ   r~   z[]r‹   g      ø?u   å…¥åº“ z.SELECT COUNT(*) FROM gov_raw WHERE site_name=?z1SELECT COUNT(*) FROM gov_search WHERE site_name=?u   éªŒè¯�: gov_raw=z, gov_search=u   
é…�ç½®æ�¡ç›®:zcrawl_qtxgov_shbz.pyu   å®�å¤�)rR   Úscriptr   r'   Fr   )r‰   Úindent)r#   Ú	SITE_NAMEr-   r@   r   rE   r   r   rS   ÚosÚpathÚexistsÚsqlite3ÚconnectÚexecuteÚcursorÚcommitr¡   r   ÚfetchoneÚcloser”   r•   r"   )r,   Ú	all_itemsÚpage_urlr)   rA   Údb_pathrª   ÚconnrP   Úcountr7   r–   r—   ÚdetailÚ	raw_countÚsearch_counts                   r   Úmainr¹     sh  € Ü	ˆD”�Ð/Ð
0Ô1ä“€IÜ	ˆD”�Y“Ð  
Ð
+Ô,à€IØò  ˆÜ�X‹ˆÙØÜ˜4Ó ˆÜ�
‰
�1ŒØ×Ñ˜Õð ô 
ˆJ”s˜9“~Ð& dÐ
+Ô,ô 
‡w�w‡~�~Ð'Ô(Ø#‰à'ˆãØ�?‰?˜7¨Bˆ?Ó/€DØ‡L�LÐ,Ô-Ø�‰‹€Að
 	‡K�K„MÜ	ˆJ”y�k Ð
,Ô-à€EØ'0ò Ñ#ˆˆj˜)Ü˜d J°	Ó:ˆà	�	‰	ð ð �J‰J�| RÓ(Ø�7‰OØ�J‰J�v˜rÓ"Ø�J‰J�y "Ó%Ø�J‰J�y "Ó%ÜØ�J‰J�} dÓ+Ø�J‰J�{ AÓ&Ø�J‰J�| RÓ(ð

ô	ð 	�‰
ˆÜ�
‰
�3�ð#ð& 	‡K�K„MÜ	ˆG�E�7˜$Ð
Ô ð ‡I�IÐ>ÄÀÔMØ—
‘
“˜Q‘€IØ‡I�IÐAÄIÀ<ÔPØ—:‘:“< ‘?€Là‡J�J„LÜ	Ð˜Y˜K }°\°NÐ
CÔDä	ˆOÔÜ	Œ$�*‰*ÜØ(ÜØñ	ð
  !ô%õ &r.   Ú__main__)é   )r§   r   r$   r   r”   ÚsysÚbs4r   r   r   r   r¦   r"   r   r   r-   rE   r[   rq   r¡   r¹   Ú__name__rN   r.   r   ú<module>r¿      s{   ðã 	ð÷
 )× (× (ß 3Ñ 3Ý à3€	Ø6€ð DØOØ0ñ€ó
òò"ò,ò&SòjSòjH&ðT ˆzÒÙ…Fð r.   