Ë
    ¸¬ujb.  ã                   ó®  — 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
Z
 e
j                  d«       	 ddlmZ ddlZddlmZ ej$                  j&                  j)                  e«       dZdZdZd	Zd
Zedz   ZdZdddddedœZdZ eej>                  «      D ]k  \  Z Z!e!jE                  d«      r	  e#e!jI                  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„ 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“  
æ¸ åŽ¿äººæ°‘æ”¿åºœ - å…¬ç¤ºå…¬å‘Š (www.quxian.gov.cn/xxgk-list-gsgg-133.html)
PHP CMS (jsx ajax)
åˆ—è¡¨: POST https://www.quxian.gov.cn/api-ajax_list-{page}.html
  bodyå›ºå®š: ajax_type[]=44_xxgk&ajax_type[]=42&ajax_type[]=44&ajax_type[]=xxgk&ajax_type[]=Y-m-d&ajax_type[]=36&ajax_type[]=20&ajax_type[7][]=is_top DESC&ajax_type[7][]=displayorder ASC&ajax_type[7][]=inputtime DESC&ajax_type[8]=&is_ds=1
  è¿”å›žJSON: data[].url=xxgk-show-{id}.html / title / inputtime, total=849 (43é¡µ)
è¯¦æƒ…: xxgk-show-{id}.html, meta ArticleTitle + div#content æ­£æ–‡ (div.file-content.scroll_main å†…)
æ³¨æ„�: SSLè¯�ä¹¦é—®é¢˜éœ€ verify=False; æ ‡é¢˜å�¯èƒ½å¸¦é›¶å®½å­—ç¬¦
é    NÚignore)ÚBeautifulSoup)ÚInsecureRequestWarningzhttps://www.quxian.gov.cnu   æ¸ åŽ¿-å…¬ç¤ºå…¬å‘Šu   å››å·�zcrawl_quxian_gsgg.pyz/mnt/data/search.dbz/xxgk-list-gsgg-133.htmla  ajax_type%5B%5D=44_xxgk&ajax_type%5B%5D=42&ajax_type%5B%5D=44&ajax_type%5B%5D=xxgk&ajax_type%5B%5D=Y-m-d&ajax_type%5B%5D=36&ajax_type%5B%5D=20&ajax_type%5B7%5D%5B%5D=is_top+DESC&ajax_type%5B7%5D%5B%5D=displayorder+ASC&ajax_type%5B7%5D%5B%5D=inputtime+DESC&ajax_type%5B8%5D=&is_ds=1zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0 Safari/537.36z.application/json, text/javascript, */*; q=0.01zzh-CN,zh;q=0.9z0application/x-www-form-urlencoded; charset=UTF-8ÚXMLHttpRequest)z
User-AgentÚAcceptzAccept-LanguagezContent-TypezX-Requested-WithÚRefereré   z--pages=ú=z--pagesc                 óv  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } | j                  dd«      j                  dd«      } t        j                  d	d| «      } t        j                  d
d| «      } | j                  «       S )NÚ u   â€‹u   â€Œu   â€�u   ï»¿õ   Â ú u   ã€€u   ^[\sÂ·\u00b7ã€€]+ú\s+)Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    ú&/root/gov_crawler/crawl_quxian_gsgg.pyÚclean_titler   H   sŸ   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AØ	�	‰	�&˜#Ó×&Ñ& x°Ó5€Aä
�‰Ð# R¨Ó+€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c                 óv   — t         › d|› d�}| j                  |t        t        dd¬«      }|j	                  «       S )Nz/api-ajax_list-z.htmlé   F)ÚdataÚheadersÚtimeoutÚverify)ÚBASE_URLÚpostÚ	LIST_BODYÚHEADERSÚjson)ÚsessionÚpageÚurlÚrs       r   Ú
fetch_listr)   T   s7   € ÜˆJ�o d V¨5Ð
1€CØ�‰�Sœy´'À2ÈeˆÓT€AØ�6‰6‹8€Or   c                 óR  — g }| j                  dg «      D ]�  }|j                  dd«      }t        |j                  dd«      «      }|j                  d«      xs dj                  «       }|r|sŒXt        j                  j                  t        |«      }|j                  |||f«       Œ‘ |S )Nr   r'   r   ÚtitleÚ	inputtime)Úgetr   r   ÚurllibÚparseÚurljoinr    Úappend)r   ÚitemsÚitÚur+   ÚdateÚabs_urls          r   Ú
parse_listr7   Z   sš   € Ø€EØ�h‰h�v˜rÓ"ò -ˆØ�F‰F�5˜"ÓˆÜ˜BŸF™F 7¨BÓ/Ó0ˆØ—‘�{Ó#Ò) r×0Ñ0Ó2ˆÙ™ØÜ—,‘,×&Ñ&¤x°Ó3ˆØ�‰�g˜u dÐ+Õ,ð-ð €Lr   c                 ó4  — d}d}d}t         �rNt        | d«      }|j                  ddt        j                  dt        j                  «      i¬«      }|r|j                  d«      rt        |d   «      }|j                  ddt        j                  dt        j                  «      i¬«      }|rM|j                  d«      r<|d   j                  «       }t        j                  d	|«      }	|	r|	j                  d
«      }|j                  dd¬«      }
|
rt        |
«      }|sB|j                  dt        j                  dt        j                  «      ¬«      }|rt        |«      }|sAt        j                  d| t        j                  «      }|rt        |j                  d«      «      }|sIt        j                  d| t        j                  t        j                  z  «      }|r|j                  d
«      }|s)t        j                  d	| «      }|r|j                  d
«      }|||fS )Nr   úhtml.parserÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4})-(\d{2})-(\d{2})r   Údiv)Úidzfile-content)Úclass_z5<meta\s+name="\s*ArticleTitle\s*"\s+content="([^"]*)"r	   z/<div[^>]*id="content"[^>]*>(.*?)</div>\s*</div>)r   Úfindr   ÚcompileÚIr-   r   r   ÚmatchÚgroupÚstrÚsearchÚS)Ú	html_textÚpage_urlr+   r5   Úcontent_htmlÚsoupÚmtÚmdÚdÚdmÚcdÚfcÚms                r   Úparse_detailrV   g   s´  € Ø€EØ€DØ€LÞÜ˜Y¨Ó6ˆØ�Y‰Y�v f¬b¯j©j¸Ì"Ï$É$Ó.OÐ%PˆYÓQˆÙ�"—&‘&˜Ô#Ü  9¡Ó.ˆEØ�Y‰Y�v f¬b¯j©j¸ÄRÇTÁTÓ.JÐ%KˆYÓLˆÙ�"—&‘&˜Ô#Ø�9‘×#Ñ#Ó%ˆAÜ—‘Ð4°aÓ8ˆBÙØ—x‘x “{�Ø�Y‰Y�u ˆYÓ+ˆÙÜ˜r›7ˆLÙØ—‘˜5¬¯©°OÄRÇTÁTÓ)J�ÓKˆBÙÜ" 2›w�ÙÜ�I‰IÐNÐPYÔ[]×[_Ñ[_Ó`ˆÙÜ §¡¨£
Ó+ˆEÙÜ�I‰IÐHÈ)ÔUW×UYÑUYÔ\^×\`Ñ\`ÑU`ÓaˆÙØŸ7™7 1›:ˆLÙÜ�I‰IÐ0°)Ó<ˆÙØ—7‘7˜1“:ˆDØ�$˜Ð$Ð$r   c           
      ó
  ‡‡‡‡— | sddg fS t        j                  dd| t         j                  ¬«      } 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<meta[^>]*>z<script[^>]*>.*?</script>z<style[^>]*>.*?</style>r9   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	   é   ú<[^>]+>r   u   ^é™„ä»¶[:ï¼š]\s*ú?r   u   é™„ä»¶Ú__LINK__Ú__z	<a href="z" target="_blank">z</a>)rG   r   r   r   r   r   ÚosÚpathÚbasenameÚsplitr.   r/   r0   r1   Úlen)	rU   ÚhrefÚinnerÚtxtr6   ÚkeyÚattachmentsÚlink_protectrL   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	   ri   )r1   rG   rn   )rU   Ú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

rf   r   r   z&nbsp;z[\s\u200b\u200c\u200d\ufeff]+rw   ri   z__LINK__\d+__z__TBL__\d+__z[ \t]+\nz\n{3,}z	[ \t]{2,}r   )r   r   rJ   rE   r   Úfind_allr=   ÚpoprH   Ú	ExceptionrI   rm   r   r   r   r   r2   Ú	enumerater1   ÚjoinÚsetÚadd)r>   rL   Ú_soupÚtagÚattrÚcontent2ru   ry   Ú	has_tableÚpartsÚblockÚbÚplainÚkÚvÚiÚtblÚoutÚseenÚfinalÚprr   rs   rt   rx   s    `                    @@@r   Úhtml_to_textr“   Œ   sC  û€ ÙØ�1�bˆyÐÜ�f‰f�] B¨´r·t±tÔ<€GÜ�f‰f�^ R¨¼¿¹Ô=€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à�	˜;Ð&Ð&øôc ò 	Úð	ús   ÃAS7 Ó7	TÔTc                 óž  — | j                  d|t        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)Nz7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?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 (?,?,?,?,?,?,?,?,?,?)rf   r   r   r   éÈ   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedé   )ÚexecuteÚ	SITE_NAMEÚfetchoneÚcrawler_libr–   r}   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr   r   r   r   r   Ú	lastrowidÚsqlite3ÚOperationalErrorrH   ÚtimeÚsleepÚstore_record)Úconnr'   r+   r>   r5   r†   ÚcurÚindustryr–   ÚsummaryÚes              r   r¦   r¦   î   sF  € Ø
�,‰,ÐPÐSVÔXaÐRbÓ
c€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   «C< ®C- ¼B/C< Ã-	C9Ã6C< Ã8C9Ã9C< Ã<EÄ1EÅ EÅEÅEc            
      óŒ  — t        j                  «       } | j                  j                  t        «       t        j                  t        d¬«      }|j                  d«       |j                  d«       d}d}t        «       }t        dt        dz   «      D �]�  }	 t        | |«      }t        |«      }|j!                  dd«      }	t        d|› dt#        |«      › d|	› d�d	¬
«       |st        dd	¬
«        �n%|D �]  \  }
}}|
|v rŒ|j%                  |
«       	 | j!                  |
t        dd¬«      }d|_        |j(                  }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«       �Œ„ |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)$Né<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALr   r	   zPage z fetch error: T)ÚflushÚtotalrg   z: found z items (total=ú)zEmpty page, stop paginationr   F)r   r   r   zutf-8z  detail error z: rf   r   é
   z  skip empty: z  + é(   z (g      Ð?g      à?u   æ–°å¢ž: u   è·³è¿‡: z=== z	 done ===) ÚrequestsÚSessionr   Úupdater#   r¢   ÚconnectÚDB_PATHrš   r€   ÚrangeÚ_PAGESr)   r}   Úprintr7   r-   rn   r�   ÚencodingÚtextrV   r“   r   r   r   r¦   r¤   r¥   ÚcommitÚcloser›   )Úsr§   Ú	new_countÚ
skip_countÚ	seen_urlsr&   r   r«   r2   r¯   r6   r+   Úldater(   ÚdhtmlÚdtitleÚddaterM   r>   r†   Ú_Ú	plain_lenÚoks                          r   ÚmainrÊ     s¿  € Ü×ÑÓ€AØ‡I�I×Ñ”WÔÜ�?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+à€IØ€JÜ“€Iä�aœ !™Ó$ó *ˆð	Ü˜a Ó&ˆDô ˜4Ó ˆØ—‘˜ #Ó&ˆÜ��d�V˜8¤C¨£J <¨~¸e¸WÀAÐFÈdÕSÙÜÐ/°tÕ<ÚØ%*ó 	Ñ!ˆG�U˜EØ˜)Ñ#ØØ�M‰M˜'Ô"ðØ—E‘E˜'¬7¸BÀu�EÓM�Ø$�”
ØŸ™�ô
 +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�tÖð;	ô< 	�
‰
�3ŽðU*ðX 	‡K�K„MØ‡J�J„LÜ	ˆH�Y�KÐ
 ¨Õ-Ü	ˆH�Z�LÐ
!¨Õ.Ü	ˆD”�˜9Ð
%¨TÖ2øô[ ò 	Ü�E˜$˜˜~¨a¨SÐ1¸Õ>Ýûð	ûô" ò Ü˜¨ y°°1°#Ð6¸dÕCØ˜a‘�
Ýûðús0   ÂI-Ä,JÉ-	JÉ6JÊJÊ	KÊ J>Ê>KÚ__main__)0Ú__doc__Úsysrj   r   r¤   Úhtmlr   Úurllib.parser.   r¢   ÚwarningsÚfilterwarningsÚbs4r   ÚImportErrorr³   Ú$requests.packages.urllib3.exceptionsr   ÚpackagesÚurllib3Údisable_warningsr    r›   rž   rŸ   r·   ÚLIST_REFr"   r#   Ú
_MAX_PAGESr~   Úargvr�   ÚaÚ
startswithÚintrm   Ú
ValueErrorrn   r¹   r   r)   r7   rV   r“   r¦   rÊ   Ú__name__© r   r   ú<module>rá      s¹  ðñó Û 	Û 	Û Û Û Û Û à €× Ñ ˜Ô !ðÝ!ó Ý GØ × Ñ × Ñ × *Ñ *Ð+AÔ Bð '€Ø!€	Ø€
Ø$€Ø
€ØÐ0Ñ0€ðGð 
ð @Ø>Ø'ØFØ(Øñ€ð €
Ù�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€ò	òò
ò"%òJ_'òDòD;3ð| ˆzÒÙ…Fð øðk	 ò ØƒMðûðH ò 	Ùð	ûð
 ò 	Ùð	ús5   ¶D3 Â1EÃ-EÄ3D>Ä=D>ÅE	ÅE	ÅEÅE