Ë
    ¸¬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ZddlmZ ddl	m
Z
 dZdZdZdZd	Zd
dddœZdZg d¢Zd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uq   
å±¯ç•™åŒºäººæ°‘æ”¿åºœ - çŽ¯å¢ƒä¿�æŠ¤é¢†åŸŸ çˆ¬è™«
http://www.tunliu.gov.cn/tlzw/zwgk/zfxxgkml/gzdt_203764/hjbh/
é    N)Údatetime)ÚBeautifulSoupz/root/search.dbzhttp://www.tunliu.gov.cnu   å±¯ç•™åŒºäººæ°‘æ”¿åºœu   çŽ¯å¢ƒä¿�æŠ¤é¢†åŸŸé   zMMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0z?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-Languageé   )ÚxzxkÚhj_xzcf1Úggfwc                 ó  — t        d«      D ]C  }	 |j                  | t        t        ¬«      }d|_        |j
                  dk(  r|j                  c S ŒE y # t        $ r$}|dk  rt        j                  d«       Y d }~Œod }~ww xY w)Né   )ÚheadersÚtimeoutzutf-8éÈ   é   )
ÚrangeÚgetÚHEADERSÚTIMEOUTÚencodingÚstatus_codeÚtextÚ	ExceptionÚtimeÚsleep)ÚurlÚsessionÚattemptÚrÚes        ú!/root/gov_crawler/crawl_tunliu.pyÚget_pager!      sy   € Ü˜“8ò ˆð	Ø—‘˜C¬¼'�ÓBˆAØ ˆAŒJØ�}‰} Ò#Ø—v‘v’ð $ð	ð øô ò 	Ø˜Š{Ü—
‘
˜1”ÿøð	ús   �=AÁ	B ÁA;Á;B c                 ó   — g }t        | d«      }|j                  dd¬«      }|s|S |j                  d«      D ]Ô  }|j                  dd¬«      }|sŒ|d	   }|j                  d
«      r	||dd z   }n%|j                  d«      s||j	                  d«      z   }|j                  dd«      xs |j                  d¬«      }|j                  d«      }	|	r"|	j                  d¬«      j                  dd«      nd}
|sŒ½|sŒÀ|j                  |||
dœ«       ŒÖ |S )z%Parse list page from ul.main li itemsúhtml.parserÚulÚmain©Úclass_ÚliÚaT©Úhrefr+   z./r   NÚhttpú/ÚtitleÚ ©ÚstripÚspanõ   Â )r   r.   Údate)	r   ÚfindÚfind_allÚ
startswithÚlstripr   Úget_textÚreplaceÚappend)ÚhtmlÚbase_sub_urlÚitemsÚsoupr$   r(   r)   r+   r.   r2   r4   s              r    Ú
parse_listr@   *   s  € à€EÜ˜˜}Ó-€DØ	�‰�4 ˆÓ	'€BÙØˆØ�k‰k˜$Óò FˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰yˆà�?‰?˜4Ô Ø $ q r (Ñ*‰DØ—‘ Ô(Ø $§+¡+¨cÓ"2Ñ2ˆDà—‘�g˜rÓ"Ò< a§j¡j°t jÓ&<ˆà�w‰w�v‹ˆÙ@Dˆt�}‰} 4ˆ}Ó(×0Ñ0°¸Ô<È"ˆÚ’EØ�L‰L °¸tÑDÕEð!Fð" €Ló    c           	      óî
  — t        | d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }|sG|j                  d«      }|r4|j	                  d	¬
«      }|j                  dd«      j                  dd«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}	|j                  dddi¬«      }
|
r$|
j                  d«      r|
d   j                  «       }	|j                  dd¬«      xs |j                  dd¬«      }|r|j                  dd¬«      }|r|}g }g }d}d}t        «       }|�r|j                  d«      D ]\  }|j                  dd«      }|r|j                  d«      s	t        |z   }|j                  dd«      }d	}|j                  d|› d|› d�«       Œ^ t        |j                  «      D �]ð  }|j                  dk(  r9|j                  t        |«      «       |t        |j	                  d	¬
«      «      z  }ŒL|j                  dk(  rK|j	                  d	¬
«      }|sŒp||vsŒu|j!                  |«       |j                  |«       |t        |«      z  }Œ¦|j                  dk(  sŒ¶|j                  d«      }|r8|j                  t        |«      «       |t        |j	                  d	¬
«      «      z  }|j                  dd¬«      D ]^  }|j	                  d	¬
«      }|sŒ||vsŒ|j#                  d «      rŒ/|j!                  |«       |j                  |«       |t        |«      z  }Œ` |j                  d«      D ]h  }|j                  dd«      }|r|j                  d«      s	t        |z   }|j                  dd«      }d	}d|› d|› d�|vsŒQ|j                  d|› d|› d�«       Œj �Œó |j                  d!d	¬"«      D ]ƒ  }|d#   }t%        j&                  d$|t$        j(                  «      sŒ.|j                  d«      s	t        |z   }|j	                  d	¬
«      xs |j+                  d%«      d&   }|j                  ||d'œ«       Œ… |d(k  r”d)|› d|› d�}|r'|g|D �cg c]  }|j                  d«      sŒ|‘Œ c}z   }nb|g}|D �cg c]-  }t%        j&                  d*|d+   t$        j(                  «      sŒ,|‘Œ/ }}|r%|D ]   }|j                  d,|d   › d|d+   › d�«       Œ" d-j-                  |«      }|r(t%        j.                  d.d/|d0d1 «      j                  «       n|} |rt1        j2                  |d¬2«      nd3}!|||| |!fS c c}w c c}w )4zParse detail pager#   r/   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentr.   Tr0   u   _å±¯ç•™åŒºäººæ°‘æ”¿åºœu   _é•¿æ²»å¸‚å±¯ç•™åŒºäººæ°‘æ”¿åºœÚPubDateÚContentSourceÚdivzarticle-conr&   Ú
TRS_EditorÚTRS_UEDITORr   FÚimgÚsrcr,   Úaltz![z](ú)ÚtableÚp)Ú	recursiveÚtdr)   r*   r+   z"\.(pdf|doc|docx|xls|xlsx|zip|rar)$r-   éÿÿÿÿ)rD   r   é   ú[z\.pdf$r   u   [PDFé™„ä»¶: z

z\s+ú Nr   )Úensure_asciiú[])r   r5   r   r1   r9   r:   Úsetr6   r7   ÚBASE_URLr;   ÚlistÚchildrenrD   ÚstrÚlenÚaddÚfind_parentÚreÚsearchÚIÚsplitÚjoinÚsubÚjsonÚdumps)"r<   r   r?   r.   Ú
meta_titleÚtitle_elÚtr4   Ú	meta_dateÚsourceÚmeta_sourceÚcontent_divÚinnerÚcontent_partsÚattachmentsÚtotal_text_lenÚfound_imagesÚ
seen_textsrM   rN   rO   Úchildr   ÚtblrR   r)   r+   rD   ÚfallbackÚ	pdf_linksÚpdfrG   ÚsummaryÚattachments_jsons"                                     r    Úparse_detailr   D   ss  € ä˜˜}Ó-€Dð €EØ—‘˜6¨&°.Ð)A�ÓB€JÙ�j—n‘n YÔ/Ø˜9Ñ%×+Ñ+Ó-ˆÙØ—9‘9˜WÓ%ˆÙØ×!Ñ!¨Ð!Ó-ˆAØ—I‘IÐ6¸Ó;×CÑCÐDeÐgiÓjˆEð €DØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜Ñ#×)Ñ)Ó+ˆð €FØ—)‘)˜F¨6°?Ð*C�)ÓD€KÙ�{—‘ yÔ1Ø˜YÑ'×-Ñ-Ó/ˆð —)‘)˜E¨-�)Ó8Òa¸D¿I¹IÀeÐT`¸IÓ<a€KÙà× Ñ  ¨}Ð Ó=ˆÙØˆKØ€MØ€KØ€NØ€LÜ“€JâØ×'Ñ'¨Ó.ò 	5ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨&Ô1Ü ‘n�Ø—'‘'˜% Ó$ˆCØˆLØ× Ñ  2 c U¨"¨S¨E°Ð!3Õ4ð	5ô ˜+×.Ñ.Ó/ó 	AˆEØ�z‰z˜WÒ$Ø×$Ñ$¤S¨£ZÔ0Ø¤# e§n¡n¸4 nÓ&@Ó"AÑA‘Ø—‘˜sÒ"Ø—~‘~¨D�~Ó1�Ú˜D¨
Ò2Ø—N‘N 4Ô(Ø!×(Ñ(¨Ô.Ø"¤c¨$£iÑ/‘NØ—‘˜uÓ$à—j‘j Ó)�ÙØ!×(Ñ(¬¨S«Ô2Ø"¤c¨#¯,©,¸T¨,Ó*BÓ&CÑC�NàŸ™¨°u˜Ó=ò 4�AØŸ:™:¨D˜:Ó1�DÚ ¨JÒ 6¸q¿}¹}ÈTÕ?RØ"Ÿ™ tÔ,Ø%×,Ñ,¨TÔ2Ø&¬#¨d«)Ñ3™ð4ð !Ÿ>™>¨%Ó0ò A�CØŸ'™' %¨Ó,�CÙ 3§>¡>°&Ô#9Ü&¨™n˜ØŸ'™' %¨Ó,�CØ#'�LØ˜C˜5  3 % qÐ)°Ò>Ø%×,Ñ,¨r°#°°b¸¸¸QÐ-?Õ@òAð1	AðB ×%Ñ% c°Ð%Ó5ò 	@ˆAØ�V‘9ˆDÜ�y‰yÐ>ÀÄbÇdÁdÕKØ—‘ vÔ.Ü# d™?�DØ—z‘z¨�zÓ-ÒD°·±¸C³ÀÑ1D�Ø×"Ñ"¨D¸Ñ#>Õ?ð	@ð ˜ÒØ�u�g˜R ˜u AÐ&ˆÙØ%˜J°]Ö)Y°ÀaÇlÁlÐSWÕFXª!Ò)YÑY‰Mà%˜JˆMØ$/ÖX˜q´2·9±9¸YÈÈ%ÉÔRT×RVÑRVÕ3WšÐXˆIÐXÙØ$ò V�CØ!×(Ñ(¨<¸¸F¹°}ÀBÀsÈ5ÁzÀlÐRSÐ)TÕUðVð �k‰k˜-Ó(€GÙ<CŒb�f‰f�V˜S '¨$¨3 -Ó0×6Ñ6Ô8È€GÙFQ”t—z‘z +¸EÕBÐW[Ðà�$˜ Ð*:Ð:Ð:ùò *Zùò Ys   ÒU-Ò"U-Ò3-U2Ó!U2c                 ó  — |j                  «       }d}| D ]Õ  }|j                  dd«      }|rb	 t        j                  |d d d«      }|t        j                  «       j                  dddd¬«      t        d«      j                  d¬	«      z   kD  rd}|j                  d
|d   t        |d   ||j                  dd«      |j                  dd«      |j                  dd«      t        f«       |dz  }Œ× |j                  «        |S #  d}Y ŒwxY w)Nr   r4   r/   é
   z%Y-%m-%d)ÚhourÚminuteÚsecondÚmicrosecondr   r   )ÚdayszÔ
            INSERT OR REPLACE INTO gov_raw
            (page_url, site_name, title, publish_date, summary, content, attachments, status, group_name)
            VALUES (?, ?, ?, ?, ?, ?, ?, 'active', ?)
        r   r.   r}   rG   rt   rZ   é   )Úcursorr   r   ÚstrptimeÚnowr:   Ú
__import__Ú	timedeltaÚexecuteÚ	SITE_NAMEÚcommit)r>   Úconnrˆ   ÚcountÚitemÚpublish_dateÚdts          r    Ú
save_to_dbr•   ²   s!  € Ø�[‰[‹]€FØ€EØò ˆØ—x‘x ¨Ó+ˆÙð"Ü×&Ñ& |°C°RÐ'8¸*ÓE�ØœŸ™›×.Ñ.°A¸aÈÐWXÐ.ÓYÔ\fÐgqÓ\r×\|Ñ\|ð  CEÐ\|ó  ]Fñ  Fò  FØ#%�Lð 	�‰ð ð
 �‰Kœ D¨¡MØ˜$Ÿ(™( 9¨bÓ1Ø�H‰H�Y Ó# T§X¡X¨m¸TÓ%BÜð	
ô			ð 	�‰
‰ð)ð* 	‡K�K„MØ€Løð"Ø!’ús   ­A!C?Ã?Dc                  óÞ  — dd l } | j                  «       }|j                  dt        t        ¬«       |j                  ddt
        d¬«       |j                  «       }|j                  }|j                  }d}t        j                  «       }g }|D �]  }t        d	|› d
�d¬«       |› d|› d�}	t        d|dz   «      D ]à  }
|
dk(  r|	}n|	› d|
dz
  › d�}t        d|› d|
› d|› �d¬«       t        ||«      }|st        dd¬«        Œut        ||	«      }|st        dd¬«        Œ’t        dt        |«      › d�d¬«       |
dk(  rCt!        j"                  d|«      }|r+t        |j%                  d«      «      }t        d|› d�d¬«       |j'                  |«       |
|k\  sŒß �Œ �Œ |st        d«       y t        dt        |«      › d�d¬«       g }t)        |«      D ]»  \  }}t        d|dz   › dt        |«      › d|d    d d! › d"�d¬«       t        |d#   |«      }|st        d$d¬«       ŒNt+        ||d#   «      \  }}}}}|xs |d    |d <   |xs |d%   |d%<   ||d&<   ||d'<   ||d(<   |j-                  |«       |dz   d)z  dk(  sŒ§t/        j0                  d«       Œ½ t3        j4                  t6        «      }t9        ||«      }|j;                  «        t        |«      t        |«      z
  }t        d*|› d+|› �«       y ),Nr   z--max-pages)ÚtypeÚdefaultz--subsú+zsubsections to crawl)Únargsr˜   Úhelpz<http://www.tunliu.gov.cn/tlzw/zwgk/zfxxgkml/gzdt_203764/hjbhu   
=== å­�æ �ç›®: z ===T)Úflushr-   r‡   Úindex_z.htmlu   [åˆ—è¡¨é¡µ] u    ç¬¬u   é¡µ: u     -> èŽ·å�–å¤±è´¥u     -> æ— æ•°æ�®ï¼Œå�œæ­¢z  -> u   æ�¡zcountPage\s*=\s*(\d+)u     (å…±u   é¡µ)u	   æ— æ•°æ�®u   
åˆ—è¡¨å…± u    æ�¡ï¼Œå¼€å§‹èŽ·å�–è¯¦æƒ…...z  [z] r.   r   z...r   u"       -> è¯¦æƒ…èŽ·å�–å¤±è´¥ï¼Œè·³è¿‡r4   rG   r}   rt   r�   u	   
å®Œæˆ�: u   æ�¡, å¼‚å¸¸: )ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚSUBSECTIONSÚ
parse_argsÚ	max_pagesÚsubsÚrequestsÚSessionÚprintr   r!   r@   r`   rc   rd   ÚgroupÚextendÚ	enumerater   r;   r   r   Úsqlite3ÚconnectÚDB_PATHr•   Úclose)rž   ÚparserÚargsr¥   ÚsubsectionsÚBASE_SUBr   Ú	all_itemsrh   Úsub_baseÚpage_numr   r<   r>   ÚmÚ
page_countÚdetailedÚir’   r.   r4   rG   r}   rt   r�   r‘   Úerrorss                              r    r%   r%   Í   s  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¬C¼ÐÔCØ
×Ñ˜¨´[Ø3ð ô 5à×ÑÓ€DØ—‘€IØ—)‘)€KàM€HÜ×ÑÓ €GØ€Iàó  ˆÜÐ! #  dÐ+°4Õ8Ø�Z˜q   QÐ'ˆä˜a ¨Q¡Ó/ò 	ˆHØ˜1Š}Ø‘à!˜
 &¨°!©¨°EÐ:�ä�L   T¨(¨°5¸¸Ð>ÀdÕKÜ˜C Ó)ˆDÙÜÐ)°$Õ7Ùä˜t XÓ.ˆEÙÜÐ/¸Õ=Ùä�Eœ#˜e›*˜ SÐ)°Õ6ð ˜1Š}Ü—I‘IÐ6¸Ó=�ÙÜ!$ Q§W¡W¨Q£Z£�JÜ˜F : ,¨dÐ3¸4Õ@à×Ñ˜UÔ#Ø˜9Ó$Úò9	ð	 ñD ÜˆkÔØä	ˆLœ˜Y›Ð(Ð(DÐ
EÈTÕRà€HÜ˜YÓ'ò ‰ˆˆ4Ü��A�a‘C�5˜œ#˜i›.Ð)¨¨D°©M¸#¸2Ð,>Ð+?¸sÐCÈ4ÕPÜ˜˜U™ WÓ-ˆÙÜÐ6¸tÕDØä5AÀ$ÈÈUÉÓ5TÑ2ˆˆt�W˜g {ØÒ.  g¡ˆˆW‰ØÒ+˜t F™|ˆˆV‰Ø!ˆˆY‰Ø!ˆˆY‰Ø)ˆˆ]ÑØ�‰˜Ôà�‰E�R‰<˜1ÓÜ�J‰J�q�Mð!ô$ �?‰?œ7Ó#€DÜ�x Ó&€EØ‡J�J„Lä�‹^œc (›mÑ+€FÜ	ˆJ�u�g˜]¨6¨(Ð
3Õ4rA   Ú__main__)Ú__doc__r§   rc   Úsysri   r   r­   Úosr   Úbs4r   r¯   r\   rŽ   ÚCOLUMNr¢   r   r   r£   r!   r@   r   r•   r%   Ú__name__© rA   r    ú<module>rÅ      s�   ðñó Û 	Û 
Û Û Û Û 	Ý Ý à
€Ø%€Ø#€	Ø	€Ø€	àaØOØ0ñ€ð
 €â*€ò
òò4l;ò\ò6N5ð` ˆzÒÙ…Fð rA   