Ë
    H«£jþ%  ã                   ób  — 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mZ ddlm	Z	 ddl
mZ ddlZddl
ZdZdZdZ ej                   d	d
«      ZdZddddœZej(                  e_        dd„Zd„ Zdd„Zd„ Zd„ Zdd„Zedk(  r3 e eej<                  «      dkD  r eej<                  d   «      nd«       yy)uë   
é•¿æ²»å¸‚æ½žå·žåŒºäººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Š çˆ¬è™«
CMS: TRS CMS
åˆ—è¡¨: .../gzdt/gsgg/ (page1), .../gzdt/gsgg/index_N.html (page2+)
è¯¦æƒ…: .../gzdt/gsgg/YYYYMM/tYYMMDD_NNNNNNN.html
å…±20é¡µ354æ�¡, æ¯�é¡µ18æ�¡
TRS_Editor æ­£æ–‡å®¹å™¨
é    N©ÚBeautifulSoup)Úrequest)Úurljoinu+   é•¿æ²»å¸‚æ½žå·žåŒºäººæ°‘æ”¿åºœ-å…¬ç¤ºå…¬å‘Šzhttp://www.luzhouqu.gov.cnz/lzqzw/zfxxgk/zfxxgk/gzdt/gsggÚ	SEARCH_DBz/root/search.dbg      ø?z[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36z?text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8zzh-CN,zh;q=0.9)z
User-AgentÚAcceptzAccept-Languagec                 ó  — t        j                  | t        ¬«      }	 t        j                  ||¬«      }|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Úignore)Úerrorsz
  [ERROR] z: )Úfile)
r   ÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)Úurlr   ÚreqÚrespÚes        úcrawl_luzhouqu.pyÚfetchr       si   € Ü
�/‰/˜#¤wÔ
/€CðÜ�‰˜s¨GÔ4ˆØ�y‰y‹{×!Ñ! '°(Ð!Ó;Ð;øÜò Ý¢C©Ð+´#·*±*Õ=Üûðús   �7A Á	B	Á!BÂB	c                 ó$  — g }t        j                  d| «      D ]t  }|j                  d«      }|j                  d«      j                  «       }|j                  d«      }|rt	        |«      dk  rŒUt        ||«      }|j                  |||f«       Œv |S )u   ä»Žåˆ—è¡¨é¡µæ��å�–æ–‡ç« ä¿¡æ�¯.z_<li><a href="\./([^"]+)"[^>]*>\s*([^<]+)\s*</a><span[^>]*>\s*(\d{4}-\d{2}-\d{2})\s*</span></li>é   é   é   é   )ÚreÚfinditerÚgroupÚstripÚlenr   Úappend)ÚhtmlÚlist_urlÚitemsÚmÚhrefÚtitleÚdateÚfull_urls           r   Ú
parse_listr1   *   s�   € à€EÜ�[‰[ØjØóò .ˆð �w‰w�q‹zˆØ—‘˜“
× Ñ Ó"ˆØ�w‰w�q‹zˆÙœ˜E›
 QšØä˜8 TÓ*ˆØ�‰�e˜X tÐ,Õ-ð.ð €Ló    c                 óØ  — ddl m}  |t        | «      d«      }|j                  d«      D ]P  }|j	                  dd«      }|sŒ|j                  d«      rŒ*|r t        j                  j                  ||«      n||d<   ŒR |j                  d«      D ]P  }|j	                  d	d«      }|sŒ|j                  d
«      rŒ*|r t        j                  j                  ||«      n||d	<   ŒR t        |«      S )uA   ä¿�ç•™ HTML è¡¨æ ¼ç»“æž„ï¼Œä»…å°†ç›¸å¯¹é“¾æŽ¥/å›¾ç‰‡è½¬ç»�å¯¹ URLr   r   zhtml.parserÚar-   Ú )ÚhttpÚ
javascriptú#ÚimgÚsrc)r6   z//zdata:)	Úbs4r   ÚstrÚfind_allÚgetÚ
startswithÚurllibÚparser   )ÚtableÚbase_urlr   Útblr4   r-   r9   r:   s           r   Úhtml_table_to_htmlrE   <   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€Or2   c           	      ó  — g }t        j                  d| t         j                  «      D ]Ö  }|j                  «       |j	                  «       |j                  d«      }}}|dv rgd|z   dz   }| j                  ||«      }|dk\  r| ||t        |«      z    }n!| j                  d|«      }	|	dk\  r| ||	 n| |d  }|j                  |||f«       ŒŸ|dk(  sŒ¥| j                  d|«      }
|
dk\  sŒ½|j                  ||| ||
dz    f«       ŒØ |S )	Nz<(p|table|img)\b[^>]*>r   )ÚprB   z</ú>r   ú<r9   )	r#   r$   ÚDOTALLÚstartÚendr%   Úfindr'   r(   )Ú	containerÚresultsr,   rK   Úm_endÚtagÚ	close_tagÚend_posÚel_htmlÚnsÚcps              r   Ú_extract_elements_sortedrW   K   s  € Ø€GÜ�[‰[Ð2°I¼r¿y¹yÓIò FˆØŸG™G›I q§u¡u£w°·±¸³
�cˆuˆØ�.Ñ Ø˜s™
 SÑ(ˆIØ—n‘n Y°Ó6ˆGØ˜!Š|Ø# E¨'´C¸	³NÑ*BÐC‘à—^‘^ C¨Ó/�Ø13°q²˜) E¨"Ñ-¸iÈÈÐ>O�Ø�N‰N˜E 3¨Ð0Õ1Ø�E‹\Ø—‘  UÓ+ˆBØ�Q‹wØ—‘  s¨I°e¸BÀ¹FÐ,CÐDÕEðFð €Nr2   c           	      óò  ‡#— g }g }d}dD ]<  }t        j                  || t         j                  «      }|sŒ+|j                  d«      } n g }t        j                  d| t         j                  «      D ]0  }|j                  d«      }	t        ||	«      }
|j                  |
«       Œ2 |sÇ|D ]  }|j                  d|dœ«       Œ t        j                  d| t         j                  «      }|rrt        j                  d|j                  d«      t         j                  «      D ];  }t        j                  d	d
|«      j                  «       }|sŒ+|j                  |«       Œ= dj                  |«      g fS g Š#t        j                  d|t         j                  «      D ]1  }‰#j                  |j                  «       |j                  «       f«       Œ3 ˆ#fd„}d„ }g }t        |«      D �]7  \  }}}|dk(  rn ||«      rŒ ||«      rŒd|v sd|v rŒ(t        j                  d	d
|«      j                  «       }t        j                  dd|«      }|sŒg|j                  ||f«       Œ{|dk(  r7|j                  d«      dkD  sŒ•t        |«      }|sŒ£|j                  ||f«       Œ·|dk(  sŒ½t        j                  d|«      }t        j                  d|«      }|sŒì|j                  d«      }t        ||«      }|r|j                  d«      nd
}|j                  |d|›d|›d�f«       �Œ: |j!                  d„ ¬«       dj                  d„ |D «       «      }t        j                  d| t         j                  «      D ]1  \  }}|j                  |j                  «       t        ||«      dœ«       Œ3 |D �ch c]  }|d    ’Œ	 } }g }!t        j                  d| t         j                  «      D ]q  }|j                  d«      }	t        ||	«      }
|
| vsŒ%| j#                  |
«       |
j%                  d!«      d"   }"|!j                  |
«       |j                  d#|"z   |
dœ«       Œs |r|j                  «       s|!rd$}|!D ]  }|d%|z   d&z   z  }Œ ||fS c c}w )'u<   æ��å�–æ­£æ–‡(å�«è¡¨æ ¼ã€�å›¾ç‰‡)å’Œé™„ä»¶. TRS_Editorå®¹å™¨.N)z6<div[^>]*class="[^"]*TRS_Editor[^"]*"[^>]*>(.*?)</div>z(<div[^>]*class="conTxt"[^>]*>(.*?)</div>z)<div[^>]*class="content"[^>]*>(.*?)</div>z)<div[^>]*class="article"[^>]*>(.*?)</div>z-<div[^>]*class="article-con"[^>]*>(.*?)</div>z#<div[^>]*id="zoom"[^>]*>(.*?)</div>r   zD<script[^>]*>.*?pdfurl\s*=\s*[\'"](\./[^\'"]+\.pdf)[\'"].*?</script>u	   PDFé™„ä»¶)r.   r   z<body[^>]*>(.*?)</body>z<p[^>]*>(.*?)</p>z<[^>]+>r5   z

z<table[^>]*>.*?</table>c                 ó.   •‡ — t        ˆ fd„‰D «       «      S )Nc              3   óD   •K  — | ]  \  }}|‰cxk  xr |k  nc –— Œ y ­w©N© )Ú.0ÚtsÚteÚposs      €r   ú	<genexpr>z5parse_detail.<locals>.inside_table.<locals>.<genexpr>Š   s   øè ø€ Ò>¡v r¨2�2˜–? —?�?Ñ>ùs   ƒ )Úany)r`   Útable_rangess   `€r   Úinside_tablez"parse_detail.<locals>.inside_table‰   s   ù€ ÜÓ>°Ô>Ó>Ð>r2   c                 óœ   — t        j                  dd| «      }t        j                  dd|«      }t        t        j                  d|«      «      S )zMCheck if a <p> element wraps block-level elements (like <div>, <p>, <table>).z	^<p[^>]*>r5   z</p>\s*$z<(div|p|table|ul|ol|h[1-6])\b)r#   ÚsubÚboolÚsearch)rT   Úbodys     r   Úhas_block_childrenz(parse_detail.<locals>.has_block_childrenŒ   s=   € ä�v‰v�l B¨Ó0ˆÜ�v‰v�k 2 tÓ,ˆÜ”B—I‘IÐ>ÀÓEÓFÐFr2   rG   z<tdz<thz\s+ú rB   r   r9   zsrc="([^"]+)"zalt="([^"]*)"z![z](ú)c                 ó   — | d   S )Nr   r\   )Úxs    r   ú<lambda>zparse_detail.<locals>.<lambda>­   s
   €   !¡€ r2   )Úkeyc              3   ó&   K  — | ]	  \  }}|–— Œ y ­wr[   r\   )r]   Ú_Útexts      r   ra   zparse_detail.<locals>.<genexpr>®   s   è ø€ Ò7¡7 1 dœ$Ñ7ùs   ‚z`<a[^>]*href="([^"]+\.(?:doc|docx|pdf|xls|xlsx|ppt|pptx|zip|rar|7z|txt|wps|et))"[^>]*>([^<]+)</a>r   ú/éÿÿÿÿu   PDFé™„ä»¶: u=   ã€�è¯¥æ–‡æ¡£ä¸ºPDFæ–‡ä»¶ï¼Œæ­£æ–‡å†…å®¹è§�é™„ä»¶PDFé“¾æŽ¥ã€‘
u   PDFä¸‹è½½: ú
)r#   rh   rJ   r%   r$   r   r(   Úfindallrf   r&   ÚjoinrK   rL   rW   ÚcountrE   ÚsortÚaddÚsplit)$r)   r   Úcontent_partsÚattachmentsrN   Úpatr,   Úpdf_urlsÚsmÚpdf_pathÚpdf_urlÚpuÚbody_mrG   rs   Útmrd   rj   Úelementsr`   rQ   rT   ÚmdÚsrc_mÚalt_mr:   Úfull_srcÚaltÚcontentÚa_hrefÚa_textr4   Ú	seen_urlsÚ
added_pdfsÚpdf_namerc   s$                                      @r   Úparse_detailr“   _   s9  ø€ à€MØ€Kà€Iðò ˆô �I‰I�c˜4¤§¡Ó+ˆÚØŸ™ ›
ˆIÙðð €HÜ�k‰kÐaÐcgÔik×irÑirÓsò !ˆØ—8‘8˜A“;ˆÜ˜#˜xÓ(ˆØ�‰˜Õ ð!ñ
 Øò 	BˆBØ×Ñ¨¸RÑ@ÕAð	Bä—‘Ð5°t¼R¿Y¹YÓGˆÙÜ—Z‘ZÐ 4°f·l±lÀ1³oÄrÇyÁyÓQò /�Ü—v‘v˜j¨"¨aÓ0×6Ñ6Ó8�ÚØ!×(Ñ(¨Õ.ð/ð �{‰{˜=Ó)¨2Ð-Ð-ð €LÜ�k‰kÐ4°iÄÇÁÓKò 4ˆØ×Ñ˜RŸX™X›Z¨¯©«Ð2Õ3ð4ô?òGð €HÜ5°iÓ@ó FÑˆˆS�'Ø�#Š:Ù˜CÔ ØÙ! 'Ô*ØØ˜Ñ 5¨GÑ#3ØÜ—6‘6˜* b¨'Ó2×8Ñ8Ó:ˆDÜ—6‘6˜& # tÓ,ˆDÚØ—‘  d Õ,Ø�GŠ^Ø�}‰}˜UÓ# aÓ'Ü'¨Ó0�ÚØ—O‘O S¨" IÕ.Ø�E‹\Ü—I‘IÐ.°Ó8ˆEÜ—I‘IÐ.°Ó8ˆEÚØ—k‘k !“n�Ü" 3¨Ó,�Ù(-�e—k‘k !”n°2�Ø—‘¡²Sº(Ð&CÐ DÖEð1Fð4 ‡M�M‘n€MÔ%Ø�k‰kÑ7¨hÔ7Ó7€Gô Ÿ*™*ØkØŒb�i‰ióò S‰ˆ�ð 	×Ñ V§\¡\£^¼GÀCÈÓ<PÑQÕRð	Sð $/Ö/˜a��5“Ð/€IÐ/Ø€JÜ�k‰kÐaÐcgÔik×irÑirÓsò TˆØ—8‘8˜A“;ˆÜ˜#˜xÓ(ˆØ˜)Ò#Ø�M‰M˜'Ô"Ø—}‘} SÓ)¨"Ñ-ˆHØ×Ñ˜gÔ&Ø×Ñ¨¸Ñ)AÈ'ÑRÕSðTñ ˜7Ÿ=™=œ?±
ØRˆØò 	1ˆBØ�} rÑ)¨DÑ0Ñ0‰Gð	1ð �KÐÐùò# 0s   ÎQ4r"   c                 óZ  — dd l }|j                  t        «      }|j                  «       }dx}}t	        d| dz   «      D �]Ä  }|dk(  rt
        t        z   dz   }nt
        t        z   d|dz
  z  z   }t        d||fz  d¬«       t        j                  t        «       t        |«      }|st        dd¬«        �nPt        ||«      }	|	st        d	d¬«        �n2t        d
t        |	«      z  d¬«       |	D �]   \  }
}}|j                  d|t        f«       |j!                  «       r|dz  }Œ6t        j                  t        «       t        |«      }|s|dz  }Œbt#        ||«      \  }}t%        j&                  |d¬«      }|r|d d n|
}|j                  dt        ||
||||f«       |j(                  dkD  sŒ¾|dz  }|r)t        d|
d d t        |«      t        |«      fz  d¬«       Œît        d|
d d z  d¬«       �Œ |j+                  «        �ŒÇ |j-                  «        t        dt        ||fz  d¬«       y )Nr   r   rt   z/index_%d.htmlu   [åˆ†é¡µ] ç¬¬%dé¡µ: %sT)Úflushu     [å®Œæˆ�] æ— æ³•èŽ·å�–u     [å®Œæˆ�] æ— æ•°æ�®u     æ‰¾åˆ° %d æ�¡z7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?F)Úensure_asciiéÈ   zwINSERT OR IGNORE INTO gov_raw (site_name,page_url,title,content,publish_date,attachments,summary) VALUES(?,?,?,?,?,?,?)u#     [æ­£æ–‡] %s -> %d chars, %dé™„ä»¶é#   u     [æ— æ–‡æœ¬] %su    
[DONE] %s: æ–°å¢ž=%d, è·³è¿‡=%d)Úsqlite3ÚconnectÚDB_PATHÚcursorÚrangeÚBASE_URLÚ	LIST_PATHr   ÚtimeÚsleepÚDELAYr   r1   r'   ÚexecuteÚ	SITE_NAMEÚfetchoner“   ÚjsonÚdumpsÚrowcountÚcommitÚclose)Ú	max_pagesr™   ÚconnÚcurÚ	new_countÚ
skip_countÚpager*   r)   r+   r.   Ú
detail_urlr/   Údetail_htmlr�   r~   ÚajÚsummarys                     r   Úcrawlrµ   Ì   s+  € ÛØ�?‰?œ7Ó#€DØ
�+‰+‹-€CØÐ€I�
ä�a˜ Q™Ó'ó 1ˆØ�1Š9Ü¤)Ñ+¨cÑ1‰Hô  ¤)Ñ+Ð.>À$ÈÁ(Ñ.KÑKˆHäÐ%¨¨xÐ(8Ñ8ÀÕEÜ�
‰
”5ÔÜ�X‹ˆÙÜÐ+°4Õ8Úä˜4 Ó*ˆÙÜÐ(°Õ5ÚäÐ¤# e£*Ñ,°DÕ9à',ó 	GÑ#ˆE�:˜tØ�K‰KÐQÐT^Ô`iÐSjÔkØ�|‰|Œ~Ø˜a‘�
Øä�J‰J”uÔÜ 
Ó+ˆKÙØ˜a‘�
Øä#/°¸ZÓ#HÑ ˆG�[Ü—‘˜K°eÔ<ˆBÙ'.�g˜d˜s‘m°EˆGà�K‰Kð JÜ˜J¨¨w¸¸bÀ'ÐJôð �|‰|˜aÓØ˜Q‘�	ÙÜÐ?Ø   "˜:¤s¨7£|´S¸Ó5EÐFñGØNRöTô Ð,¨u°S°b¨zÑ9À×Fð5	Gð8 	�‰Žðc1ðf 	‡J�J„LÜ	Ð
-´¸IÀzÐ0RÑ
RÐZ^Ö_r2   Ú__main__r   )é   )r5   )r"   ) Ú__doc__Úosr#   r   r¦   r    r;   r   r@   r   Úurllib.parser   Ússlr¤   rž   rŸ   Úgetenvr›   r¢   r   Ú_create_unverified_contextÚ_create_default_https_contextr   r1   rE   rW   r“   rµ   Ú__name__r'   ÚargvÚintr\   r2   r   ú<module>rÂ      sÅ   ðñ÷ × Ó Ý Ý Ý  Û 
Û à9€	Ø'€Ø,€	Ø
ˆ"�)‰)�KÐ!2Ó
3€Ø€ð pØOØ'ñ€ð %(×$BÑ$B€Ô !óòó$òò(j óZ:`ðz ˆzÒÙ	™c #§(¡(›m¨aÒ/‰#ˆc�h‰h�q‰kÔ
°QÕ7ð r2   