Ë
    ¸¬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m	Z	 ddl
mZ dZdZdZdZed	z   Zd
Z ej$                  «       Zde_        ej*                  e_        ddddœZdd„Zd„ Zd„ Zd„ Zdad„ Zd„ Zd„ Ze dk(  r e«        yy)u  é”¦å·žç»�æµŽæŠ€æœ¯å¼€å�‘åŒºï¼ˆæ»¨æµ·æ–°åŒºï¼‰ç®¡å§”ä¼š - å¼€å�‘å»ºè®¾ (zsyz/kfjs) çˆ¬è™«
CMS: VSB (Visual SiteBuilder) å��å�‘åˆ†é¡µ
åˆ—è¡¨: /zsyz/kfjs.htm (ç¬¬1é¡µ, 20æ�¡/é¡µ) + /zsyz/kfjs/{TOTAL+1-N}.htm (ç¬¬Né¡µ, å��å�‘!)
     åˆ†é¡µæ�¡ p_no/p_no_d: å½“å‰�é¡µ1 æ˜¾ç¤º 2->kfjs/3.htm 3->kfjs/2.htm å°¾é¡µ->kfjs/1.htm => TOTAL=4é¡µ
è¯¦æƒ…: /info/1075/{id}.htm
     è€�æ¨¡æ�¿æ—  meta ArticleTitle/PubDate: æ ‡é¢˜ div.title + æ—¥æœŸ div.tit span 'å�‘å¸ƒæ—¶é—´ï¼š' + æ­£æ–‡ div.v_news_content (åˆ  vsbcontent_start/end)
é    N©Úurljoin)ÚBeautifulSoupu   é”¦å·žç»�å¼€åŒº-å¼€å�‘å»ºè®¾zcrawl_jzbhxq_kfjs.pyu   è¾½å®�zhttp://www.jzbhxq.gov.cnz/zsyz/kfjs.htmz/mnt/data/search.dbFzkMozilla/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,en;q=0.8)z
User-AgentÚAcceptzAccept-Languagec                 ó´  — t        |«      D ]p  }	 t        j                  j                  | t        ¬«      }t        j                  j                  ||t        ¬«      }|j                  «       j                  dd¬«      c S  y
# t        $ rN}||dz
  k(  r't        d| › d|› �t        j                  ¬	«       Y d }~ y
t        j                  d«       Y d }~ŒÆd }~ww xY w)N)Úheaders)ÚtimeoutÚcontextzutf-8Úreplace)Úerrorsé   u     [WARN] è¯·æ±‚å¤±è´¥ z: ©ÚfileÚ g333333ó?)ÚrangeÚurllibÚrequestÚRequestÚHEADERSÚurlopenÚctxÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderrÚtimeÚsleep)Úurlr	   ÚretriesÚiÚreqÚrespÚes          ú&/root/gov_crawler/crawl_jzbhxq_kfjs.pyÚhttp_getr'       s¹   € Ü�7‹^ò 	ˆð	Ü—.‘.×(Ñ(¨´gÐ(Ó>ˆCÜ—>‘>×)Ñ)¨#°wÌÐ)ÓLˆDØ—9‘9“;×%Ñ% g°iÐ%Ó@Ò@ð		ð øô ò 	Ø�G˜a‘KÒÜÐ.¨s¨e°2°a°SÐ9ÄÇ
Á
ÕKÝÜ�J‰J�s�O‰Oûð		ús   �A+B Â 	CÂ	)CÂ8CÃCc                 ó  — | j                  dd«      j                  dd«      } | j                  dd«      j                  dd«      } t        j                  dd| «      } t        j                  dd| «      } | j                  «       S )u:   strip &middot;&nbsp; å®žä½“å‰�ç¼€ å’Œçœ�ç•¥å�·æˆªæ–­å�Žç¼€z&middot;r   z&nbsp;u   â€‹u   ï»¿u   ^[\s\xa0Â·\u00b7]+z\s*\.{3,}\s*$)r   ÚreÚsubÚstrip)Útitles    r&   Úclean_titler-   .   sn   € à�M‰M˜* bÓ)×1Ñ1°(¸BÓ?€EØ�M‰M˜( BÓ'×/Ñ/°¸"Ó=€EÜ�F‰FÐ(¨"¨eÓ4€EÜ�F‰FÐ# R¨Ó/€EØ�;‰;‹=Ðó    c                 ó>  — t        «       }t        j                  d| «      }|r)|j                  t	        |j                  d«      «      «       t        j                  d| «      D ]+  }|j                  t	        |j                  d«      «      «       Œ- |rt        |«      S dS )u_   ä»Žåˆ†é¡µæ�¡ p_no/p_no_d æ”¶é›†é¡µç �, è¿”å›žæ€»é¡µæ•° (å��å�‘åˆ†é¡µ: URLæ•°å­—=TOTAL+1-é¡µç �)zp_no_d[^>]*>\s*(\d+)r   z&class="p_no"[^>]*>\s*<a[^>]*>(\d+)</a>)Úsetr)   ÚsearchÚaddÚintÚgroupÚfinditerÚmax)ÚhtmlÚnumsÚms      r&   Úget_total_pagesr:   7   sy   € ä‹5€DÜ
�	‰	Ð)¨4Ó0€AÙØ�‰”�Q—W‘W˜Q“Z“Ô!Ü�[‰[ÐBÀDÓIò "ˆØ�‰”�Q—W‘W˜Q“Z“Õ!ð"áŒ3ˆt‹9Ð# !Ð#r.   c                 óV  — g }d}t        j                  || t         j                  «      D ]ü  }t        j                  d|«      }t        j                  d|«      }|sŒ2|j	                  d«      }|r+|j	                  d«      rt        |j	                  d«      «      nd}|s2t        j                  d|«      }|rt        |j	                  d«      «      }t        j                  d|«      }	|	r|	j	                  d«      nd}
t        t        |«      }|sŒäd|v sŒé|j                  |||
f«       Œþ |S )	uc   ä»Žåˆ—è¡¨é¡µæ��å�– (url, title, date)ã€‚æ�¡ç›® div.height38#line_uN_M, title å±žæ€§åœ¨ href ä¹‹å‰�!zv<div class="height38" id="line_u\d+_\d+">(.*?)(?=<div class="height38" id="line_u\d+_\d+">|<script>_showDynClickBatch)z<a[^>]*href="([^"]+)"z<a[^>]*title="([^"]*)"r   r   z<a[^>]*>([^<]+)</a>ú(\d{4}-\d{2}-\d{2})zinfo/)	r)   ÚfindallÚSr1   r4   r-   r   ÚLIST_URLÚappend)r7   ÚitemsÚpatÚsegÚaÚtÚhrefr,   ÚtmÚdmÚdater    s               r&   Ú
parse_listrJ   B   sþ   € à€Eð D€CÜ�z‰z˜#˜t¤R§T¡TÓ*ò -ˆÜ�I‰IÐ.°Ó4ˆÜ�I‰IÐ/°Ó5ˆÙØØ�w‰w�q‹zˆÙ+,°·±¸´”˜AŸG™G A›JÔ'ÀˆÙÜ—‘Ð1°3Ó7ˆBÙÜ# B§H¡H¨Q£KÓ0�Ü�Y‰YÐ-¨sÓ3ˆÙ ˆr�x‰x˜Œ{ bˆÜ”h Ó%ˆÚ�W ’^Ø�L‰L˜#˜u dÐ+Õ,ð-ð  €Lr.   c                 ó  — | dk(  r)t        t        «      }|sg S t        |«      at	        |«      S t        dk(  rt        t        «      }|rt        |«      at        dk(  rg S t
        › dt        dz   | z
  › d�}t        |«      }t	        |«      S )uT   ç¬¬pageé¡µ (1-based) åˆ—è¡¨æ�¡ç›®ã€‚å��å�‘åˆ†é¡µ: ç¬¬Né¡µ URL = kfjs/{TOTAL+1-N}.htmr   r   z/zsyz/kfjs/z.htm)r'   r?   r:   Ú_total_pagesrJ   ÚBASE_URL)Úpager7   r    s      r&   Ú
fetch_pagerO   ]   s�   € ð ˆq‚yÜœÓ!ˆÙØˆIÜ& tÓ,ˆÜ˜$ÓÐÜ�qÒÜœÓ!ˆÙÜ*¨4Ó0ˆLÜ�qÒØˆ	ÜˆJ�k¤,°Ñ"2°TÑ"9Ð!:¸$Ð
?€CÜ�C‹=€DÜ�dÓÐr.   c           
      óœ
  ‡‡!— t        | d«      }d}|j                  dd¬«      }|rt        |j                  d¬«      «      }|s@|j                  d«      }|r-t        |j                  d¬«      j	                  d«      d	   «      }|s|}d}t        j                  d
| «      }|r|j                  d«      }|s)t        j                  d| «      }	|	r|	j                  d«      }|j                  dd¬«      }
|
s&|j                  dt        j                  d«      ¬«      }
|
s||dfS |
j                  t        j                  d«      ¬«      D ]&  }|j                  dd¬«      rŒ|j                  «        Œ( |
j                  ddg«      D ]  }|j                  «        Œ g }|
j                  dd¬«      D ]Ú  }|d   }|j                  d¬«      xs |j                  dd«      }t        j                  d|«      s6d|j                  «       v s$d|j                  «       v s|j                  d«      sŒzt        ‰|«      }|j                  d«      s|j                  d«      rd|z   n|}|r|n|j	                  d«      d   }|j                  |||f«       ŒÜ |D ]±  \  }}}|j!                  d|d¬ «      }||_        |j$                  �s|j$                  }d!}t'        |j(                  «      D ]  \  }}||u sŒ|} n |�>t+        |j(                  d!| «      D ]#  }t-        |d"d!«      d#k(  sŒ|j                  «        Œ% |j/                  |«       Œ³ |D ��ch c]  \  }}}|’Œ
 c}}Š!g }|
j                  d$¬%«      D ]ð  }|j0                  d&k(  r|j                  t3        |«      «       Œ-|j0                  d'v r�|j                  dd¬«      }|s|j                  d#«      sŒb|j                  d&«      }t5        ˆ!ˆfd(„|j                  dd¬«      D «       «      }|s|r|j                  t3        |«      «       Œ¸|j                  |«       ŒÊ|j                  dd¬«      }|sŒà|j                  |«       Œò t7        «       }g }|D ]X  }t        j8                  d)dt        j8                  d*d|«      «      }|sŒ2||vsŒ7|j;                  |«       |j                  |«       ŒZ d+j=                  |«      }|j?                  d,d-«      } |D ]  \  }}}||vsŒ|| vsŒ|d.|› d/|› d0�z  }Œ t        j8                  d1d|«      }t        j8                  d2d+|«      jA                  «       }|||fS c c}}w )3u"   æ��å�– (title, date, content_html)zhtml.parserr   Údivr,   )Úclass_T)r+   ú-r   u(   å�‘å¸ƒæ—¶é—´[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   r<   Úv_news_contentÚvsb_content)Úidzvsbcontent_start|vsbcontent_endÚscriptÚstylerD   )rF   rF   z6(?i)\.(pdf|doc|docx|xls|xlsx|zip|rar|wps|et|ofd)(\?|$)ÚdownloadÚattachu   é™„ä»¶)zhttp://zhttps://z//zhttp:ú/éÿÿÿÿÚ_blank)rF   ÚtargetNÚnameÚimgF)Ú	recursiveÚtable)	ÚprQ   Úh1Úh2Úh3ÚulÚolÚliÚ
blockquotec              3   óR   •K  — | ]  }t        ‰|d    «      ‰v xs |d    ‰v –— Œ  y­w)rF   Nr   )Ú.0ÚxÚattached_hrefsÚpage_urls     €€r&   ú	<genexpr>z!extract_detail.<locals>.<genexpr>¾   s:   øè ø€ ò  6àô ˜ ! F¡)Ó,°Ð>Ò]À!ÀFÁ)È~ÐB]Ó]ñ 6ùs   ƒ$'ú\s+ú<[^>]+>z

z&amp;ú&z

<p><a href="z" target="_blank">z</a></p>u   æ‰“å�°æœ¬é¡µ[^\n]*z\n{3,})!r   Úfindr-   Úget_textÚsplitr)   r1   r4   ÚcompileÚfind_allÚ	decomposeÚgetÚlowerÚ
startswithr   r@   Únew_tagÚstringÚparentÚ	enumerateÚcontentsÚlistÚgetattrÚreplace_withr_   ÚstrÚanyr0   r*   r2   Újoinr   r+   )"r7   ro   Ú
list_titleÚsoupr,   ÚtdÚttrI   rH   Údm2ÚcmÚtagÚattachmentsrD   rF   ÚtxtÚabs_urlr_   Únew_arc   Úidx_aÚciÚchildÚ_ÚpartsÚelÚinner_tablesÚel_has_attachÚseenÚfinal_partsÚkeyÚcontentÚcontent_unescapedrn   s"    `                               @r&   Úextract_detailr    q   s  ù€ ä˜˜}Ó-€Dà€EØ	�‰�5 ˆÓ	)€BÙ	Ü˜BŸK™K¨d˜KÓ3Ó4ˆÙØ�Y‰Y�wÓˆÙÜ §¡°$ Ó 7× =Ñ =¸cÓ BÀ1Ñ EÓFˆEÙØˆà€DÜ	�‰Ð>ÀÓ	E€BÙ	Ø�x‰x˜‹{ˆÙÜ�i‰iÐ.°Ó5ˆÙØ—9‘9˜Q“<ˆDà	�‰�5Ð!1ˆÓ	2€BÙØ�Y‰Y�u¤§¡¨NÓ!;ˆYÓ<ˆÙØ�d˜BˆÐð �{‰{¤"§*¡*Ð-OÓ"Pˆ{ÓQò ˆØ�|‰|˜B dˆ|Õ+Ø�M‰M�Oðð �{‰{˜H gÐ.Ó/ò ˆØ�‰�ðð €KØ�[‰[˜ 4ˆ[Ó(ò 	3ˆØ�‰yˆØ�j‰j˜tˆjÓ$Ò:¨¯©¨g°rÓ(:ˆÜ�I‰IÐOÐQUÔVØ §¡£Ñ-°¸T¿Z¹Z»\Ñ1IÈSÏ^É^Ð\dÕMeÜ˜h¨Ó-ˆGØ×%Ñ%Ð&=Ô>Ø/6×/AÑ/AÀ$Ô/G˜' GÒ+ÈW�Ù‘3 7§=¡=°Ó#5°bÑ#9ˆDØ×Ñ  4¨Ð1Õ2ð	3ð (ò Ñˆˆ4�Ø—‘˜S w°x�Ó@ˆØˆŒØ�8‰8ÐØ—‘ˆAØˆEÜ& q§z¡zÓ2ò ‘	��EØ˜A’:Ø�EÙðð Ð Ü! !§*¡*¨V¨eÐ"4Ó5ò *�EÜ˜u f¨dÓ3°uÓ<ØŸ™Õ)ð*ð 	
�‰�uÕðð 4?×?¡- ! Q¨’gÓ?€Nð €EØ�k‰k EˆkÓ*ò "ˆØ�7‰7�gÒØ�L‰Lœ˜R›Ô!ØØ�7‰7ÐTÑTØ—+‘+˜b¨�+Ó-ˆCÙ˜rŸw™w uœ~ØØŸ;™; wÓ/ˆLÜô  6àŸ™ S¨t˜Ó4ô 6ó 6ˆMñ ™}Ø—‘œS ›WÔ%ØØ�L‰L˜Õà—+‘+˜b¨�+Ó-ˆCÚØ—‘˜SÕ!ð'"ô, ‹5€DØ€KØò "ˆÜ�f‰f�V˜R¤§¡¨
°B¸Ó!:Ó;ˆÚ�3˜d’?Ø�H‰H�SŒMØ×Ñ˜qÕ!ð	"ð �k‰k˜+Ó&€GØŸ™¨°Ó5ÐØ'ò TÑˆˆ4�Ø˜'Ò! gÐ5FÒ&FØÐ)¨'¨Ð2DÀTÀFÈ(ÐSÑS‰GðTô �f‰fÐ*¨B°Ó8€GÜ�f‰f�Y ¨Ó0×6Ñ6Ó8€GØ�$˜ÐÐùóU @s   ÍUc                  óŠ  — d} t         j                  dd  }d}|t        |«      k  ru||   }|j                  d«      rt	        |j                  dd«      d   «      } n,|dk(  r'|dz   t        |«      k  rt	        ||dz      «      } |dz  }|dz  }|t        |«      k  rŒut        j                  t        d¬«      }|j                  d«       |j                  d	«       |j                  «       }d}d}d}d}	t        d| dz   «      D �]Ô  }
t        |
«      }|s5|	dz  }	t        d
|
› d|	› d�t         j                  ¬«       |	dk\  r|
dkD  r �n“ŒFd}	t        d|
› dt        |«      › d�«       |D �]l  \  }}}	 |j                  d|f«       |j                  «       r|dz  }Œ2	 t'        |«      }|s|dz  }ŒFt)        |||«      \  }}}|r1t        t+        j,                  dd|«      j/                  «       «      dk  r|dz  }Œ�|s|}|s|}t+        j,                  dd|«      d d }t+        j,                  dd|«      j/                  «       }d|v rdnd}	 |j                  d||||||t0        t2        t4        |df«      }|j6                  }|j                  d||t0        |f«       |j9                  «        |dz  }t        d|› d|d d › �«       t#        j$                  d#«       �Œo �Œ× |jC                  «        t        d$|› d%|› d&|› d'||z   |z   › �«       y # t        j                   $ r t#        j$                  d«       Y �ŒÌw xY w# t        j                   $ rá}d t;        |«      v rÄ|j=                  «        t#        j$                  d!«       	 |j                  d||||||t0        t2        t4        |df«      }|j6                  }|j                  d||t0        |f«       |j9                  «        |dz  }t        d|› d|d d › d"�«       n)# t>        $ r |j=                  «        |dz  }Y n	w xY w|dz  }Y d }~�Œgd }~wt        j@                  $ r	 |dz  }Y �Œ…w xY w)(Nr   r   z--pages=ú=z--pagesé<   )r	   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu     [WARN] ç¬¬u   é¡µæ— æ•°æ�® (fail_streak=ú)r   é   u     ç¬¬u   é¡µ: æ‰¾åˆ° u    æ�¡z'SELECT id FROM gov_raw WHERE page_url=?é   rr   r   é
   éÈ   rq   ú z<tablezªINSERT INTO gov_raw (title, summary, content, page_url, source_url, publish_date, site_name, script_name, group_name, has_table, date_rank) VALUES (?,?,?,?,?,?,?,?,?,?,?)zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)z    [z] é-   Úlockedé   u    (é‡�è¯•æˆ�åŠŸ)g333333Ó?u	   
æ–°å¢ž: u
     é‡�å¤�: u     è¿‡çŸ­/404: u
     æ€»è®¡: )"r   ÚargvÚlenr|   r3   rv   Úsqlite3ÚconnectÚDB_PATHÚexecuteÚcursorr   rO   r   r   ÚfetchoneÚOperationalErrorr   r   r'   r    r)   r*   r+   Ú	SITE_NAMEÚSCRIPT_NAMEÚ
GROUP_NAMEÚ	lastrowidÚcommitr…   Úrollbackr   ÚIntegrityErrorÚclose)Ú	max_pagesÚargsr"   rD   ÚconnÚcÚ	total_newÚ	total_dupÚ
total_skipÚfail_streakrN   rA   r    r,   rI   ÚdhtmlÚd_titleÚd_daterž   ÚsummaryÚ	has_tableÚcurÚridr%   s                           r&   ÚmainrÍ   Þ   si  € Ø€IÜ�8‰8�A�Bˆ<€DØ	€AØ
Œc�$‹iŠ-Ø�‰GˆØ�<‰<˜
Ô#Ü˜AŸG™G C¨›O¨AÑ.Ó/‰IØ�)Š^  A¡¬¨D«	Ò 1Ü˜D  Q¡™KÓ(ˆIØ�‰FˆAØ	ˆQ‰ˆð Œc�$‹i‹-ô �?‰?œ7¨BÔ/€DØ‡L�LÐ,Ô-Ø‡L�LÐ*Ô+Ø�‰‹€AØ€IØ€IØ€Jà€KÜ�a˜ Q™Ó'ó AˆÜ˜4Ó ˆÙØ˜1ÑˆKÜ�L  Ð&@ÀÀÈQÐOÔVY×V`ÑV`ÕaØ˜aÒ D¨1¢HÚØØˆÜ��d�V˜<¬¨E«
 |°4Ð8Ô9Ø %ó 7	ÑˆC�˜ðØ—	‘	ÐCÀcÀVÔLØ—:‘:”<Ø ‘N�IØð  ô ˜S“MˆEÙØ˜a‘�
ØÜ'5°e¸SÀ%Ó'HÑ$ˆG�V˜WÙœc¤"§&¡&¨°R¸Ó"A×"GÑ"GÓ"IÓJÈRÒOØ˜a‘�
ØÙØ�ÙØ�Ü—f‘f˜Z¨¨WÓ5°d°sÐ;ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:ˆGØ%¨Ñ0™°aˆIðØ—i‘ið AØ˜g w°°S¸&Ä)Ì[ÔZdÐfoÐqrÐsóu�ð —m‘m�Ø—	‘	ÐpØ ¬°GÐ<ô>à—‘”Ø˜Q‘�	Ü˜˜f˜X R¨°°¨ ~Ð6Ô7ô, �J‰J�sŽOòo7	ðAðF 	‡J�J„LÜ	ˆJ�y�k ¨I¨;°nÀZÀLÐPZÐ[dÐenÑ[nÐoyÑ[yÐZzÐ
{Õ|øôi ×+Ñ+ò Ü—
‘
˜1”Úðûô8 ×+Ñ+ò $Øœs 1›vÑ%Ø—M‘M”OÜ—J‘J˜q”Mð(ØŸi™ið IØ$ g¨w¸¸SÀ&Ì)ÔU`ÔblÐnwÐyzÐ{ó}˜ð "Ÿm™m˜ØŸ	™	Ð"xØ#&¨´¸GÐ"DôFàŸ™œØ! Q™˜	Ü  f X¨R°¸¸°¨~¸_ÐMÕNøÜ$ò (ØŸ™œØ" a™š
ð(úð  !‘O�JÿùÜ×)Ñ)ò Ø˜Q‘“	ðúsV   Å-(LÉA8L4Ì(L1Ì0L1Ì4QÍ2P#Í:A9O4Ï3P#Ï4P	ÐP#ÐP	ÐP#Ð#QÑQÚ__main__)é   r¦   )!Ú__doc__r   r)   r   r¯   ÚsslÚurllib.requestr   Úurllib.parser   Úbs4r   r¶   r·   r¸   rM   r?   r±   Úcreate_default_contextr   Úcheck_hostnameÚ	CERT_NONEÚverify_moder   r'   r-   r:   rJ   rL   rO   r    rÍ   Ú__name__© r.   r&   ú<module>rÛ      s¸   ðñ÷ 3× 2× 2Ý  Ý à*€	Ø$€Ø€
Ø%€ØÐ&Ñ&€Ø
€à €c× Ñ Ó"€Ø€Ô Ø—-‘-€„ð @ØOØ0ñ€óòò$òð0 €òò(j òZZ}ðz ˆzÒÙ…Fð r.   