Ë
    €ÛµjÅ&  ã                   óˆ  — 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Zddl	m
Z
 ddlZdZdZdZej                  j!                  dd«      Zd	d
dœZd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e dk(  r e«        yy)uM  
ç�µçŸ³åŽ¿ - æ™‹ä¸­å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ç�µçŸ³åˆ†å±€ é€šçŸ¥å…¬å‘Š (lingshi.gov.cn)
åˆ—è¡¨: /zwgk/bmxxgkml/xzfgzbm/20hbj/fdzdgknrhjj/zcwj20hbj/tzgg20hbj
      /zwgk/bmxxgkml/xzfgzbm/20hbj/fdzdgknrhjj/zcwj20hbj/tzgg20hbj_N (N=2..42)
è¯¦æƒ…: /zwgk/.../tzgg20hbj/content_XXXXX
æ­£æ–‡: div.conTxt
æ³¨æ„�: DNSä¸�è§£æž�ï¼Œéœ€ IP + Host header
é    N)ÚBeautifulSoupzhttp://218.26.234.211u1   æ™‹ä¸­å¸‚ç”Ÿæ€�çŽ¯å¢ƒå±€ç�µçŸ³åˆ†å±€-é€šçŸ¥å…¬å‘Šu   å±±è¥¿çŽ¯è¯„å¹³å�°Ú	SEARCH_DBz/root/search.dbz<Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36zwww.lingshi.gov.cn)z
User-AgentÚHostz</zwgk/bmxxgkml/xzfgzbm/20hbj/fdzdgknrhjj/zcwj20hbj/tzgg20hbjz--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data:)Úurllib.parser   ÚstrÚfind_allÚgetÚ
startswithÚparseÚurljoin)ÚtableÚbase_urlÚurllibÚtblr	   r
   r   r   s           ú&/root/gov_crawler/crawl_lingshi_hbj.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: z - ©Úfiler   )r   ÚrequestÚRequestÚHEADERSÚurlopenÚreadÚdecodeÚ	ExceptionÚprintÚsysÚstderr)ÚurlÚreqÚes      r   Úfetchr6   -   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                 ór  — g }t        | d«      }|j                  d«      D �]  }|r|j                  dd¬«      nd}|sŒ|j                  dd«      }d	|vrŒ5|j                  d
d«      }|j	                  d«      r|dd j                  «       }n|j                  d¬«      }|rt        |«      dk  rŒ�|j	                  d«      s|j	                  d«      rd|z   }nd|z   }n|}|j                  dt        «      }	d}
|j                  dd¬«      }|r|j                  d¬«      }
|j                  ||	||
dœ«       �Œ |S )zExtract items from list pager   zul.infoList > lir	   T©r
   Nr
   r   Úcontent_Útitleu	   æ ‡é¢˜ï¼šé   ©Ústripé   r   ú/úhttp://www.lingshi.gov.cnzhttp://www.lingshi.gov.cn/ÚspanÚdate)Úclass_)r:   r3   Úorig_urlrB   )r   ÚselectÚfindr   r   r=   Úget_textÚlenr%   ÚBASE_URLÚappend)ÚhtmlÚitemsÚsoupÚlir	   r
   Ú
title_attrr:   rD   Ú	fetch_urlrB   rA   s               r   Úextract_itemsrQ   6   sJ  € à€EÜ˜˜}Ó-€DØ�k‰kÐ,Ó-ó #]ˆÙ')ˆB�G‰G�C˜dˆGÔ#¨tˆÙØØ�u‰u�V˜RÓ ˆØ˜TÑ!Øð —U‘U˜7 BÓ'ˆ
Ø× Ñ  Ô-Ø˜q˜r�N×(Ñ(Ó*‰Eà—J‘J T�JÓ*ˆEáœ˜E›
 QšØð �‰˜vÔ&Ø�‰˜sÔ#Ø6¸Ñ=‘à7¸$Ñ>‘àˆHà×$Ñ$Ð%@Ä(ÓKˆ	ð ˆØ�w‰w�v fˆwÓ-ˆÙØ—=‘= t�=Ó,ˆDà�‰˜u¨YÀHÐVZÑ[Ö\ðG#]ðH €Lr   c                 ó  — t        | d«      }d}|j                  dddi¬«      }|r$|j                  d«      r|d   j                  «       }d}|j                  dddi¬«      }|r=|j                  d«      r,t	        j
                  d	|d   «      }|r|j                  d
«      }d}g }|j                  d«      }	|	s||dg dœS 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«      }d|j                  «       v sd|j                  «       v rŒŒ|j                  dd«      xs d}|j                  d«      rd|z   }nC|j                  d«      rd|z   }n,|j                  d«      s|j                  dd
«      d   dz   |z   }|
j                  d|› d|› d�«       �Œ|j                  dk(  rt        ||«      }|r|
j                  |«       |j!                  d d¬!«      }|s�Œ[|j                  d"d¬#«      D ]®  }|d$   }t	        j
                  d%|t        j"                  «      sŒ.|j!                  d¬!«      xs |j                  d&d«      }|j                  d«      rd|z   }n,|j                  d«      s|j                  dd
«      d   dz   |z   }|j                  |xs d'|d(œ«       Œ° |
j                  |«       �Œ2 d)j%                  d*„ |
D «       «      }|j'                  d+d «      j'                  d,d «      }t)        «       }g }|D ]/  }|d-   |vsŒ|j+                  |d-   «       |j                  |«       Œ1 ||||dœS ).zParse detail pager   r   ÚmetaÚnameÚArticleTitle)ÚattrsÚcontentÚPubDatez(\d{4}-\d{2}-\d{2})r   z
div.conTxt)r:   rB   rW   Úattachments)Úpr   r   T)Ú	recursiverZ   r   r   r   Úicon_z
/sysimage/Úaltr   zhttp:r?   r@   r   r   z![z](ú)ú r<   r	   r8   r
   z\.(docx?|pdf|xlsx?|rar|zip)$Údownloadu   é™„ä»¶)r:   r3   z

c              3   óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­w)Nr<   )Ú.0rZ   s     r   ú	<genexpr>zparse_detail.<locals>.<genexpr>�   s   è ø€ Ò8 ¨a¯g©g­iœ!Ñ8ùs   ‚˜õ   Â z&nbsp;r3   )r   rF   r   r=   ÚreÚsearchÚgroupÚ
select_oner   rT   Úfind_parentÚlowerr   ÚrsplitrJ   r   rG   ÚIÚjoinr%   ÚsetÚadd)rK   r3   rM   r:   rS   Ú	date_textÚmrW   rY   Úcontent_divÚpartsÚelr   r]   Útbl_htmlÚtextr	   ÚahrefÚatitleÚseenÚ
unique_attÚatts                         r   Úparse_detailr|   a   sn  € ä˜˜}Ó-€Dà€EØ�9‰9�V F¨NÐ#;ˆ9Ó<€DÙ�—‘˜Ô#Ø�Y‘×%Ñ%Ó'ˆà€IØ�9‰9�V F¨IÐ#6ˆ9Ó7€DÙ�—‘˜Ô#Ü�I‰IÐ,¨d°9©oÓ>ˆÙØŸ™ ›
ˆIà€GØ€KØ—/‘/ ,Ó/€KÙØ¨	¸bÐQSÑTÐTà€EØ×"Ñ"Ò#8ÀDÐ"ÓIó #ˆØ�7‰7�cŠ>˜bŸn™n¨WÔ5ØØ�7‰7�gÒ "§.¡.°Ô"9Øà�7‰7�eÒØ—&‘&˜ Ó#ˆCØ˜#Ÿ)™)›+Ñ%¨¸¿¹»Ñ)DØØ—&‘&˜ Ó#Ò) rˆCØ�~‰~˜dÔ#Ø ‘m‘Ø—‘ Ô$Ø1°CÑ7‘Ø—^‘^ FÔ+Ø—j‘j  aÓ(¨Ñ+¨cÑ1°CÑ7�Ø�L‰L˜2˜c˜U " S E¨Ð+Ô,Ùà�7‰7�gÒÜ)¨"¨cÓ2ˆHÙØ—‘˜XÔ&Ø�{‰{˜3 dˆ{Ó+ˆÛØ—[‘[ ¨4�[Ó0ò T�Ø˜&™	�Ü—9‘9Ð<¸eÄRÇTÁTÕJØŸZ™Z¨d˜ZÓ3ÒL°q·u±u¸ZÈÓ7L�FØ×'Ñ'¨Ô,Ø ;¸eÑ C™Ø"×-Ñ-¨fÔ5Ø #§
¡
¨3°Ó 2°1Ñ 5¸Ñ ;¸eÑ C˜Ø×&Ñ&°Ò1C¸8ÈEÑ'RÕSðTð �L‰L˜ÖðG#ðJ �k‰kÑ8 UÔ8Ó8€GØ�o‰o˜h¨Ó,×4Ñ4°X¸sÓC€Gä‹5€DØ€JØò #ˆØˆu‰:˜TÒ!Ø�H‰H�S˜‘ZÔ Ø×Ñ˜cÕ"ð#ð
  I¸'ÐR\Ñ]Ð]r   c                  ó 	  — t        j                  t        d¬«      } | j                  d«       | j	                  «       }| j                  «        t        dd¬«       g }t        t        › t        › �«      }|s0t        dt        j                  ¬«       t        j                  d	«       t        |«      }t        d
t        |«      › d�d¬«       |j                  |«       t!        j"                  d|«      }|rt%        |j'                  d«      «      nd}|rt%        |j'                  d	«      «      nd}t        d|› d|› d�d¬«       t(        r|t(        kD  rt(        }t        d|› �d¬«       t+        d|d	z   «      D ]_  }t        › t        › d|› �}	t        |	«      }|s n?t        |«      }|s n0t        d|› dt        |«      › d�d¬«       |j                  |«       Œa t        dt        |«      › �d¬«       d}
d}d}d}t-        |«      D �]  \  }}|j                  d|d   f«       |j/                  «       r|d	z  }Œ3|dz  dk(  r6t        d|› dt        |«      › d|d   d d  › d!�dd"t        j                  ¬#«       t        |d$   «      }|st        d%t        j                  ¬«       Œ�t1        ||d$   «      }|d   xs |d   }|d&   xs |d&   }|d'   }|d(   }|j3                  «       s*|d	z  }|dz  dk(  rt        d)t        j                  ¬«       �Œt!        j4                  d*d"|«      j3                  «       }|r|d d+ n|d d+ }|rt7        j8                  |d,¬-«      nd.}d}|rVt!        j"                  d/|«      }|r>t%        |j'                  d	«      |j'                  d«      z   |j'                  d0«      z   «      }	 |j                  d1|t:        t<        |d   |||||f	«       |j>                  dkD  r|
d	z  }
|t        |«      z  }tC        jD                  d3«       �Œ | j                  «        | jG                  «        t        d4t:        › d|
› d5|› d6|› d7|› d8�d¬«       y # t@        $ r0}|dz  dk(  rt        d2|› �t        j                  ¬«       Y d }~ŒŽd }~ww xY w)9Né<   r#   zPRAGMA busy_timeout=60000u!   [æ¸…ç�†] å·²æ¸…ç�†è¯¥ç«™æ—§æ•°æ�®T)Úflushz[ERROR] Cannot fetch list pager'   r   z[INFO] Page 1: z itemsu   å…±(\d+)æ�¡ä¿¡æ�¯/å…±(\d+)é¡µé   é*   iC  z[INFO] Total: u   æ�¡ / u   é¡µu   [INFO] å®žé™…æŠ“å�–é¡µæ•°: Ú_z[INFO] Page z: z[INFO] Total items from list: r   z'SELECT id FROM gov_raw WHERE page_url=?rD   r>   z[INFO] [r?   z] r:   é(   z...r_   )r   Úendr(   r3   zFETCH FAILEDrB   rW   rY   ÚEMPTYz\s+éÈ   F)Úensure_asciiz[]z(\d{4})-(\d{2})-(\d{2})r;   zºINSERT OR IGNORE INTO gov_raw 
                (title, site_name, group_name, page_url, publish_date, content, summary, attachments, date_rank)
                VALUES (?,?,?,?,?,?,?,?,?)z
DB ERROR: g333333Ó?z

[RESULT] z new, z skip, z empty, z attachments)$Úsqlite3ÚconnectÚDBÚexecuteÚcursorÚcommitr0   r6   rI   Ú	LIST_PATHr1   r2   ÚexitrQ   rH   Úextendre   rf   Úintrg   Ú_MAX_PGÚrangeÚ	enumerateÚfetchoner|   r=   ÚsubÚjsonÚdumpsÚ	SITE_NAMEÚ
GROUP_NAMEÚrowcountr/   ÚtimeÚsleepÚclose)ÚconnÚcÚ	all_itemsrK   rL   rq   Útotal_pagesÚtotal_recordsÚpgr3   Ú	new_countÚ
skip_countÚempty_countÚ	total_attÚidxÚitemÚdetailr:   rp   rW   Úattachments_listÚplainÚsummaryÚatt_jsonÚ	date_rankÚm2r5   s                              r   Úmainr²   ª   sa  € Ü�?‰?œ2 rÔ*€DØ‡L�LÐ,Ô-Ø�‰‹€Að
 	‡K�K„MÜ	Ð
-°TÕ:à€Iô ”H�:œi˜[Ð)Ó*€DÙÜÐ.´S·Z±ZÕ@Ü�‰�ŒÜ˜$Ó€EÜ	ˆOœC ›J˜< vÐ
.°dÕ;Ø×Ñ�UÔô 	�	‰	Ð2°DÓ9€AÙ%&”#�a—g‘g˜a“j”/¨B€KÙ'(”C˜Ÿ™ ›
”O¨c€MÜ	ˆN˜=˜/¨°¨}¸CÐ
@ÈÕMå�;¤Ò(ÜˆÜ	Ð'¨ }Ð
5¸TÕBô �A�{ Q‘Ó'ò 	 ˆÜ�
œ9˜+ Q r dÐ+ˆÜ�S‹zˆÙÙÜ˜dÓ#ˆÙÙÜ�˜R˜D ¤3 u£: ,¨fÐ5¸TÕBØ×Ñ˜Õð	 ô 
Ð*¬3¨y«>Ð*:Ð
;À4ÕHà€IØ€JØ€KØ€Iä˜yÓ)ó 2‰	ˆˆTØ	�	‰	Ð;¸dÀ:Ñ>NÐ=PÔQØ�:‰:Œ<Ø˜!‰OˆJØà�‰7�aŠ<Ü�H˜S˜E ¤3 y£>Ð"2°"°T¸'±]À3ÀBÐ5GÐ4HÈÐLÐTXÐ^aÔhk×hrÑhrÕsä�T˜%‘[Ó!ˆÙÜ�.¤s§z¡zÕ2Øä˜d D¨¡KÓ0ˆØ�w‘Ò0 4¨¡=ˆØ˜6‘NÒ2 d¨6¡lˆ	Ø˜Ñ#ˆØ! -Ñ0Ðà�}‰}ŒØ˜1ÑˆKØ�Q‰w˜!Š|Ü�g¤C§J¡JÕ/Ùä—‘�v˜s GÓ,×2Ñ2Ó4ˆÙ!&�%˜˜‘+¨E°$°3¨KˆÙGW”4—:‘:Ð.¸UÕCÐ]aˆàˆ	ÙÜ—‘Ð5°yÓAˆBÙÜ §¡¨£¨b¯h©h°q«kÑ 9¸B¿H¹HÀQ»KÑ GÓH�	ð	9Ø�I‰Ið.ð œ	¤:¨t°JÑ/?ÀÈGÐU\Ð^fÐhqÐrô	ð �z‰z˜AŠ~Ø˜Q‘�	ØœSÐ!1Ó2Ñ2�	ô
 	�
‰
�3Žðe2ðh 	‡K�K„MØ‡J�J„Lä	ˆKœ	�{ " Y K¨v°j°\ÀÈÈÐU]Ð^gÐ]hÐhtÐ
uð  ~Bö  Cøô ò 	9Ø�Q‰w˜!Š|Ü˜
 1 #Ð&¬S¯Z©ZÕ8ÿøð	9ús   Î2AQÑ	RÑ&RÒRÚ__main__)r   )!Ú__doc__re   r1   Úosr—   rœ   Úurllib.requestr   Úurllib.errorÚbs4r   rˆ   rI   r™   rš   Úenvironr   rŠ   r+   rŽ   r’   r”   ÚargvÚir	   rH   r‘   r   r6   rQ   r|   r²   Ú__name__© r   r   ú<module>r¾      sß   ðñ÷ × Ó ß #Ý Û à"€Ø?€	Ø!€
Ø‡Z�Z‡^�^�KÐ!2Ó3€àPØ ñ€ð K€	à
€Ù�c—h‘hÓò �D€A€qØˆIƒ~˜!˜a™%¡# c§h¡h£-Ó/Ù�c—h‘h˜q 1™u‘oÓ&ˆÙðóòò(òVF^òRjCðZ ˆzÒÙ…Fð r   