Ë
    ÿÏŽjU"  ã                   óŽ  — 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
Z
dZedz   ZdZdZdZej                   j#                  d	d
«      ZddiZdZ eej,                  «      D ]=  \  ZZedk(  sŒedz    eej,                  «      k  sŒ% eej,                  edz      «      Z n dd„Zd„ Zd„ Zd„ Zd„ Zd„ Z e!dk(  r e «        yy)u*   å¹¿å®‰ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº - å…¬ç¤ºå…¬å‘Šé    N)ÚBeautifulSoupzhttps://gajkq.guang-an.gov.cnz"/gjjgajjjskfq/c104015/pc/list.htmlu   å¹¿å®‰ç»�å¼€åŒº-å…¬ç¤ºå…¬å‘Šu$   å›½å®¶çº§å¹¿å®‰ç»�æµŽæŠ€æœ¯å¼€å�‘åŒºu   çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36z--pagesé   c                 óÊ  — ddl }t        t        | «      d«      }|j                  d«      D ]L  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r|j                  j                  ||«      n||d<   ŒN |j                  d«      D ]L  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r|j                  j                  ||«      n||d	<   ŒN t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   Núhtml.parserÚaÚhrefÚ )ÚhttpÚ
javascriptú#ÚimgÚsrc)r   z//zdata:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr   r	   r   r   s           ú"/root/gov_crawler/crawl_guangan.pyÚhtml_table_to_htmlr      sÐ   € ãÜ
œ˜E›
 MÓ
2€CØ�\‰\˜#Óò SˆØ�u‰u�V˜RÓ ˆÚ˜Ÿ™Ð(CÕDÙ@H˜Ÿ™×,Ñ,¨X°tÔ<ÈdˆAˆfŠIðSð �|‰|˜EÓ"ò RˆØ�g‰g�e˜RÓ ˆÚ�s—~‘~Ð&=Õ>Ù@H˜Ÿ™×-Ñ-¨h¸Ô<ÈcˆC�ŠJðRô ˆs‹8€Oó    c                 ó<  — t         j                  j                  | t        ¬«      }	 t         j                  j	                  |d¬«      j                  «       j                  dd¬«      S # t        $ r+}t        d| › d|› �t        j                  ¬	«       Y d }~y
d }~ww xY w)N)Úheadersé   )Útimeoutzutf-8Úreplace)Úerrorsz[WARN] fetch failed: ú - ©Úfiler
   )r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r   Úfetchr4   #   sƒ   € Ü
�.‰.×
 Ñ
  ¬gÐ
 Ó
6€CðÜ�~‰~×%Ñ% c°2Ð%Ó6×;Ñ;Ó=×DÑDÀWÐU^ÐDÓ_Ð_øÜò ÜÐ% c U¨#¨a¨SÐ1¼¿
¹
ÕCÜûðús   §?A' Á'	BÁ0!BÂBc                 ój  — | j                  d«      }|dk  rt        dt        j                  ¬«       g S | j                  d|«      }|dk  rt        dt        j                  ¬«       g S | j	                  d||«      }|dk  rt        dt        j                  ¬«       g S | ||d	z    }t        j                  d
d|«      }|j                  dd«      j                  d«      }	 t        j                  |«      }g }|j                  dg «      D ]à  }|j                  dd«      xs |j                  dd«      }	|j                  dd«      }
d}t        j                  d|
«      }|r|j                  d	«      }|j                  dd«      }t        |t         «      r	 t        j                  |«      }|j                  dd«      }|r|j#                  d«      s	t$        |z   }|j'                  |	||dœ«       Œâ |S # t        j                  $ r*}t        d|› �t        j                  ¬«       g cY d}~S d}~ww xY w#  i }Y Œ�xY w)z'Extract article list from embedded JSONzvar listData = {r   z![WARN] No JSON data found in pager%   z	</script>z)[WARN] No </script> found after JSON dataú}z[WARN] No closing } for JSONr   z(?<=[,\{])\s*(\w+)(?=\s*:)z"\1"zvar listData = r
   ú;z[WARN] JSON decode error: NÚarticleListÚ	showTitleÚtitleÚpubDatez(\d{4}-\d{2}-\d{2})Úurlsz{}Úpcr   )r:   r1   Údate)Úfindr.   r/   r0   ÚrfindÚreÚsubr"   ÚrstripÚjsonÚloadsÚJSONDecodeErrorr   ÚsearchÚgroupÚ
isinstancer   r   ÚBASE_URLÚappend)ÚhtmlÚstartÚ
end_markerÚendÚjson_strÚdatar3   ÚitemsÚartr:   Úpub_dateÚ	date_textÚm2r<   Úpc_urls                  r   Úextract_items_from_jsonrX   +   s  € ð �I‰IÐ(Ó)€EØˆq‚yÜÐ1¼¿
¹
ÕCØˆ	à—‘˜;¨Ó.€JØ�A‚~ÜÐ9ÄÇ
Á
ÕKØˆ	à
�*‰*�S˜% Ó
,€CØ
ˆQ‚wÜÐ,´3·:±:Õ>Øˆ	Ø�E˜#˜a™%Ð €Hä�v‰vÐ3°W¸hÓG€HØ×ÑÐ 1°2Ó6×=Ñ=¸cÓB€HðÜ�z‰z˜(Ó#ˆð
 €EØ�x‰x˜ rÓ*ò IˆØ—‘˜ RÓ(Ò@¨C¯G©G°G¸RÓ,@ˆØ—7‘7˜9 bÓ)ˆàˆ	Ü�Y‰YÐ-¨xÓ8ˆÙØŸ™ ›ˆIà�w‰w�v˜tÓ$ˆÜ�dœCÔ ðÜ—z‘z $Ó'�ð —‘˜$ Ó#ˆÙ˜&×+Ñ+¨FÔ3Ü Ñ&ˆFà�‰˜u¨V¸YÑGÕHð'Ið( €Løô3 ×Ñò ÜÐ*¨1¨#Ð.´S·Z±ZÕ@Ø�	ûðûð$Ø’ús*   ÃG, ÆH,Ç,H)Ç?H$ÈH)È$H)È,H2c                 ó.   — | dk(  rt         S t         › d| › �S )Nr   z?page=)ÚLIST_URL)Úpages    r   Úget_page_urlr\   ]   s   € Øˆq‚yÜˆÜˆZ�v˜d˜VÐ$Ð$r   c                 ó8  ‡— t        | d«      }d}|j                  d«      }|r|j                  d¬«      }|sU|j                  rI|j                  j                  j                  «       }t        j                  dd|«      j                  «       }d}t        j                  d| «      }|r|j                  d«      }|j                  d	«      }|s%t        d
|› �t        j                  ¬«       ||dg dœS g }g }	|j                  g d¢d¬«      D �]:  }
|
j                  dk(  r|
j                  d«      rŒ%|
j                  dk(  r|
j                  d«      rŒF|
j                  dk(  �r|
j                  dd¬«      }|
j                  dd¬«      D ]Ò  }|d   j                  «       }t        j                  d|t        j                   «      sŒ<|j                  d¬«      xs |j#                  dd«      }|j%                  d«      r	t&        |z   n-|j%                  d«      s|j)                  dd«      d   dz   |z   n|Št+        ˆfd„|D «       «      rŒ¿|j-                  |‰dœ«       ŒÔ |s�ŒU|	j-                  |«       �Œh|
j                  dk(  r#t/        |
|«      }|s�Œ‡|	j-                  |«       �Œš|
j                  dk(  s�Œ«|
j#                  dd«      }|
j#                  dd«      }|s�ŒÓ|j%                  d«      r	t&        |z   n-|j%                  d«      s|j)                  dd«      d   dz   |z   n|}|	j-                  |r	d|› d |› d!�nd"|› d!�«       �Œ= t1        «       }g }|D ]/  }|d#   |vsŒ|j3                  |d#   «       |j-                  |«       Œ1 ||d$j5                  |	«      |dœS )%Nr   r
   zh1.titleT)Ústripu2   \s*[-_]\s*å›½å®¶çº§å¹¿å®‰ç»�æµŽæŠ€æœ¯å¼€å�‘åŒº\s*$u(   å�‘å¸ƒæ—¥æœŸ[ï¼š:]\s*(\d{4}-\d{2}-\d{2})r   zdiv.article_mainz[WARN] No content: r%   )r:   r>   ÚcontentÚattachments)Úpr   r   )Ú	recursivera   r   ú r   )r	   r	   z\.(pdf|docx?|xlsx?|zip|rar)$Údownloadú/r   r   c              3   ó.   •K  — | ]  }|d    ‰k(  –— Œ y­w)r1   N© )Ú.0ÚattÚahrefs     €r   ú	<genexpr>zparse_detail.<locals>.<genexpr>�   s   øè ø€ ÒJ°s˜s 5™z¨UÕ2ÑJùs   ƒ)r:   r1   r   r   Úaltz![z](ú)z![](r1   z

)r   Ú
select_oneÚget_textr:   Ústringr^   rA   rB   rG   rH   r.   r/   r0   r   ÚnameÚfind_parentÚIr   r   rJ   ÚrsplitÚanyrK   r   ÚsetÚaddÚjoin)rL   r1   Úsoupr:   Úh1rU   ÚmÚbodyr`   ÚpartsÚelÚtextr   r	   ÚatitleÚtbl_htmlr   rl   ÚseenÚuari   rj   s                        @r   Úparse_detailr„   b   sh  ø€ Ü˜˜}Ó-€DØ€EØ	�‰˜Ó	$€BÙ	Ø—‘ $�Ó'ˆÙ�T—Z’ZØ—
‘
×!Ñ!×'Ñ'Ó)ˆÜ—‘ÐLÈbÐRWÓX×^Ñ^Ó`ˆØ€IÜ
�	‰	Ð=¸tÓD€AÙØ—G‘G˜A“Jˆ	Ø�?‰?Ð-Ó.€DÙÜÐ# C 5Ð)´·
±
Õ;Ø¨	¸bÐQSÑTÐTØ€KØ€EØ�m‰mÒ1¸TˆmÓBó KˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9ØØ�7‰7�c‹>Ø—;‘;˜s¨$�;Ó/ˆDØ—[‘[ ¨4�[Ó0ò L�Ø˜‘y—‘Ó(�Ü—9‘9Ð<¸dÄBÇDÁDÕIØŸZ™Z¨d˜ZÓ3ÒL°q·u±u¸ZÈÓ7L�FØ/3¯©¸sÔ/CœH tšOÐtx÷  uDñ  uDð  EKô  uLÈ#Ï*É*ÐUXÐZ[ÓJ\Ð]^ÑJ_ÐbeÑJeÐhlÒJlð  RV�EÜÓJ¸kÔJÕJØ#×*Ñ*°VÀEÑ+JÕKðLó Ø—‘˜TÖ"Ø�W‰W˜ÒÜ)¨"¨cÓ2ˆHÛØ—‘˜XÖ&Ø�W‰W˜ÔØ—&‘&˜ Ó#ˆCØ—&‘&˜ Ó#ˆCÛØ(+¯©°sÔ(;”h ’nÐkn×kyÑkyð  {Aô  lBÀ#Ç*Á*ÈSÐRSÓBTÐUVÑBWÐZ]ÑB]Ð`cÒBcð  HK�Ø—‘±3˜r #  b¨¨¨QÑ/¸dÀ3À%Àq¸MÖJð3Kô4 ‹5€DØ	€BØò ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø�I‰I�c�Nðð  I¸&¿+¹+ÀeÓ:LÐ]_Ñ`Ð`r   c                  óª  — t        t        d«      «      } | s0t        dt        j                  ¬«       t        j
                  d«       t        j                  d| «      }|rt        |j                  d«      «      nd}d}|r||z   dz
  |z  nd}t        d|› d|› �t        j                  ¬«       t        r9|t        kD  r0t        d	t        › d
t        › d�t        j                  ¬«       t        }g }t        d|dz   «      D ]€  }t        |«      }t        d|› d|› �t        j                  ¬«       t        |«      } | sŒ=t        | «      }t        dt        |«      › d�t        j                  ¬«       |j                  |«       Œ‚ t        dt        |«      › �t        j                  ¬«       t        j                   t"        «      }	|	j%                  d«       |	j'                  «       }
dx}x}}|D �]p  }|
j%                  d|d   f«       |
j)                  «       rŒ+t        |d   «      } | sŒ<t+        | |d   «      }|d   xs |d   }|d   xs |d   }|d   }|d   }t        j,                  ddt        j,                  dd|«      «      j/                  «       }|d d }|s|dz  }d}|rVt        j                  d|«      }|r>t        |j                  d«      |j                  d«      z   |j                  d«      z   «      }|rt1        j2                  |d ¬!«      nd"}	 |
j%                  d#|t4        t6        |d   |||||f	«       |
j8                  dkD  r|dz  }|t        |«      z  }�Œs |	j=                  «        |	j?                  «        t        d't4        › d(|› d)|› d*|› d+�	«       y # t:        $ r/}t        d$|d d% › d&|› �t        j                  ¬«       Y d }~�Œäd }~ww xY w),Nr   z[ERROR] Cannot fetch list pager%   z!articleCount["\']?\s*[:=]\s*(\d+)r   é   z[INFO] Total articles: z	, pages: z[INFO] Limiting to z pages (--pages=rm   z[INFO] Fetching page re   z[INFO] Found z itemsz[INFO] Total items: zPRAGMA busy_timeout = 60000z'SELECT id FROM gov_raw WHERE page_url=?r1   r:   r>   r_   r`   z\s+rc   z<[^>]+>r
   éÈ   z(\d{4})-(\d{2})-(\d{2})é   é   F)Úensure_asciiz[]z™INSERT OR IGNORE INTO gov_raw (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank) VALUES (?,?,?,?,?,?,?,?,?)z[ERROR] DB: r    r$   z

[RESULT] z: z new, z empty, z attachments) r4   r\   r.   r/   r0   ÚexitrA   rG   ÚintrH   Ú_MAX_PGÚrangerX   ÚlenÚextendÚsqlite3ÚconnectÚDBÚexecuteÚcursorÚfetchoner„   rB   r^   rD   ÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr-   ÚcommitÚclose)rL   r{   Útotal_countÚ	page_sizeÚtotal_pagesÚ	all_itemsÚpgr1   rR   ÚconnÚcÚ	new_countÚempty_contentÚtotal_attachmentsÚitemÚdetailr:   rU   r_   r`   ÚplainÚsummaryÚ	date_rankÚatt_jsonr3   s                            r   Úmainr­   —   s�  € Ü”˜a“Ó!€DÙÜÐ.´S·Z±ZÕ@Ü�‰�Œä
�	‰	Ð6¸Ó=€AÙ%&”#�a—g‘g˜a“j”/¨A€KØ€IÙ@K�; Ñ*¨QÑ.°9Ò<ÐQR€KÜ	Ð# K =°	¸+¸Ð
GÌcÏjÉjÕYÝ�;¤Ò(ÜÐ#¤G 9Ð,<¼W¸IÀQÐGÌcÏjÉjÕYÜˆØ€IÜ�A�{ Q‘Ó'ò  ˆÜ˜2ÓˆÜÐ% b T¨¨;¨-Ð8¼s¿z¹zÕJÜ�S‹zˆÙØÜ'¨Ó-ˆÜ�œc %›j˜\¨Ð0´s·z±zÕBØ×Ñ˜Õð ô 
Ð ¤ Y£Ð 0Ð
1¼¿
¹
ÕCÜ�?‰?œ2Ó€DØ‡L�LÐ.Ô/Ø�‰‹€AØ45Ð5€IÐ5�Ð 1Øó FˆØ	�	‰	Ð;¸dÀ5¹k¸^ÔLØ�:‰:Œ<ØÜ�T˜%‘[Ó!ˆÙØÜ˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ˜]Ñ+ˆÜ—‘�v˜s¤B§F¡F¨:°r¸7Ó$CÓD×JÑJÓLˆØ˜˜�+ˆÙØ˜QÑˆMØˆ	ÙÜ—	‘	Ð4°iÓ@ˆAÙÜ §¡¨£
¨Q¯W©W°Q«ZÑ 7¸!¿'¹'À!»*Ñ DÓE�	ÙBM”4—:‘:˜k¸Õ>ÐSWˆð	FØ�I‰Ið  rØœi¬°T¸%±[À)ÈWÐV]Ð_gÐirÐsôuà�z‰z˜AŠ~Ø˜Q‘�	Ø!¤S¨Ó%5Ñ5Ð!ùð7Fð< 	‡K�K„MØ‡J�J„LÜ	ˆKœ	�{ " Y K¨v°m°_ÀHÐM^ÐL_Ð_kÐ
lÕmøô	 ò 	FÜ�L  s¨  ¨C°¨sÐ3¼#¿*¹*×EÓEûð	Fús   ÌANÎ	OÎ#$OÏOÚ__main__)r
   )"Ú__doc__rA   r/   ÚosrD   Úurllib.requestr   Úurllib.errorÚbs4r   r‘   rJ   rZ   r˜   ÚSITE_DISPLAYr™   Úenvironr   r“   r)   r�   Ú	enumerateÚargvÚir   r�   rŒ   r   r4   rX   r\   r„   r­   Ú__name__rg   r   r   ú<module>rº      sá   ðá 0ß × ß #Ý Û à*€ØÐ:Ñ:€Ø*€	Ø5€Ø€
Ø‡Z�Z‡^�^�KÐ!2Ó3€ØÐWÐ
X€à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðó
òò0òd%ò
3aòj=nð~ ˆzÒÙ…Fð r   