Ë
    ¸¬uj½#  ã                   ó°   — d 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ZddlZddl	m	Z	 dZ
dZdZdZd	Zd
ZddddœZdZd„ Zd„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)uR   
é­�éƒ½åŒºäººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š çˆ¬è™«
http://www.weidu.gov.cn/zwxx/002005/
é    N)ÚBeautifulSoup)Údatetimez/root/search.dbzhttp://www.weidu.gov.cnz+http://www.weidu.gov.cn/zwxx/002005/{}.htmlu   é­�éƒ½åŒºäººæ°‘æ”¿åºœ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é   c                 ó  — 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_weidu.pyÚget_pager      sy   € Ü˜“8ò ˆð	Ø—‘˜C¬¼'�ÓBˆAØ ˆAŒJØ�}‰} Ò#Ø—v‘v’ð $ð	ð øô ò 	Ø˜Š{Ü—
‘
˜1”ÿøð	ús   �=AÁ	B ÁA;Á;B c                 óv  — g }t        | d«      }|j                  d«      D ]–  }|j                  d«      }|sŒ|j                  dd«      }|r|j	                  d«      s||z   }|j                  d¬«      }|j                  d	d
¬«      }|r|j                  d¬«      nd}	|sŒ|sŒ‚|j                  |||	dœ«       Œ˜ |S )z;Parse list page, return list of dicts with url, title, dateúhtml.parserz!ul.wb-data-item > li.wb-data-listÚaÚhrefÚ ÚhttpT©ÚstripÚspanzwb-data-date©Úclass_)r   ÚtitleÚdate)r   ÚselectÚfindr   Ú
startswithÚget_textÚappend)
ÚhtmlÚbase_urlÚitemsÚsoupÚlir!   r"   r*   Ú	date_spanr+   s
             r   Ú
parse_listr7   )   sÀ   € à€EÜ˜˜}Ó-€DØ�k‰kÐ=Ó>ò FˆØ�G‰G�C‹LˆÙØØ�u‰u�V˜RÓ ˆÙ˜Ÿ™¨Ô/Ø˜d‘?ˆDØ—
‘
 �
Ó&ˆØ—G‘G˜F¨>�GÓ:ˆ	Ù1:ˆy×!Ñ!¨Ð!Ô-ÀˆÚ’EØ�L‰L °¸tÑDÕEðFð €Ló    c                 ó  — t        | d«      }|j                  dd¬«      }|r|j                  d¬«      n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¬«      }	g }
g }d}d}d}|	�r¶|	j                  d«      }|D ]\  }|j                  dd«      }|r|j                  d«      s	t        |z   }|j                  dd«      }d}|
j                  d|› d|› d�«       Œ^ |	j                  ddg«      }|D ]ˆ  }|j                  }|dk(  r9|
j                  t        |«      «       |t        |j                  d¬«      «      z  }ŒM|dk(  sŒS|j                  d¬«      }|sŒh|
j                  |«       d}|t        |«      z  }ŒŠ |	j                  d«      D ]�  }|j                  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   }
nf|g}
|xs 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'|d(d) «      j	                  «       n|}dd(l} |r| j'                  |d¬*«      nd+}!|||||!fS c c}w c c}w ),z>Parse detail page, return (content, summary, attachments_json)r    Údivzewb-info-ttr(   Tr%   r#   ÚmetaÚnameÚPubDate)ÚattrsÚcontentÚContentSourcezewb-info-conFr   ÚimgÚsrcr$   Úaltz![z](ú)ÚpÚtabler!   r"   z3\.(pdf|doc|docx|xls|xlsx|zip|rar|png|jpg|jpeg|gif)$ú/éÿÿÿÿ)r<   r   é   ú[z\.pdf$r   u   [PDFé™„ä»¶: z

z\s+ú Nr   )Úensure_asciiú[])r   r-   r/   r   r&   Úfind_allr.   ÚBASE_URLr0   r<   ÚstrÚlenÚreÚsearchÚIÚsplitÚjoinÚsubÚjsonÚdumps)"r1   r   r4   Útitle_elr*   r+   Ú	meta_dateÚsourceÚmeta_sourceÚcontent_divÚcontent_partsÚattachmentsÚfound_imagesÚhas_textÚtotal_text_lenÚimgsrA   rB   rC   ÚpsÚelemÚtagr   r!   r"   Úattach_textÚfallbackrE   Ú	pdf_linksÚpdfr?   ÚsummaryrX   Úattachments_jsons"                                     r   Úparse_detailrn   ;   s´  € ä˜˜}Ó-€Dð �y‰y˜ }ˆyÓ5€HÙ-5ˆH×Ñ DÐÔ)¸2€Eð €DØ—	‘	˜&¨°Ð(;�	Ó<€IÙ�Y—]‘] 9Ô-Ø˜Ñ#×)Ñ)Ó+ˆð €FØ—)‘)˜F¨6°?Ð*C�)ÓD€KÙ�{—‘ yÔ1Ø˜YÑ'×-Ñ-Ó/ˆð —)‘)˜E¨.�)Ó9€KØ€MØ€KØ€LØ€HØ€Nâà×#Ñ# EÓ*ˆØò 	5ˆCØ—'‘'˜% Ó$ˆCÙ˜3Ÿ>™>¨&Ô1Ü ‘n�Ø—'‘'˜% Ó$ˆCØˆLØ× Ñ  2 c U¨"¨S¨E°Ð!3Õ4ð	5ð ×!Ñ! 3¨ .Ó1ˆØò 
	0ˆDØ—)‘)ˆCØ�gŠ~Ø×$Ñ$¤S¨£YÔ/Ø¤# d§m¡m¸$ mÓ&?Ó"@Ñ@‘Ø˜“Ø—}‘}¨4�}Ó0�ÚØ!×(Ñ(¨Ô.Ø#�HØ"¤c¨$£iÑ/‘Nð
	0ð ×%Ñ% cÓ*ò 	GˆAØ—5‘5˜ Ó$ˆDÜ�y‰yÐOÐQUÔWY×W[ÑW[Õ\Ø—‘ vÔ.Ü# d™?�DØŸj™j¨t˜jÓ4ÒK¸¿
¹
À3»ÈÑ8K�Ø×"Ñ"¨KÀÑ#EÕFð	Gð ˜Òà�u�g˜R ˜u AÐ&ˆÙØ%˜J°]Ö)Y°ÀaÇlÁlÐSWÕFXª!Ò)YÑY‰Mà%˜JˆMà%0Ò%6°BÖ`˜q¼2¿9¹9ÀYÐPQÐRWÑPXÔZ\×Z^ÑZ^Õ;_šÐ`ˆIÐ`ÙØ$ò 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�zÔBÐW[Ðà�$˜ Ð*:Ð:Ð:ùò! *Zùò as   ÊNÊ3NË-NË6N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)zBulk insert/update into gov_rawr   r+   r#   Né
   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*   rl   r?   r`   rM   é   )Úcursorr   r   ÚstrptimeÚnowÚreplaceÚ
__import__Ú	timedeltaÚexecuteÚ	SITE_NAMEÚcommit)r3   Úconnrw   Ú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                  «       }|j                  }t        j                  d«       t        j                  «       }g }t        d|dz   «      D �]D  }|dk(  rd}nt        j                  |«      }t        d|› d|› �d	¬
«       t        ||«      }|st        dd	¬
«        n÷t!        |t"        «      }	|	st        dd	¬
«        nÖt        dt%        |	«      › d�d	¬
«       |dk(  rœt'        |d«      }
|
j)                  d«      }d}|D ]O  }|j+                  dd«      }t-        j.                  d|«      }|sŒ.t        |j1                  d«      «      }||kD  sŒN|}ŒQ t3        ||«      }||k  rt        d|› d�d	¬
«       ||kD  r|}|j5                  |	«       ||k\  s�ŒE n t        dt%        |«      › d�d	¬
«       g }t7        |«      D ]»  \  }}t        d|dz   › dt%        |«      › d|d   d d › d�d	¬
«       t        |d   |«      }|st        dd	¬
«       ŒNt9        ||d   «      \  }}}}}|xs |d   |d<   |xs |d    |d <   ||d!<   ||d"<   ||d#<   |j;                  |«       |dz   d$z  dk(  sŒ§t=        j>                  d«       Œ½ tA        jB                  tD        «      }tG        ||«      }|jI                  «        t%        |«      t%        |«      z
  }t        d%|› d&|› �«       y )'Nr   z--max-pages)ÚtypeÚdefaultzlgrep -q '222.143.158.81 www.weidu.gov.cn' /etc/hosts || echo '222.143.158.81 www.weidu.gov.cn' >> /etc/hostsrv   z.http://www.weidu.gov.cn/zwxx/002005/about.htmlu   [åˆ—è¡¨é¡µ] ç¬¬u   é¡µ: T)Úflushu      -> èŽ·å�–å¤±è´¥ï¼Œå�œæ­¢ç¿»é¡µu     -> æ— æ•°æ�®ï¼Œå�œæ­¢ç¿»é¡µz  -> u   æ�¡r    z.ewb-page ar"   r#   z/(\d+)\.htmlu     (å®žé™…å…±u   é¡µ)u   
åˆ—è¡¨å…± u    æ�¡ï¼Œå¼€å§‹èŽ·å�–è¯¦æƒ…...z  [rG   z] r*   r   z...r   u"       -> è¯¦æƒ…èŽ·å�–å¤±è´¥ï¼Œè·³è¿‡r+   r?   rl   r`   rp   u	   
å®Œæˆ�: u   æ�¡, å¼‚å¸¸: )%ÚargparseÚArgumentParserÚadd_argumentÚintÚ	MAX_PAGESÚ
parse_argsÚ	max_pagesÚosÚsystemÚrequestsÚSessionr   ÚLIST_URLÚformatÚprintr   r7   rO   rQ   r   r,   r   rR   rS   ÚgroupÚminÚextendÚ	enumeratern   r0   r   r   Úsqlite3ÚconnectÚDB_PATHr…   Úclose)rŠ   ÚparserÚargsr�   r   Ú	all_itemsÚpage_numr   r1   r3   r4   Ú
page_linksÚmax_page_numÚpar"   ÚmrE   Ú
actual_maxÚdetailedÚir‚   r*   r+   r?   rl   r`   r€   r�   Úerrorss                                r   Úmainr¬   ¬   s%  € ÛØ×$Ñ$Ó&€FØ
×Ñ˜¬C¼ÐÔCØ×ÑÓ€DØ—‘€Iô ‡I�IÐ|Ô}ä×ÑÓ €Gà€Iô ˜!˜Y¨™]Ó+ó )ˆØ�qŠ=ØB‰Cä—/‘/ (Ó+ˆCÜ� ˜z¨¨s¨eÐ4¸DÕAÜ˜˜WÓ%ˆÙÜÐ4¸TÕBÙä˜4¤Ó*ˆÙÜÐ1¸$Õ?Ùä�”c˜%“j�\ Ð%¨TÕ2ð �qŠ=Ü   }Ó5ˆDØŸ™ ]Ó3ˆJØˆLØ ò )�Ø—v‘v˜f bÓ)�Ü—I‘I˜o¨tÓ4�ÚÜ˜AŸG™G A›J›�AØ˜<Ó'Ø'(™ð)ô ˜\¨9Ó5ˆJØ˜IÒ%Ü˜ Z L°Ð5¸TÕBà 	Ò)Ø *�Ià×Ñ˜Ôð �yÔ ÙðS)ôV 
ˆ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Õ4r8   Ú__main__)Ú__doc__r“   rR   r   ÚsysÚbs4r   rœ   r‘   r   rž   rO   r•   r~   ÚCOLUMNrŽ   r   r   r   r7   rn   r…   r¬   Ú__name__© r8   r   ú<module>r´      sŠ   ðñó Û 	Û Û 
Ý Û Û 	Ý à
€Ø$€Ø8€Ø#€	Ø	€Ø€	àaØOØ0ñ€ð
 €ò
òò$S;òjò8U5ðn ˆzÒÙ…Fð r8   