Ë
    V_Šjj2  ã                   óÔ   — 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dl
mZ ddlmZmZ dZedz   Zedz   Zd	Zd
Zdddedz   dœZdZdd„Zd„ Zd„ Zd„ Zedk(  r e«        yy)uK  
è‹�å°¼ç‰¹å�³æ——äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Šçˆ¬è™«
CMS: å†…å®¹ç®¡ç�†ç³»ç»Ÿ(eportal/dynamic JS)
åˆ—è¡¨: /sntyq/gk/tzgg/index.html (ç¬¬1é¡µ) / 83ef7296-N.html (ç¬¬Né¡µ, 10æ�¡/é¡µ, å…±158é¡µ)
è¯¦æƒ…: /sntyq/gk/tzgg/{timestamp}/index.html
æ ‡é¢˜: a[title] å±žæ€§(åˆ—è¡¨) / meta ArticleTitle(è¯¦æƒ…)
æ­£æ–‡: div#docContent (p/table/img)
é    N)ÚBeautifulSoup)Úurljoin)ÚdatetimeÚ	timedeltazhttps://www.sntyq.gov.cnz/sntyq/gk/tzgg/index.htmlz/sntyq/gk/tzgg/83ef7296-{}.htmlz/root/search.dbu   sntyq.gov.cn-é€šçŸ¥å…¬å‘ŠzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36zJtext/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8zzh-CN,zh;q=0.9,en;q=0.8z/sntyq/gk/tzgg/)z
User-AgentÚAcceptzAccept-LanguageÚRefereré   c                 óB  — |xs t        j                  «       }	 |j                  | t        d¬«      }d|_        |j
                  dk7  rt        d|j
                  › d| › �«       y t        |j                  d«      S # t        $ r}t        d| › d	|› �«       Y d }~y d }~ww xY w)
Né   )ÚheadersÚtimeoutzutf-8éÈ   z  WARNING: HTTP z for zhtml.parserz  ERROR: fetch failed: z - )
ÚrequestsÚSessionÚgetÚHEADERSÚencodingÚstatus_codeÚprintr   ÚtextÚ	Exception)ÚurlÚsessionÚsÚrespÚes        ú%/root/gov_crawler/crawl_sntyq_tzgg.pyÚget_soupr   &   s�   € ØÒ%”8×#Ñ#Ó%€Að	Ø�u‰u�S¤'°2ˆuÓ6ˆØˆŒØ×Ñ˜sÒ"ÜÐ$ T×%5Ñ%5Ð$6°e¸C¸5ÐAÔBØÜ˜TŸY™Y¨Ó6Ð6øÜò ÜÐ'¨ u¨C°¨sÐ3Ô4Üûðús   šA	A: Á$A: Á:	BÂBÂBc                 óÂ  — g }| j                  dddi¬«      D ]Ä  }|j                  dd«      }|j                  d«      xs dj                  «       }|s|j                  d¬	«      }|r|sŒQ|j	                  d
«      st        t        |«      }d}t        j                  d|«      }|r$|j                  d«      }|dd › d|dd › d|dd › �}|j                  |||dœ«       ŒÆ |S )u0   ä»Žåˆ—è¡¨é¡µæ��å�–æ–‡ç« é“¾æŽ¥ã€�æ ‡é¢˜å’Œæ—¥æœŸÚaÚistitleÚtrue©ÚattrsÚhrefÚ ÚtitleT©ÚstripÚhttpz/(\d{8})\d+é   Né   ú-é   é   )r'   r   Údate)Úfind_allr   r)   Úget_textÚ
startswithr   ÚBASE_URLÚreÚsearchÚgroupÚappend)ÚsoupÚitemsr    r%   r'   Údate_strÚmÚtss           r   Úextract_list_pager>   4   sñ   € à€Eà�]‰]˜3 y°&Ð&9ˆ]Ó:ò FˆØ�u‰u�V˜RÓ ˆØ—‘�w“Ò% 2×,Ñ,Ó.ˆÙØ—J‘J T�JÓ*ˆEÙ™DØà�‰˜vÔ&Üœ8 TÓ*ˆDð ˆÜ�I‰I�n dÓ+ˆÙØ—‘˜“ˆBØ˜R˜a˜&˜  2 a¨ 7 )¨1¨R°°!¨W¨IÐ6ˆHà�‰˜u¨T¸8ÑDÕEð%Fð( €Ló    c           	      óŒ  ‡— d}| j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|sf| j                  g d¢«      D ]P  Š‰j                  d«      sŒt	        ˆfd	„d
D «       «      sŒ*‰j                  d¬«      }|sŒ?t        |«      dkD  sŒN|} n |st        d|› �«       yd}| j                  dddi¬«      }|r'|j                  d«      r|d   j                  «       dd }|s9| j                  «       }t        j                  d|«      }|r|j                  d«      }d}	| j                  dddi¬«      }
|
r$|
j                  d«      r|
d   j                  «       }	|	sG| j                  «       }t        j                  d|«      }|r|j                  d«      j                  «       }	| j                  dd¬«      }|s| j                  dd¬«      }|s| j                  dd¬«      }g }g }g }|�r¦|j                  d¬«      D �]¼  }|j                  dv r6|j                  d¬«      }|sŒ't        |«      dkD  sŒ6|j                  |«       ŒH|j                  dk(  rt        |«      }|j                  |«       Œt|j                  d k(  ru|j                  d!d«      }|j                  d"d«      }|sŒª|j                  d#«      st        t         |«      }|j                  ||d$œ«       |j                  d%|› d&|› d'�«       Œø|j                  d(k(  s�Œ	|j                  d)d«      }|s�Œt        j                  d*|t        j"                  «      s�ŒF|j                  d#«      st        t         |«      }|j                  d¬«      xs |j                  d+d«      xs d,}|j                  ||d-œ«       |j                  d.|› d&|› d'�«       �Œ¿ |�sÑ|j                  g d/¢«      D �]º  }|j                  d0v rJ|j                  d¬«      }|sŒ't        |«      dkD  sŒ6|j%                  d«      }|rŒJ|j                  |«       Œ\|j                  dk(  r|j                  t        |«      «       Œ†|j                  d k(  ra|j                  d!d«      }|j                  d"d«      }|sŒ¼|j                  d#«      st        t         |«      }|j                  d%|› d&|› d'�«       Œö|j                  d(k(  s�Œ|j                  d)d«      }|s�Œt        j                  d*|t        j"                  «      s�ŒD|j                  d#«      st        t         |«      }|j                  d¬«      xs |j                  d+d«      xs d,}|j                  ||d-œ«       |j                  d.|› d&|› d'�«       �Œ½ d1j'                  |«      }t        |j                  «       «      d2k  r;d3|› d4|› d5�}|D ]  }|d6|d"   › d&|d!   › d'�z  }Œ |D ]  }|d7|d   › d&|d8   › d'�z  }Œ t        |«      d9kD  r|dd9 n|}|||||	|rt)        j*                  |d¬:«      d;œS dd;œS )<u   æ��å�–è¯¦æƒ…é¡µå†…å®¹r&   ÚmetaÚnameÚArticleTitler#   Úcontent)ÚspanÚdivÚh1Úh2Úclassc              3   ó€   •K  — | ]5  }|d j                  ‰j                  dg «      «      j                  «       v –— Œ7 y­w)ú rI   N)Újoinr   Úlower)Ú.0ÚcÚels     €r   ú	<genexpr>z!extract_detail.<locals>.<genexpr>Z   s4   øè ø€ Ò&|ÐVW q¨C¯H©H°R·V±V¸GÀRÓ5HÓ,I×,OÑ,OÓ,QÔ'QÑ&|ùs   ƒ;>)Útitr'   Úbtzcon-ttTr(   r	   z  WARNING: no title for NÚPubDateé
   u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r+   ÚContentSourceu   æ�¥æº�[ï¼š:]\s*([^\n\r]+)rF   Ú
docContent)Úid)Úclass_zcon-nrF)Ú	recursive)ÚprF   Úsectioné   ÚtableÚimgÚsrcÚaltr*   )r`   ra   z![z](ú)r    r%   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r'   u   é™„ä»¶)rB   r   ú[)r[   rF   r^   r_   r    )r[   rF   z

é   z<p><a href="z">z</a></p>z
![z
[r   i,  )Úensure_ascii)r'   rD   ÚsummaryÚpublish_dateÚ
source_urlÚattachments)Úfindr   r)   r1   Úanyr2   Úlenr   r5   r6   r7   rB   r8   Ústrr3   r   r4   ÚIÚfind_parentrL   ÚjsonÚdumps)r9   r   r'   Ú
meta_titleÚtrg   Úmeta_pubÚ	page_textr<   rh   Úmeta_srcÚcontent_divÚcontent_partsri   ÚimagesÚchildÚtxtÚhtml_strr`   ra   r%   Úa_titleÚparent_tablerD   r_   Úattrf   rP   s                              @r   Úextract_detailr€   O   s
  ø€ ð €EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆñ Ø—-‘-Ò ;Ó<ò 	ˆBØ�v‰v�g�¤3Ó&|Ð[{Ô&|Õ#|Ø—K‘K d�KÓ+�Úœ˜Q› !›Ø�EÙð	ñ ÜÐ(¨¨Ð.Ô/Øð €LØ�y‰y˜¨°	Ð':ˆyÓ;€HÙ�H—L‘L Ô+Ø 	Ñ*×0Ñ0Ó2°3°BÐ7ˆñ Ø—M‘M“Oˆ	Ü�I‰IÐAÀ9ÓMˆÙØŸ7™7 1›:ˆLð €JØ�y‰y˜¨°Ð'@ˆyÓA€HÙ�H—L‘L Ô+Ø˜iÑ(×.Ñ.Ó0ˆ
áØ—M‘M“Oˆ	Ü�I‰IÐ2°IÓ>ˆÙØŸ™ ›×)Ñ)Ó+ˆJð —)‘)˜E l�)Ó3€KÙØ—i‘i ¨l�iÓ;ˆÙØ—i‘i ¨h�iÓ7ˆà€MØ€KØ€Fâà ×)Ñ)°EÐ)Ó:ó 	AˆEØ�z‰zÐ4Ñ4Ø—n‘n¨4�nÓ0�Úœ3˜s›8 a›<Ø!×(Ñ(¨Õ-Ø—‘˜wÒ&Ü˜u›:�Ø×$Ñ$ XÕ.Ø—‘˜uÒ$Ø—i‘i  rÓ*�Ø—i‘i  rÓ*�ÚØŸ>™>¨&Ô1Ü%¤h°Ó4˜Ø—M‘M¨#°cÑ":Ô;Ø!×(Ñ(¨2¨c¨U°"°S°E¸Ð);Õ<Ø—‘˜sÔ"Ø—y‘y ¨Ó,�ÛœBŸI™IÐ&KÈTÔSU×SWÑSWÖXØŸ?™?¨6Ô2Ü&¤x°Ó6˜Ø#Ÿn™n°4˜nÓ8Ò^¸E¿I¹IÀgÈrÓ<RÒ^ÐV^�GØ×&Ñ&°ÀÑ'EÔFØ!×(Ñ(¨1¨W¨I°R¸°v¸QÐ)?Ö@ð/	Aò6 Ø$×-Ñ-Ò.OÓPó E�Ø—:‘: Ñ-ØŸ.™.¨t˜.Ó4�CÚœs 3›x¨!›|à',×'8Ñ'8¸Ó'A˜Ú+Ø)×0Ñ0°Õ5Ø—Z‘Z 7Ò*Ø!×(Ñ(¬¨U«Õ4Ø—Z‘Z 5Ò(ØŸ)™) E¨2Ó.�CØŸ)™) E¨2Ó.�CÚØ"Ÿ~™~¨fÔ5Ü")¬(°CÓ"8˜CØ%×,Ñ,¨r°#°°b¸¸¸QÐ-?Õ@Ø—Z‘Z 3Ô&Ø Ÿ9™9 V¨RÓ0�DÛ¤§	¡	Ð*OÐQUÔWY×W[ÑW[Ö \Ø#Ÿ™¨vÔ6Ü#*¬8°TÓ#:˜DØ"'§.¡.°t .Ó"<Ò"bÀÇ	Á	È'ÐSUÓ@VÒ"bÐZb˜Ø#×*Ñ*°GÀDÑ+IÔJØ%×,Ñ,¨q°°	¸¸D¸6ÀÐ-CÖDð1Eð4 �k‰k˜-Ó(€Gô ˆ7�=‰=‹?Ó˜bÒ Ø    R¨ w¨hÐ7ˆØò 	:ˆCØ˜˜c %™j˜\¨¨C°©J¨<°qÐ9Ñ9‰Gð	:àò 	:ˆCØ˜˜S ™[˜M¨¨C°©J¨<°qÐ9Ñ9‰Gð	:ô  # 7›|¨cÒ1ˆg�d�s‰m°w€Gð ØØØ$Ø ÙFQ”t—z‘z +¸EÔBñð ð XZñð r?   c                  ó²	  — dd l } | j                  d¬«      }|j                  dt        t        d¬«       |j                  «       }|j                  }t        j                  «       }g }t        «       }d}t        dt        › d|› d	�«       t        d
|d
z   «      D �]  }|d
k(  rt        }	nt        j                  |«      }	t        d|› d|› d|	› �«       t!        |	|«      }
|
s#t        d«       |d
z  }|dk\  rt        d«        n©Œjt#        |
«      }|st        d«        nŽd}|D ]4  }|d   |vsŒ|j%                  |d   «       |j'                  |«       |d
z  }Œ6 d}t        dt)        |«      › d|› dt)        |«      › d�«       |dk(  rt        d«        nt+        j,                  d«       �Œ t        dt)        |«      › d�«       t/        j0                  t2        «      }d}d}d}g }t5        |«      D �]Ô  \  }}	 t        d|d
z   › dt)        |«      › d|d   d d › d�«       t!        |d   |«      }
|
s|d
z  }ŒFt7        |
|d   «      }|s|d
z  }Œ]|d   s|d   |d<   |d   }|d    xs |d!   }|d"   }|d#   }|d   }|d$   }|d%   }|j9                  d&|t        f«      }|j;                  «       }|r||j9                  d'|||||||d   f«       |d
z  }|j'                  d(j                  |d   |j=                  d)d*«      t        j=                  d)d*«      |j=                  d)d*«      «      «       n†|j9                  d+|||t        ||||f«      }|d
z  }|j>                  }|j'                  d,j                  ||j=                  d)d*«      t        j=                  d)d*«      |j=                  d)d*«      «      «       t+        j,                  d-«       �Œ× |jC                  «        |jE                  «        |rŽt        d/t)        |«      › d0�«       d1d2jG                  |«      z   d3z   }!	 tI        jJ                  d4t2        |!gd5d5d6¬7«      }"|"jL                  r't        d8|"jL                  jO                  «       › �«       nt        d9«       t        d;|› d<|› d=|› d�«       y # t@        $ r} t        d.| › �«       |d
z  }Y d } ~ �ŒÀd } ~ ww xY w# t@        $ r} t        d:| › �«       Y d } ~ Œ\d } ~ ww xY w)>Nr   u.   è‹�å°¼ç‰¹å�³æ——äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘Šçˆ¬è™«)Údescriptionz--max-pagesu   æœ€å¤§çˆ¬å�–é¡µæ•°)ÚtypeÚdefaultÚhelpu   çˆ¬å�– u   ï¼Œå‰�u   é¡µ...r+   u   
åˆ—è¡¨é¡µ ú/z: u     FAILED: æ— æ³•èŽ·å�–é¡µé�¢é   u     è¿žç»­3é¡µå¤±è´¥ï¼Œå�œæ­¢u     ç©ºåˆ—è¡¨ï¼Œå�œæ­¢åˆ†é¡µr   u     æœ¬é¡µu   æ�¡ï¼Œæ–°å¢žu   æ�¡ï¼Œç´¯è®¡u   æ�¡u     æ— æ–°å†…å®¹ï¼Œå�œæ­¢åˆ†é¡µg      à?u
   
å…±èŽ·å�–u!   ç¯‡æ–‡ç« ï¼Œå¼€å§‹æŠ“å�–è¯¦æƒ…...z  [z] r'   é(   z...rg   r0   rD   rf   rh   ri   z7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?z¢
                    UPDATE gov_raw SET title=?, content=?, summary=?, publish_date=?,
                    source_url=?, attachments=? WHERE id=?
                z_INSERT OR REPLACE INTO gov_search(rowid, title, site_name, summary) VALUES ({},'{}','{}','{}');ú'z''z×
                    INSERT INTO gov_raw (title, content, summary, site_name,
                    page_url, publish_date, source_url, attachments)
                    VALUES (?, ?, ?, ?, ?, ?, ?, ?)
                z^INSERT OR IGNORE INTO gov_search(rowid, title, site_name, summary) VALUES ({},'{}','{}','{}');g333333Ó?z	  ERROR: u     å�Œæ­¥FTSç´¢å¼• u    æ�¡...zBEGIN;
ú
z
COMMIT;Úsqlite3Té<   )Úcapture_outputr   r   z  FTS batch error: u     FTSå�Œæ­¥å®Œæˆ�z  FTS batch failed: u   
å®Œæˆ�ï¼�æ–°å¢žu   æ�¡ï¼Œæ›´æ–°u   æ�¡ï¼Œé”™è¯¯)(ÚargparseÚArgumentParserÚadd_argumentÚintÚMAX_PAGES_DEFAULTÚ
parse_argsÚ	max_pagesr   r   Úsetr   Ú	SITE_NAMEÚrangeÚLIST_URL_P1ÚLIST_URL_PNÚformatr   r>   Úaddr8   rl   ÚtimeÚsleepr‹   ÚconnectÚDB_PATHÚ	enumerater€   ÚexecuteÚfetchoneÚreplaceÚ	lastrowidr   ÚcommitÚcloserL   Ú
subprocessÚrunÚstderrr)   )#rŽ   ÚparserÚargsr”   r   Ú	all_itemsÚ	seen_urlsÚempty_pagesÚpager   r9   r:   Ú	new_countÚitemÚconnÚinsertedÚupdatedÚerrorsÚfts_sqlsÚidxÚdetailÚpage_urlrg   rD   rf   r'   rh   ri   ÚcurÚrowÚcur2Úridr   Ú	batch_sqlÚrs#                                      r   ÚmainrÀ   Ö   sE  € ÛØ×$Ñ$Ð1aÐ$Ób€FØ
×Ñ˜¬CÔ9JÐQeÐÔfØ×ÑÓ€Dà—‘€IÜ×ÑÓ €GØ€IÜ“€IØ€Kä	ˆG”I�;˜f Y K¨vÐ
6Ô7ä�a˜ Q™Ó'ó $ˆØ�1Š9Ü‰Cä×$Ñ$ TÓ*ˆCä�˜T˜F ! I ;¨b°°Ð6Ô7Ü˜˜WÓ%ˆÙÜÐ0Ô2Ø˜1ÑˆKØ˜aÒÜÐ3Ô4ÙØä! $Ó'ˆÙÜÐ.Ô0Ùð ˆ	Øò 	ˆDØ�E‰{ )Ò+Ø—‘˜d 5™kÔ*Ø× Ñ  Ô&Ø˜Q‘‘	ð		ð ˆÜ�œ˜U›˜ L°°¸<ÌÈIËÐGWÐWZÐ[Ô\à˜Š>ÜÐ1Ô2Ùä�
‰
�3ŽðI$ôL 
ˆKœ˜I›Ð'Ð'HÐ
IÔJä�?‰?œ7Ó#€DØ€HØ€GØ€FØ€Hä˜yÓ)ó =‰	ˆˆTð<	Ü�C˜˜A™�w˜a¤ I£Ð/¨r°$°w±-ÀÀÐ2DÐ1EÀSÐIÔJÜ˜D ™K¨Ó1ˆDÙØ˜!‘�Øä# D¨$¨u©+Ó6ˆFÙØ˜!‘�Øà˜'’?Ø"& w¡-��w‘à˜E‘{ˆHØ! .Ñ1ÒA°T¸&±\ˆLØ˜YÑ'ˆGØ˜YÑ'ˆGØ˜7‘OˆEØ Ñ-ˆJØ  Ñ/ˆKð —,‘,ØIØœ9Ð%óˆCð —,‘,“.ˆCáØ—‘ð ð ˜W g¨|¸ZÈÐVYÐZ[ÑV\Ð]ô_ð ˜1‘�Ø—‘ð  !B÷  !Iñ  !IØ˜‘FØ—M‘M # tÓ,Ü×%Ñ% c¨4Ó0Ø—O‘O C¨Ó.ó	!0õ 1ð —|‘|ð %ð ˜W g¬yØ ¨j¸+ðGó	H�ð ˜A‘�Ø—n‘n�Ø—‘ð  !A÷  !Hñ  !HØØ—M‘M # tÓ,Ü×%Ñ% c¨4Ó0Ø—O‘O C¨Ó.ó	!0ô 1ô �J‰J�sŽOðs=ð~ 	‡K�K„MØ‡J�J„Lñ ÜÐ"¤3 x£= /°Ð9Ô:Ø §¡¨8Ó!4Ñ4°{ÑBˆ	ð	.Ü—‘ 	¬7°IÐ>Ø,0°tÀRôIˆAà�xŠxÜÐ+¨A¯H©H¯N©NÓ,<Ð+=Ð>Õ?äÐ)Ô+ô 
Ð˜h˜Z |°G°9¸LÈÈÐPSÐ
TÕUøô+ ò 	Ü�I˜a˜S�/Ô"Ø�a‰KŽFûð	ûô$ ò 	.ÜÐ(¨¨Ð,×-Ñ-ûð	.ús>   Ç5=RÈ3RÉ
E8RÐAR5 Ò	R2ÒR-Ò-R2Ò5	SÒ>SÓSÚ__main__)N)Ú__doc__r5   Úsysrp   rœ   r§   r‹   r   Úbs4r   Úurllib.parser   r   r   r4   r˜   r™   rŸ   r–   r   r’   r   r>   r€   rÀ   Ú__name__© r?   r   ú<module>rÈ      s    ðñó 
Û 
Û Û Û Û Û Ý Ý  ß (à%€ØÐ4Ñ4€ØÐ:Ñ:€Ø
€Ø'€	ð DØZØ0ØÐ+Ñ+ñ	€ð Ð óòò6DòNLVð^ ˆzÒÙ…Fð r?   