Ë
    ¸¬ujH  ã                   óð  — 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m	Z	 ddl
mZ ddlZddlZ eej                  «      dkD  r2ej                  d   j!                  «       r eej                  d   «      ndZe� ed ee«      z   «       dZdZ ej.                  d	d
«      ZdZ ej4                  «        e	d¬«      z
  j7                  d«      ZdZdddœZddgddœZd„ Z d„ Z!d„ Z"d„ Z#e$dk(  r e#«        yy)uë   çˆ¬å�–æ›¹åŽ¿äººæ°‘æ”¿åºœ - é€šçŸ¥å…¬å‘Š / æ”¿åŠ¡å…¬å¼€æ �ç›®



API: POST http://www.caoxian.gov.cn/els-service/article/{page}/15
åˆ—è¡¨æ•°æ�®: JSON {dq, catas, order}
å†…å®¹æ��å�–: ä»Žè¯¦æƒ…é¡µscriptä¸­æ��å�– var memo = "..." çš„HTML
é    N)ÚdatetimeÚ	timedelta)ÚBeautifulSoupé   z[AutoPg] max_pages=z-http://www.caoxian.gov.cn/els-service/articlezhttp://www.caoxian.gov.cnÚ	SEARCH_DBz/root/search.dbu   æ›¹åŽ¿äººæ°‘æ”¿åºœ-é€šçŸ¥å…¬å‘ŠiG  )Údaysz%Y-%m-%dé   zMozilla/5.0zapplication/json;charset=utf-8)z
User-AgentzContent-TypeÚ 2c90808883d172a50183e89e80f5003bÚ1590299564160716800Úup)ÚdqÚcatasÚorderc                 ó¨   — dt         | t        fz  }t        j                  |t        t
        d¬«      }|j                  «       }|j                  di «      S )u   èŽ·å�–åˆ—è¡¨é¡µæ•°æ�®z%s/%d/%dé   )ÚheadersÚjsonÚtimeoutÚdata)ÚAPI_URLÚ	PAGE_SIZEÚrequestsÚpostÚHEADERSÚAPI_PAYLOADr   Úget)ÚpageÚurlÚrr   s       ú"/root/gov_crawler/crawl_caoxian.pyÚ
fetch_listr!   %   sC   € à
œ ¤yÐ1Ñ
1€CÜ�‰�c¤7´ÀbÔI€AØ�6‰6‹8€DØ�8‰8�F˜BÓÐó    c                 ó  — |r3|j                  d«      s"|j                  d«      s|j                  d«      r|S |j                  d«      rd|z   S t        j                  j                  | «      }|j                  j                  dd«      d   dz   }|j                  d	«      r|d
d }n0|j                  d«      r|j                  dz   |j                  z   |z   S |j                  dz   |j                  z   |z   |j                  d«      z   S )u   å°†ç›¸å¯¹è·¯å¾„è½¬ä¸ºç»�å¯¹URLzhttp://zhttps://zdata:z//zhttp:ú/r   r   z./é   Nú://)	Ú
startswithÚurllibÚparseÚurlparseÚpathÚrsplitÚschemeÚnetlocÚlstrip)Úbase_urlÚsrcÚparsedÚpath_dirs       r    Úmake_abs_urlr4   -   sà   € á�#—.‘. Ô+¨s¯~©~¸jÔ/IÈSÏ^É^Ð\cÔMdØˆ
Ø
‡~�~�dÔØ˜‰}ÐÜ�\‰\×"Ñ" 8Ó,€FØ�{‰{×!Ñ! # qÓ)¨!Ñ,¨sÑ2€HØ
‡~�~�dÔØ�!�"ˆg‰Ø	�‰˜Ô	Ø�}‰}˜uÑ$ v§}¡}Ñ4°sÑ:Ð:Ø�=‰=˜5Ñ  6§=¡=Ñ0°8Ñ;¸c¿j¹jÈ»oÑMÐMr"   c                 ó&  — 	 t        j                  | t        d¬«      }d|_        |j                  }t        j                  d|«      }|sy|j                  «       }|}|t        |«      k  r8||   dk(  r||kD  r||dz
     dk(  r|dz  }Œ,||| }n|dz  }|t        |«      k  rŒ8y|j                  d	d«      j                  d
d«      }|j                  dd«      j                  dd«      }t        j                  dd„ |«      }t        j                  j                  | «      }|j                  dz   |j                  z   }	|j                  dd|	z  «      }|j                  dd|	z  «      }|S # t         $ r!}
t#        dt%        |
«      z  «       Y d}
~
yd}
~
ww xY w)u2   ä»Žè¯¦æƒ…é¡µscriptä¸­æ��å�– var memo çš„HTMLå†…å®¹r   )r   r   zutf-8zvar memo\s*=\s*\"Ú ú"r   ú\z\"z\/r$   z\nú
z\tú	z\\u([0-9a-fA-F]{4})c                 óJ   — t        t        | j                  d«      d«      «      S )Nr   é   )ÚchrÚintÚgroup)Úms    r    ú<lambda>z!extract_content.<locals>.<lambda>Y   s   € ¼3¼sÀ1Ç7Á7È1Ã:ÈrÓ?RÓ;S€ r"   r&   zsrc="/upload-service/zsrc="%s/upload-service/zhref="/upload-service/zhref="%s/upload-service/z  [ERROR] extract content: %sN)r   r   r   ÚencodingÚtextÚreÚsearchÚendÚlenÚreplaceÚsubr(   r)   r*   r-   r.   Ú	ExceptionÚprintÚstr)Ú
detail_urlr   ÚhtmlÚmatchÚstartÚposÚrawÚcontentr2   ÚbaseÚes              r    Úextract_contentrV   <   sŒ  € ð'Ü�L‰L˜¬W¸bÔAˆØˆŒ
Ø�v‰vˆô —	‘	Ð.°Ó5ˆÙØà—	‘	“ˆØˆØ”C˜“IŠoØ�C‰y˜CÒØ˜’; 4¨¨A©¡;°$Ò#6Ø˜1‘H�CØØ˜5 �o�ØØ�1‰HˆCð ”C˜“I‹oð ð —+‘+˜e SÓ)×1Ñ1°%¸Ó=ˆØ—/‘/ %¨Ó.×6Ñ6°u¸dÓCˆä—&‘&Ð/Ñ1SÐU\Ó]ˆô —‘×&Ñ& zÓ2ˆØ�}‰}˜uÑ$ v§}¡}Ñ4ˆØ—/‘/Ð"9Ð;TÐW[Ñ;[Ó\ˆØ—/‘/Ð":Ð<VÐY]Ñ<]Ó^ˆàˆøÜò ÜÐ-´°A³Ñ6Ô7Üûðús&   ‚AE& Á
AE& Â#CE& Å&	FÅ/FÆFc                  óð  — dt         j                  v } | rdnd}t        d|›dt        ›d�«       t	        d«      }|j                  dd	«      }|t        z   dz
  t        z  }t        d
||fz  «       | rdn|}t        j                  t        «      }|j                  «       }d\  }}	}
t        dt        |t        xs |«      dz   «      D �]K  }t        d|z  «       t	        |«      }|j                  dg «      }t        dt        |«      z  «       |s �nd}|D ]Ö  }|j                  dd«      j                  «       }|j                  dd«      }|j                  dd«      }|j                  dd«      }|r|t         k  r|	dz  }	Œj|rd}t"        ›d|›d|›d�}t%        |«      }|st        d|d d z  «       	 |j'                  dt        ||||t        |f«       |j(                  d	kD  r|dz  }n|	dz  }	ŒØ |s |
dz  }
|
dk\  s�Œ6|dk\  s�Œ=t        d«        nd	}
�ŒN |j/                  «        |j1                  «        t        d ||	fz  «       y # t*        $ r'}t        dt-        |«      z  «       |	dz  }	Y d }~�Œ\d }~ww xY w)!NÚincrementalu   å¢žé‡�u   å…¨é‡�z=== u   æ¨¡å¼�: z ===r   ÚelementsTotalr   u   æ€»æ•°: %d, æ€»é¡µæ•°: %d)r   r   r   u   
--- ç¬¬%dé¡µ ---Úcontentsu     æ�¡ç›®æ•°: %dFÚsubjectr6   ÚfwdateÚxxidÚdwidTz"/2c90808883d172a50183e89e80f5003b/r$   z.htmlu     [WARN] æ— æ­£æ–‡: %s...é(   z|INSERT OR IGNORE INTO gov_raw (site_name, page_url, title, content, publish_date, summary, date_rank) VALUES (?,?,?,?,?,?,?)z
  [ERR] %sr%   é   u!     è¿žç»­2é¡µæ— æ–°æ•°æ�®ï¼Œå�œæ­¢u#   
=== å®Œæˆ� æ–°å¢ž:%d è·³è¿‡:%d ===)ÚsysÚargvrK   Ú	SITE_NAMEr!   r   r   Úsqlite3ÚconnectÚDB_PATHÚcursorÚrangeÚminÚ_MAX_PGrG   ÚstripÚTHREE_YEARS_AGOÚBASE_URLrV   ÚexecuteÚrowcountrJ   rL   ÚcommitÚclose)Úis_incÚmoder   ÚtotalÚtotal_pagesÚ	max_pagesÚconnÚcÚinsÚskipÚstreakÚpirZ   Úhas_rÚitemr[   r\   r]   r^   r   rN   rU   s                         r    Úmainr   h   sm  € ØœcŸh™hÐ&€FÙ‰8 8€DÝ	¢D®)Ð
4Ô5ô �a‹=€DØ�H‰H�_ aÓ(€EØœ9Ñ$ qÑ(¬YÑ6€KÜ	Ð
%¨°Ð(<Ñ
<Ô=á‘ €Iä�?‰?œ7Ó#€DØ�‰‹€AØÑ€Cˆˆvä�A”s˜9¤gÒ&:°Ó;¸AÑ=Ó>ó 'ˆÜÐ" RÑ'Ô(Ü˜"‹~ˆØ—8‘8˜J¨Ó+ˆÜÐ¤# h£-Ñ/Ô0ÙšàˆØò 	8ˆDØ—h‘h˜y¨"Ó-×3Ñ3Ó5ˆGØ—X‘X˜h¨Ó+ˆFØ—8‘8˜F BÓ'ˆDØ—8‘8˜F BÓ'ˆDá˜&¤?Ò2Ø˜‘	�ØÙ˜t�uö GOÒPTÒVZÐ[ˆCä" 3Ó'ˆDÙÜÐ1°G¸C¸R°LÑ@ÔAð8Ø—	‘	ð  YÜ  W¨d°F¼IÀvÐNôPà—:‘: ’> 3¨!¡8¡3Ø˜a‘i�døð-	8ñ4 Ø�a‰KˆFØ˜Œ{˜r QœwÜÐ9Ô:ÙØŠfðO'ðR 	‡K�K„M�4—:‘:”<Ü	Ð
0°C¸°;Ñ
>Õ?øô ò 8Ü�l¤S¨£VÑ+Ô,¨d°a©i®dûð8ús   Æ0;IÉ	I5ÉI0É0I5Ú__main__)%Ú__doc__ra   rD   r   rd   r   Úurllib.parser(   r   r   Úbs4r   ÚosÚ_SYSrG   rb   Úisdigitr>   rj   rK   rL   r   rm   Úgetenvrf   rc   ÚnowÚstrftimerl   r   r   r   r!   r4   rV   r   Ú__name__© r"   r    ú<module>rŒ      s  ðñ÷ 6× 5× 5ß (Ý Û 	ã Ù" 4§9¡9›~°Ò1°d·i±iÀ±l×6JÑ6JÔ6L‰#ˆd�i‰i˜‰lÔ
ÐRV€Ø
ÐÙ	Ð
¡# g£,Ñ
.Ô/à
9€Ø&€Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø-€	Ø�8—<‘<“>¡I°5Ô$9Ñ9×CÑCÀJÓO€Ø€	à&Ð8XÑ
Y€ð -Ø#Ð$Øñ€ò òNò)òX;@ð| ˆzÒ™4�6Ðr"   