Ë
    ¸¬ujÃ  ã            	       ó–  — d Z ddlZddlZddlZddlZddlmZmZmZ ddlZddl	Z	ddlZ e	j                  e	j                  j                  «       dZdZ ej                  dd«      ZdZ ej$                  ej&                  «       ed	¬
«      z
  j)                  d«      ZddiZd„ Zd„ Zd„ Zd„ Zdd„Zedk(  r”dej:                  v ZerdndZ e «         e dez   dz   ez   «        ej                  «       Z! ee¬«      \  Z"Z# e d e$ e% ej                  «       e!z
  d«      «      z   dz   «        e d e$e"«      z   dz    e$e#«      z   «       yy) už  
å®œæ˜Œå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯å¢ƒå½±å“�è¯„ä»· (hbj.yichang.gov.cn)
============================================
CMS: å®œæ˜Œå¸‚æ”¿åºœç½‘ç«™ç¾¤ï¼ˆè‡ªç ”ï¼‰
åˆ—è¡¨: list-42531-{page}.html, æ¯�é¡µ15æ�¡
è¯¦æƒ…: content-42531-{id}-1.html, <div class="txtcontent-div"> å�«æ­£æ–‡

ç”¨æ³•:
    python3 crawl_yichang_hbj.py          # å…¨é‡�(æœ€å¤š55é¡µ+æ—¥æœŸè¿‡æ»¤)
    python3 crawl_yichang_hbj.py --test   # æµ‹è¯• 5 æ�¡
é    N)ÚdatetimeÚ	timedeltaÚtimezoneu+   å®œæ˜Œå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€-çŽ¯å¢ƒå½±å“�è¯„ä»·z,http://hbj.yichang.gov.cn/list-42531-{}.htmlÚ	SEARCH_DBz/root/search.dbé   iG  )Údaysz%Y-%m-%dz
User-Agentz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36c                 ó  — t         j                  | «      }	 t        j                  |t        dd¬«      }d|_        |j                  S # t        $ r3}t        dt        | «      z   dz   t        |«      d d z   «       Y d }~y d }~ww xY w)Né   F©ÚheadersÚtimeoutÚverifyúutf-8z  ! list page z fail: é<   )
ÚLIST_URLÚformatÚrequestsÚgetÚHEADERSÚencodingÚtextÚ	ExceptionÚprintÚstr)ÚpageÚurlÚrÚes       ú&/root/gov_crawler/crawl_yichang_hbj.pyÚ
fetch_listr       sr   € Ü
�/‰/˜$Ó
€CðÜ�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆøÜò ÜÐ¤ T£Ñ*¨YÑ6¼¸Q»ÀÀ¸ÑDÔEÜûðús   —/A Á	BÁ)A>Á>Bc                 ób  — g }t        j                  d| t         j                  «      D ]„  }|j                  d«      }|j	                  d«      s|j	                  d«      rd|z   nd|z   }|j                  d«      j                  «       }|j                  d«      }|j                  |||d	œ«       Œ† |S )
Nzm<div class="txtlisty1">.*?<a[^>]*href="([^"]+)"[^>]*>([^<]+)</a>.*?<div class="txtlisty2">(\d{4}-\d{2}-\d{2})é   Úhttpú/zhttp://hbj.yichang.gov.cnzhttp://hbj.yichang.gov.cn/é   é   )Útitler   Úpub_date)ÚreÚfinditerÚDOTALLÚgroupÚ
startswithÚstripÚappend)ÚhtmlÚitemsÚmr   r'   r(   s         r   Ú
parse_listr3   %   s¦   € Ø€EÜ�[‰[ð	6àŒb�i‰ióò 
Iˆð
 �g‰g�a‹jˆØ�~‰~˜fÔ%Ø7:·~±~ÀcÔ7JÐ-°Ò3ÐPlÐorÑPrˆCØ—‘˜“
× Ñ Ó"ˆØ—7‘7˜1“:ˆØ�‰˜u¨S¸hÑGÕHð
Ið €Ló    c                 óL  — 	 t        j                  | t        dd¬«      }d|_        |j                  }d}t        j                  d|t
        j                  «      }|D ]3  }t        j                  dd|«      j                  «       }|sŒ+|dk7  sŒ1|} n |s7t        j                  d	|«      }|r|j                  d
«      j                  «       }|j                  d«      }|dk  ry|j                  dd|«      }	|	dk  ry||	d }
|
j                  d«      }|dk  ryd
}|}t        |t        |
«      «      D ]K  }|
||dz    dk(  r!|dz   t        |
«      k\  s
|
|dz      dv r|d
z  }Œ/|
||dz    dk(  sŒ;|d
z  }|dk(  sŒF|dz   } n d}d}t        |t        |
«      «      D ]Y  }|
||dz    dk(  r!|dz   t        |
«      k\  s
|
|dz      dv r|d
z  }Œ/|
||dz    dk(  sŒ;|dk(  r|
|| j                  «       } n|d
z  }Œ[ t        j                  dd|t
        j                  t
        j                   z  ¬«      }t        j                  dd|t
        j                  t
        j                   z  ¬«      }|j                  «       }||fS # t"        $ r$}t%        dt'        |«      dd z   «       Y d}~yd}~ww xY w)z2Extract full title + article body from detail pager
   Fr   r   Ú z<h1[^>]*>(.*?)</h1>z<[^>]+>u   å®œæ˜Œå¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€z<title>(.*?)</title>r"   zclass="txtcontent-div"r   z<divNzclass="nry-info"é   z >
	é   z</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>z  ! detail fail: éP   )r6   r6   )r   r   r   r   r   r)   Úfindallr+   Úsubr.   Úsearchr,   ÚfindÚrfindÚrangeÚlenÚIr   r   r   )r   r   r0   Ú
full_titleÚh1sÚh1Útr2   ÚidxÚ	div_startÚsectionÚnry_posÚdepthÚ	after_nryÚiÚcontent_depthÚcontentÚjr   s                      r   Úfetch_detailrQ   4   sÃ  € ð:Ü�L‰L˜¤g°rÀ%ÔHˆØˆŒ
Ø�v‰vˆð ˆ
Ü�j‰jÐ/°´r·y±yÓAˆØò 	ˆBÜ—‘�z 2 rÓ*×0Ñ0Ó2ˆAÚ�QÐ4Ó4Ø�
Ùð		ñ Ü—	‘	Ð1°4Ó8ˆAÙØŸW™W Q›Z×-Ñ-Ó/�
à�i‰iÐ2Ó3ˆØ�Š7ØØ—J‘J˜v q¨#Ó.ˆ	Ø�qŠ=ØØ�y�zÐ"ˆà—,‘,Ð3Ó4ˆØ�QŠ;ØØˆØˆ	Ü�w¤ G£Ó-ò 	ˆAØ�q˜˜1™ˆ~ Ò'¨Q¨q©S´C¸³LÒ-@ÀGÈAÈaÉCÁLÐT^ÑD^Ø˜‘
‘Ø˜˜1˜Q™3� 8Ó+Ø˜‘
�Ø˜A“:Ø ! A¡�IÙð	ð ˆØˆÜ�y¤# g£,Ó/ò 	#ˆAØ�q˜˜1™ˆ~ Ò'¨Q¨q©S´C¸³LÒ-@ÀGÈAÈaÉCÁLÐT^ÑD^Ø Ñ"‘Ø˜˜1˜Q™3� 8Ó+Ø  AÒ%Ø% i°Ð2×8Ñ8Ó:�GÙØ Ñ"‘ð	#ô —&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆØ—-‘-“/ˆØ˜7Ð"Ð"øÜò ÜÐ!¤C¨£F¨3¨B KÑ/Ô0ÜûðúsL   ‚BI6 ÂI6 ÂAI6 Ã!I6 Ã:I6 ÄAI6 Å*
I6 Å5AI6 ÇB$I6 É6	J#É?JÊJ#c                 óJ  — | sydd l }|j                  t        «      }|j                  d«       |j                  d«       d\  }}| D ]†  }	 |j                  dt        |j                  d«      xs dd d |j                  d	d«      |j                  d
d«      |j                  d«      xs dd d ddf«       |j                  dkD  r|dz  }n|dz  }Œˆ |j                  dt        f«       |j                  «        |j                  «        ||fS # t        $ r}|dz  }Y d }~Œ×d }~ww xY w)N©r   r   r   zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMALzxINSERT OR REPLACE INTO gov_raw (site_name, title, page_url, content, publish_date, summary, tags) VALUES (?,?,?,?,?,?,?)r'   r6   iô  r   rO   r(   é
   u   çŽ¯å¢ƒå½±å“�è¯„ä»·r"   z·INSERT INTO gov_search(rowid, title, site_name, summary) SELECT r.id, r.title, r.site_name, r.summary FROM gov_raw r WHERE r.id NOT IN (SELECT rowid FROM gov_search) AND r.site_name=?)
Úsqlite3Úconnectr   ÚexecuteÚ	SITE_NAMEr   Útotal_changesr   ÚcommitÚclose)r1   rU   ÚdbÚokÚfailÚitr   s          r   Úto_dbr`   r   s2  € ÙØÛØ	�‰œÓ	#€BØ‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð)ô Ø—V‘V˜G“_Ò*¨¨D¨SÐ1Ø—F‘F˜5 "Ó%Ø—F‘F˜9 bÓ)Ø—V‘V˜JÓ'Ò-¨2¨s°Ð3ØØ(ðô	ð ×Ñ !Ò#Ø�a‘‘à˜‘	�øð'ð, ‡J�Jð	\ô 
ˆô	ð ‡I�I„KØ‡H�H„JØˆtˆ8€Oøô ò 	Ø�A‰I�Dûð	ús   Á
BD
Ä
	D"ÄDÄD"c           	      ó   — g }t        «       }t        dt        dz   «      D ]ð  }t        |«      }|s nát	        |«      }|st        dt        |«      z   dz   «        n¸d}|D ]F  }|d   |v rŒ|j                  |d   «       |d   r|d   t        k  rŒ1|j                  |«       |dz  }ŒH |r|d   d   nd}|r|d   d   nd}	t        dt        |«      z   d	z   t        t        |«      «      z   d
z   |z   dz   |	z   dz   t        |«      z   «       |dk(  sŒð n t        dt        t        |«      «      z   dz   «       | r(|d d }t        dt        t        |«      «      z   dz   «       |syt        |«      D ]�  \  }
}t        dt        |
dz   «      z   dz   t        t        |«      «      z   d	z   |d   d d z   dz   dd¬«       t        |d   «      \  }}||d<   |r||d<   t        t        t        |«      «      dz   |rdndz   «       Œ� t        |«      \  }}||fS )Nr"   z  [Page z] empty, reached endr   r   r(   ú?éÿÿÿÿú] z items (z ~ z), new: z	  Total: z items within 3yrr   z  TEST mode: z itemsrS   z  [r$   r'   é(   z... r6   T)ÚendÚflushrO   ÚBz  title_fixed)Úsetr@   Ú	MAX_PAGESr    r3   r   r   ÚaddÚCUTOFFr/   rA   Ú	enumeraterQ   r`   )ÚtestÚ	all_itemsÚ	seen_urlsr   r0   r1   ÚnewÚitemÚfÚlrM   rC   rO   r]   r^   s                  r   Úcrawlru   š   sM  € Ø€IÜ“€IÜ�aœ Q™Ó'ò ˆÜ˜$ÓˆÙÙÜ˜4Ó ˆÙÜ�*œs 4›yÑ(Ð+AÑAÔBÙØˆØò 	ˆDØ�E‰{˜iÑ'ØØ�M‰M˜$˜u™+Ô&Ø�JÒ D¨Ñ$4´vÒ$=ØØ×Ñ˜TÔ"Ø�1‰H‰Cð	ñ %*ˆE�!‰H�ZÒ ¨sˆÙ%*ˆE�"‰I�jÒ!°ˆÜˆjœ3˜t›9Ñ$ tÑ+¬c´#°e³*«oÑ=À
ÑJÈQÑNÐQVÑVÐYZÑZÐ]gÑgÔjmÐnqÓjrÑrÔsØ�!‹8Ùð+ô, 
ˆ+œœC 	›NÓ+Ñ
+Ð.AÑ
AÔBÙØ˜b˜q�Mˆ	Üˆo¤¤C¨	£NÓ 3Ñ3°hÑ>Ô?ÙØÜ˜YÓ'ò Q‰ˆˆ4Üˆe”c˜!˜A™#“hÑ Ñ$¤s¬3¨y«>Ó':Ñ:¸TÑAÀDÈÁMÐRUÐSUÐDVÑVÐY_Ñ_ÐegÐosÕtÜ*¨4°©;Ó7Ñˆ
�GØ!ˆˆY‰ÙØ&ˆD�‰MÜŒc”#�g“,Ó #Ñ%¹J©ÈBÑOÕPðQô �YÓ�H€BˆØˆtˆ8€Or4   Ú__main__z--testÚTESTÚFULLú[rd   )rn   z  Time: r"   Úsz  New: z Skip: )F)&Ú__doc__r)   ÚsysÚosÚtimer   r   r   r   Úurllib3Údisable_warningsÚ
exceptionsÚInsecureRequestWarningrX   r   Úgetenvr   rj   ÚnowÚutcÚstrftimerl   r   r    r3   rQ   r`   ru   Ú__name__Úargvrn   Úmoder   Út0r]   r^   r   Úround© r4   r   ú<module>r�      sQ  ðñ
÷ × ß 2Ñ 2ß Û 	Ø €× Ñ ˜×+Ñ+×BÑBÔ Cà:€	Ø;€ØˆB�I‰I�kÐ#4Ó5€	Ø€	Øˆh�l‰l˜8Ÿ<™<Ó(©9¸%Ô+@Ñ@×JÑJÈ:ÓV€ØÐZÐ[€òòò<ò|&óP'ðR ˆzÒØ�s—x‘xÐ€DÙ‰6˜v€DÙ	„GÙ	ˆ#�	‰/˜DÑ
  4Ñ
'Ô(Ø	ˆ�‰‹€BÙ˜$Ô�H€BˆÙ	ˆ*‘s™5  §¡£¨R¡°Ó3Ó4Ñ
4°sÑ
:Ô;Ù	ˆ)‘c˜"“gÑ
 	Ñ
)©C°«IÑ
5Õ6ð r4   