Ë
    ¨Á£jg/  ã                   óX  — 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	m
Z
 ddlmZ dZdZedz   ZdZeZd	d
edz   ddddœddedz   ddddœdœZej&                  j)                  dd«       	 ddlmZ eddfd„Zeddfd„Zd„ Zd d„Zd„ Zd„ Zedk(  r e«        yy# e$ r dZY Œ2w xY w)!uö  ä¸´å·�åŒºäººæ°‘æ”¿åºœ (www.jxlc.gov.cn) å¤šæ �ç›®çˆ¬è™« â€” å¤§æ±‰ jcms dataproxy
æ �ç›®:
  tzgg  col1384 é€šçŸ¥å…¬å‘Š   (webid=5, columnid=1384, unitid=70893, è®°å½•æ ¼å¼� href='..'title='..'+span)
  jjkfq col1611 ç»�æµŽå¼€å�‘åŒº (webid=5, columnid=1611, unitid=46632, è®°å½•æ ¼å¼� href=".."title=".."+b, é¡µé�¢å†…åµŒ61æ�¡)
ç”¨æ³•: python3 crawl_jxlc_tzgg.py [--col tzgg|jjkfq] [--pages N] [--db /path] [--host IP]
åŠ é€Ÿä¹�é˜²æŠ¤: éœ€ --resolve å¼ºåˆ¶ IP + Referer + X-Requested-With, å…¨éƒ¨èµ° POST
é    N)ÚRequestÚurlopen)ÚurljoinzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zhttps://www.jxlc.gov.cnz/col/col1384/index.htmlz218.98.26.222Ú1384Ú70893Ú	jxlc_tzggÚsingle_quoteé   )ÚcolumnidÚunitidÚlist_urlÚ	site_nameÚ
record_fmtÚpagesÚ1611Ú46632z+/col/col1611/index.html?number=D00002D00004Ú
jxlc_jjkfqÚdouble_quoteé   )ÚtzggÚjjkfqz/root/gov_crawler)Úpush_to_searchdbé   c                 ó8  — ddl }|j                  «       }d|_        |j                  |_        t
        |ddœ}|�'d|d<   d|d	<   t        | |j                  «       |¬
«      }nt        | |¬«      }t        |||¬«      }|j                  «       j                  dd¬«      S )u&   å¼ºåˆ¶IPç›´è¿ž + Referer, POST æˆ– GETr   NFú*/*)ú
User-AgentÚRefererÚAcceptÚXMLHttpRequestúX-Requested-Withú!application/x-www-form-urlencodedúContent-Type©ÚdataÚheaders©r%   ©ÚcontextÚtimeoutúutf-8Úignore©Úerrors)ÚsslÚcreate_default_contextÚcheck_hostnameÚ	CERT_NONEÚverify_modeÚUAr   Úencoder   ÚreadÚdecode)	ÚurlÚrefererÚpostr)   r.   Úctxr%   ÚreqÚopeners	            úcrawl_jxlc_tzgg.pyÚfetchr>   +   s�   € ãØ
×
$Ñ
$Ó
&€CØ€CÔØ—m‘m€C„OäØØñ€Gð
 ÐØ&6ˆÐ"Ñ#Ø"Eˆ�ÑÜ�c §¡£°wÔ?‰ä�c 7Ô+ˆÜ�S #¨wÔ7€Fà�;‰;‹=×Ñ °ÐÓ9Ð9ó    c                 óš  — ddl }ddl}ddlm} |j	                  «       }d|_        |j                  |_         || «      }t        ||j                  ddœ}	|�'d|	d<   d	|	d
<   t        | |j                  «       |	¬«      }
nt        | |	¬«      }
ddl}|j                  j                  t        d||¬«      }|j                   |j"                  rd|j"                  z   ndz   }|�dnd}|�|j                  «       nd}|j%                  ||||	¬«       |j'                  «       }|j)                  «       j+                  dd¬«      }|j-                  «        |S )u-   ç›´æŽ¥è¿ž IP + Host header (--resolve ç­‰ä»·)r   N)ÚurlparseFr   )r   r   ÚHostr   r   r    r!   r"   r#   r&   i»  r'   ú?Ú ÚPOSTÚGET)Úbodyr%   r*   r+   r,   )r.   ÚsocketÚurllib.parserA   r/   r0   r1   r2   r3   Únetlocr   r4   Úhttp.clientÚclientÚHTTPSConnectionÚHOSTÚpathÚqueryÚrequestÚgetresponser5   r6   Úclose)r7   r8   r9   r)   r.   rH   rA   r:   Úpr%   r;   ÚhttpÚconnrO   ÚmethodrG   Úrespr$   s                     r=   Úfetch_iprY   @   s-  € çÝ%Ø
×
$Ñ
$Ó
&€CØ€CÔØ—m‘m€C„OÙ�‹€AäØØ—‘Øñ	€Gð ÐØ&6ˆÐ"Ñ#Ø"Eˆ�ÑÜ�c §¡£°wÔ?‰ä�c 7Ô+ˆãØ�;‰;×&Ñ&¤t¨S¸#ÀwÐ&ÓO€DØ�6‰6 a§g¢g�S˜1Ÿ7™7’]°2Ñ6€DØÐ'‰V¨U€FØ Ð,ˆ4�;‰;Œ=°$€DØ‡L�L�˜ D°'€LÔ:Ø×ÑÓ€DØ�9‰9‹;×Ñ˜g¨hÐÓ7€DØ‡J�J„LØ€Kr?   c                 ó‚  — ddl m} t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      }  || d«      } |g d	¢«      D ]  }|j	                  «        Œ |j                  d
«      D ]‹  }|j                  d«      xs |j                  d«      xs d}|rO|j                  d«      r|nt        t        |«      }|j                  d|¬«      }d|_        |j                  |«       Œ||j	                  «        Œ� |j                  g d¢«      D ]  }|j                  «        Œ |j                  d«      D ]s  }|j                  dd«      }|r8|j                  d«      s'|j                  d«      r|nt        t        |«      |d<   ŒO|sŒR|j                  d«      sŒd|j	                  «        Œu |j                  d«      D ]I  }	|	j                  d¬«      rŒ|	j                  d«      rŒ(|	j                  d
«      rŒ:|	j	                  «        ŒK t!        |«      S )uQ   ç™½å��å�•æ¸…æ´—: ä¿�ç•™ p/table/a, åŽ» inline style, unwrap span, é“¾æŽ¥ç»�å¯¹åŒ–r   ©ÚBeautifulSoupz<!--<\$\[[^\]]*\]>begin-->rD   z<!--<\$\[[^\]]*\]>end-->z%<!--ZJEG_RSS\.content\.(begin|end)-->z"<meta name="Content(Start|End)"/>?úhtml.parser)ÚscriptÚstyleÚiframeÚobjectÚimgÚsrczdata-srcrU   Úa)Úhrefu   æŸ¥çœ‹å›¾ç‰‡)ÚdivÚspanÚfontÚcenterÚbÚstrongÚemÚiÚuÚsÚlabelre   Ú
javascriptrT   T©ÚstripÚtable)Úbs4r\   ÚreÚsubÚ	decomposeÚfind_allÚgetÚ
startswithr   ÚBASEÚnew_tagÚstringÚreplace_withÚunwrapÚget_textÚfindÚstr)
Úhtmlr\   ÚsoupÚtrb   rc   Úabs_srcrd   re   rT   s
             r=   Ú
clean_htmlrˆ   `   sÞ  € å!ä�6‰6Ð/°°TÓ:€DÜ�6‰6Ð-¨r°4Ó8€DÜ�6‰6Ð:¸BÀÓE€DÜ�6‰6Ð7¸¸TÓB€DÙ˜˜}Ó-€DÙÒ9Ó:ò ˆØ	�‰�ðà�}‰}˜UÓ#ò ˆØ�g‰g�e‹nÒ9 §¡¨
Ó 3Ò9°rˆÙØ Ÿ^™^¨FÔ3‘c¼ÄÀsÓ9KˆGØ—‘˜S w�Ó/ˆAØ%ˆAŒHØ×Ñ˜QÕà�M‰M�Oðð �]‰]ÒiÓjò ˆØ	�‰�
ðà�]‰]˜3Óò ˆØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô5Ø $§¡°Ô 7™¼WÄTÈ4Ó=PˆAˆfŠIÚ�d—o‘o lÕ3Ø�K‰K�Mðð �]‰]˜3Óò ˆØ�z‰z ˆzÕ%¨a¯f©f°W­oÀaÇfÁfÈUÅmØ�K‰K�Mðô ˆt‹9Ðr?   c                 óì  — g }|dk(  r÷t        j                  d| t         j                  «      }|D ]Ë  }t        j                  d|«      }|rd|j	                  d«      vrŒ/t        j                  d|«      }|r|j	                  d«      j                  «       nd}|j	                  d«      }|j                  d«      st        t        |«      }|j                  |j	                  d	«      j                  «       ||d
œ«       ŒÍ |S t        j                  d| t         j                  «      }|D ]Ë  }t        j                  d|«      }|rd|j	                  d«      vrŒ/t        j                  d|«      }	|	r|	j	                  d«      j                  «       nd}|j	                  d«      }|j                  d«      st        t        |«      }|j                  |j	                  d	«      j                  «       ||d
œ«       ŒÍ |S )u­   è§£æž� dataproxy å“�åº” â†’ [(title, url, date)]
    record_fmt: single_quote=col1384æ ¼å¼�(href='..'title='..'+span), double_quote=col1611æ ¼å¼�(href=".."title=".."+b)
    r	   z&<record><!\[CDATA\[(.*?)\]\]></record>zhref='([^']+)'title='([^']*)'z/art/r   z<span[^>]*>([^<]*)</span>rD   rU   r
   )Útitler7   Údatez"href="([^"]+)"[^>]*title="([^"]*)"z<b>\s*([^<]+?)\s*</b>)
rv   ÚfindallÚSÚsearchÚgrouprs   r{   r   r|   Úappend)
r„   r   ÚitemsÚrecsÚrecÚmÚspr‹   r7   rj   s
             r=   Ú
parse_listr–   �   s¥  € ð €EØ�^Ò#ä�z‰zÐCÀTÌ2Ï4É4ÓPˆØò 		RˆCÜ—	‘	Ð:¸CÓ@ˆAÙ˜ q§w¡w¨q£zÑ1ØÜ—‘Ð7¸Ó=ˆBÙ*,�2—8‘8˜A“;×$Ñ$Ô&°"ˆDØ—'‘'˜!“*ˆCØ—>‘> &Ô)Üœd CÓ(�Ø�L‰L 1§7¡7¨1£:×#3Ñ#3Ó#5¸cÈ4ÑPÕQð		Rð. €Lô �z‰zÐCÀTÌ2Ï4É4ÓPˆØò 		RˆCÜ—	‘	Ð?ÀÓEˆAÙ˜ q§w¡w¨q£zÑ1ØÜ—	‘	Ð2°CÓ8ˆAÙ)*�1—7‘7˜1“:×#Ñ#Ô%°ˆDØ—'‘'˜!“*ˆCØ—>‘> &Ô)Üœd CÓ(�Ø�L‰L 1§7¡7¨1£:×#3Ñ#3Ó#5¸cÈ4ÑPÕQð		Rð €Lr?   c                 ót  — ddl m}  || d«      }|j                  d«      }|r|j                  d¬«      nd}|slt	        j
                  d| t        j                  «      }|rE|j                  d	«      j                  «       }|j                  d
«      d   j                  d«      d   }t	        j
                  d| «      }|r"|j                  d	«      j                  «       dd nd}|j                  d¬«      }|r>|j                  dd„ ¬«      D ]  }	|	j                  «        Œ t        t        |«      «      }
nd}
|||
fS )u4   è§£æž�è¯¦æƒ…é¡µ â†’ (title, publish_date, body_html)r   r[   r]   Úh1Trr   rD   z<title>(.*?)</title>r   u    é€šçŸ¥å…¬å‘Š éÿÿÿÿu    ä¸´å·�åŒºäººæ°‘æ”¿åºœz&<meta name="PubDate" content="([^"]+)"Né
   Úzoom)Úidrf   c                 ó   — | xr d| v S )Nzfloat:right© )Úvs    r=   ú<lambda>zparse_detail.<locals>.<lambda>¶   s   € ¸Ò8P¸mÈqÐ>P€ r?   )r_   )ru   r\   r‚   r�   rv   rŽ   r�   r�   rs   Úsplitry   rx   rˆ   rƒ   )r„   r\   r…   r˜   rŠ   r”   r†   Úpubr›   rf   rG   s              r=   Úparse_detailr£   ¢   s  € å!Ù˜˜}Ó-€Dà	�‰�4‹€BÙ')ˆB�K‰K˜dˆKÔ#¨r€EÙÜ�I‰IÐ-¨t´R·T±TÓ:ˆÙØ—‘˜“
× Ñ Ó"ˆAà—G‘GÐ,Ó-¨bÑ1×7Ñ7Ð8PÓQÐRTÑUˆEä
�	‰	Ð;¸TÓB€AÙ%&ˆ!�'‰'�!‹*×
Ñ
Ó
˜S˜bÑ
!¨B€Cà�9‰9˜ˆ9Ó€DÙà—=‘= Ñ.P�=ÓQò 	ˆCØ�M‰M�Oð	äœ#˜d›)Ó$‰àˆØ�#�tÐÐr?   c                  ó  — t        j                  «       } | j                  ddt        t        j                  «       «      ¬«       | j                  dt        d ¬«       | j                  dd ¬«       | j                  dt        ¬«       | j                  d	d ¬«       | j                  «       }|j                  t        j                  d
<   t        |j                     }|j                  xs |d   }|d   }|d   }|d   }d|d   › d|d   › d�}g }t        «       }	|dk(  rg	 t        |«      }
t%        |
|«      }|D ]/  }|d   |	vsŒ|	j'                  |d   «       |j)                  |«       Œ1 t!        dt+        |«      › d�d¬«       nët-        d|dz   «      D ]Ù  }|j/                  |¬«      }	 t        t0        › d�|¬ «      }
t%        |
|«      }|D �cg c]  }|d   |	vsŒ|‘Œ }}|D ]'  }|	j'                  |d   «       |j)                  |«       Œ) t!        d!|› d#t+        |«      › d$t+        |«      › �d¬«       t+        |«      d%k(  r n+t3        j4                  t7        j8                  d&d'«      «       ŒÛ t!        d(t+        |«      › d�d¬«       	 d%d l}t=        j>                  d)d*«      }|jA                  |d+¬,«      }t        d-„ |jC                  d.|f«      D «       «      }|jE                  «        t+        |«      }|D �cg c]  }|d   |vsŒ|‘Œ }}t!        d/|› d0t+        |«      › d1t+        |«      › d2�d¬«       g }d%}tG        |«      D �]  \  }}	 t        |d   |¬5«      }
tI        |
«      \  }}}|r|s(|dz  }t!        d6|› d7|d d8 ›d9t+        |«      › �d¬«       ŒSd:D ]#  }|jK                  |«      sŒ|t+        |«      d  } n |j)                  ||d   |d   |xs |d;   |xs |d;   |d|dd<œ	«       |dz   d8z  d%k(  r.t!        d=|dz   › d>t+        |«      › d?t+        |«      › d@|› �d¬«       t3        j4                  t7        j8                  dAdB«      «       �Œ t!        dCt+        |«      › d@|› �d¬«       |jL                  rltO        |jL                  dDdE¬F«      5 }|D ]+  }|jQ                  tS        jT                  |dG¬H«      dIz   «       Œ- 	 d d d «       t!        dJ|jL                  › �d¬«       tV        rtW        |«      }t!        dK|› �d¬«       y t!        dLd¬«       y # t        $ r)}t!        dt#        |«      d d › �d¬«       d}
Y d }~�Œd }~ww xY w# t        $ r+}t!        d!|› d"t#        |«      d d › �d¬«       Y d }~ �Œd }~ww xY wc c}w c c}w # t        $ r'}t!        d3t#        |«      d d4 › �d¬«       Y d }~�Œƒd }~ww xY w# t        $ r/}|dz  }t!        d6|› d"t#        |«      d d4 › �d¬«       Y d }~�Œ¯d }~ww xY w# 1 sw Y   �Œ8xY w)MNz--colr   )ÚdefaultÚchoicesz--pages)Útyper¥   z--db)r¥   z--hostz--outrN   r   r   r   r   z*page={pg}&appid=1&webid=5&path=/&columnid=r   z&unitid=r   z&permissiontype=0r   u   åˆ—è¡¨é¡µ: å¤±è´¥ éd   T)ÚflushrD   r7   u   é¡µé�¢å†…åµŒ: u    æ�¡r   )Úpgz/module/web/jpage/dataproxy.jsp)r9   u   é¡µu	   : å¤±è´¥ z: u    æ�¡, ç´¯è®¡ r   gš™™™™™é?g      ø?u   å…± Ú	SEARCH_DBz/root/search.dbé<   )r)   c              3   ó&   K  — | ]	  }|d    –— Œ y­w)r   Nrž   )Ú.0Úrs     r=   ú	<genexpr>zmain.<locals>.<genexpr>õ   s   è ø€ ò M˜Q�A�a•Dñ Mùs   ‚z.SELECT page_url FROM gov_raw WHERE site_name=?u   é¢„åŽ»é‡�: u    â†’ u    (åº“ä¸­å·²æœ‰ ú)u   é¢„åŽ»é‡�è·³è¿‡: éP   )r8   u     è¯¦æƒ…u   : ç©º title=é   z body=)u,   ä¸´å·�åŒºäººæ°‘æ”¿åºœ ä¸´å·�ç»�æµŽå¼€å�‘åŒº u)   ä¸´å·�åŒºäººæ°‘æ”¿åºœ ä¿¡æ�¯å…¬å¼€åˆ¶åº¦ u   ä¸´å·�åŒºäººæ°‘æ”¿åºœ r‹   )	rŠ   r7   Ú
source_urlÚpub_dateÚpublish_dateÚcontentÚauthorr   Úattachmentsu   è¯¦æƒ… ú/z: ok=z fail=g      à?g      ð?u   å®Œæˆ�: ok=Úwr*   )ÚencodingF)Úensure_asciiú
u   JSONL å·²å†™: u   DB å¯¼å…¥: u0   è­¦å‘Š: push_to_searchdb ä¸�å�¯ç”¨, å�ªå†™ JSONL),ÚargparseÚArgumentParserÚadd_argumentÚlistÚCOLSÚkeysÚintÚDEFAULT_HOSTÚ
parse_argsÚhostrY   Ú__globals__Úcolr   ÚsetÚ	ExceptionÚprintrƒ   r–   Úaddr�   ÚlenÚrangeÚformatr|   ÚtimeÚsleepÚrandomÚuniformÚsqlite3ÚosÚgetenvÚconnectÚexecuterS   Ú	enumerater£   r{   ÚoutÚopenÚwriteÚjsonÚdumpsr   ) ÚapÚargsrÊ   r   r   r   r   Úpost_paramsÚ	all_itemsÚseenr„   Úer‘   Úitrª   r9   ÚnewÚ_sqÚ_dbÚ_cÚ_haveÚ_beforeÚrowsÚfailrm   rŠ   r¢   rG   ÚpreÚfr¯   Úoks                                    r=   Úmainró   ½   s  € Ü	×	 Ñ	 Ó	"€BØ‡O�O�G V´T¼$¿)¹)»+Ó5F€OÔGØ‡O�O�I¤C°€OÔ6Ø‡O�O�F D€OÔ)Ø‡O�O�H¤l€OÔ3Ø‡O�O�G T€OÔ*Ø�=‰=‹?€DØ#'§9¡9„H×Ñ˜Ñ Ü
ˆt�x‰x‰.€CØ�J‰JÒ&˜#˜g™,€EØ�:‰€HØ�KÑ €IØ�\Ñ"€JØ@ÀÀZÁÐ@QÐQYÐZ]Ð^fÑZgÐYhÐhyÐz€Kð €IÜ‹5€DØ�^Ò#ð	Ü˜HÓ%ˆDô ˜4 Ó,ˆØò 	%ˆBØ�%‰y Ò$Ø—‘˜˜E™Ô#Ø× Ñ  Õ$ð	%ô 	�œs 5›z˜l¨$Ð/°tÖ<ä˜˜5 1™9Ó%ò 	1ˆBØ×%Ñ%¨Ð%Ó,ˆDðÜ¤4 &Ð(GÐ HÈtÔT�ô ˜t ZÓ0ˆEØ %Ö?˜"¨¨E©¸$Ò)>’2Ð?ˆCÐ?Øò %�Ø—‘˜˜E™Ô#Ø× Ñ  Õ$ð%ô �C˜�t˜2œc %›j˜\¨´s¸9³~Ð6FÐGÈtÕTÜ�5‹z˜QŠÙÜ�J‰J”v—~‘~ c¨3Ó/Õ0ð	1ô  
ˆD”�Y“Ð  Ð
%¨TÕ2ð=ÛÜ�i‰i˜Ð%6Ó7ˆØ�[‰[˜ bˆ[Ó)ˆÜñ M "§*¡*Ø<¸y¸ló#Lô Mó Mˆà
�‰Œ
Ü�i“.ˆØ"+ÖF˜B¨r°%©yÀÒ/E’RÐFˆ	ÐFÜ�˜G˜9 E¬#¨i«.Ð)9¸ÌÈUËÈÐTUÐVÐ^bÕcð
 €DØ€DÜ˜9Ó%ó -‰ˆˆ2ð	Ü˜B˜u™I¨xÔ8ˆDô
 (¨Ó-Ñˆˆs�DÙ™DØ�A‰IˆDÜ�H˜Q˜C˜|¨E°#°2¨J¨>¸ÄÀDÃ	¸{ÐKÐSWÕXØð Kò 	ˆCØ×Ñ Õ$Øœc #›h˜iÐ(�Ùð	ð 	�‰ØØ�e‘9Ø˜U™)ØÒ)˜r &™zØÒ- 2 f¡:ØØØ"Øñ

ô 
	ð �‰E�R‰<˜1ÒÜ�G˜A˜a™C˜5 ¤# i£.Ð!1°´s¸4³y°kÀÈÀvÐNÐVZÕ[Ü�
‰
”6—>‘> # sÓ+Ö,ð=-ô@ 
ˆKœ˜D›	�{ &¨¨Ð
/°tÕ<Ø‡x‚xÜ�$—(‘(˜C¨'Ô2ð 	B°aØò B�Ø—‘œŸ
™
 1°5Ô9¸DÑ@ÕAñB÷	Bô 	�˜tŸx™x˜jÐ)°Õ6ÝÜ˜dÓ#ˆÜ�˜B˜4Ð ¨Ö-äÐ@ÈÖMøôo ò 	ÜÐ&¤s¨1£v¨d¨s | nÐ5¸TÕBØŽDûð	ûô ò Ü˜˜B˜4˜y¬¨Q«°°¨¨Ð7¸tÕDÞûðüò @ùò& Gøäò =ÜÐ!¤# a£&¨¨" + Ð/°t×<Ó<ûð=ûô ò 	Ø�A‰IˆDÜ�H˜Q˜C˜y¬¨Q«°°¨¨Ð6¸dÕCÝûð	ú÷>	Bñ 	Bús‘   ÄT Æ'U
ÇVÇVÊA/V Ë7VÌVÌ+V Í
V>Ò1W9Ô	UÔUÕUÕ
	U>ÕU9Õ9U>ÖV Ö	V;ÖV6Ö6V;Ö>	W6×$W1×1W6×9XÚ__main__)r	   )Ú__doc__r¿   rß   r×   rv   ÚsysrÒ   rÔ   Úurllib.requestr   r   rI   r   r3   r|   ÚCOL_URLrÆ   rN   rÃ   rO   ÚinsertÚcrawler_libr   ÚImportErrorr>   rY   rˆ   r–   r£   ró   Ú__name__rž   r?   r=   ú<module>rý      sÿ   ðñ÷ 1× 0× 0Ó 0ß +Ý  àv€Ø €Ø
Ð*Ñ
*€Ø€Ø€ð  gØÐ4Ñ4Ø Ø$Øñð  gØÐHÑHØ!Ø$Øññ€ð" ‡�‡��Ð&Ô 'ðÝ,ð  T°2ó :ð* "¨°bó ò@óBòBò6nNð` ˆzÒÙ…Fð øðK ò ØÒðús   Á0B ÂB)Â(B)