Ë
    |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
Z
ddlZddlmZmZ dZedz   ZdZdZdZej(                  j+                  d	d
«      Zej(                  j+                  dd«      ZdZddddœZdZdadZ eej<                  «      D ]k  \  ZZ e jC                  d«      r	  e"e jG                  dd«      d   «      ZŒ4e dk(  sŒ:edz    e%ej<                  «      k  sŒS	  e"ej<                  edz      «      ZŒm edk\  rendZ&d"d„Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d „ Z/e0d!k(  r e/«        yy# e$$ r Y Œ¨w xY w# e$$ r Y Œ³w xY w)#uŠ  
crawl_jianhu_hpgs.py - å»ºæ¹–-é¡¹ç›®çŽ¯è¯„
https://www.jianhu.gov.cn/col/col21201/index.html
åˆ—è¡¨: TRS dataproxy.jsp åŠ¨æ€�æŽ¥å�£ (CDATA å†… li > a[title] + span æ—¥æœŸ)
  https://www.jianhu.gov.cn/module/web/jpage/dataproxy.jsp?page=N&appid=1&webid=57&path=/&columnid=21201&unitid=49858&webname=å»ºæ¹–åŽ¿äººæ°‘æ”¿åºœ&permissiontype=0
è¯¦æƒ…: /art/YYYY/M/D/art_21201_ID.html
  â†’ <!--$[æ ‡é¢˜å��ç§°(html)]>begin--> æ ‡é¢˜ + sp_time "å�‘å¸ƒæ—¥æœŸï¼šYYYY-MM-DD" + #zoom æ­£æ–‡(å�«è¡¨æ ¼+é™„ä»¶downfile)
æ³¨æ„�: é™„ä»¶ href æ˜¯ /module/download/downfile.jsp?classid=0&filename=xxx éœ€è½¬ç»�å¯¹ URL (&amp; æ˜¯å�ˆæ³•HTMLå®žä½“, æµ�è§ˆå™¨è‡ªåŠ¨è§£ç �)
é    N)ÚBeautifulSoupÚCommentzhttps://www.jianhu.gov.cnz/module/web/jpage/dataproxy.jspu   å»ºæ¹–-é¡¹ç›®çŽ¯è¯„u   æ±Ÿè‹�zcrawl_jianhu_hpgs.pyÚDB_PATHz/root/search.dbÚ
JSONL_PATHÚ úutf-8zkMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.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-Languageg      ø?g        é   z--pages=ú=z--pagesc                 ó’  — t        j                   «       t        z
  }|t        k  rt        j                  t        |z
  «       t        j                   «       at	        |«      D ]V  }	 t        j                  | t        |d¬«      }|j                  dk(  rd|_	        |c S 	 t        j                  d|dz  z   «       ŒX y # t        $ r Y Œ)w xY w)NF)ÚheadersÚtimeoutÚverifyéÈ   r   é   )ÚtimeÚ	_last_reqÚREQUEST_INTERVALÚsleepÚrangeÚrequestsÚgetÚHEADERSÚstatus_codeÚencodingÚ	Exception)ÚurlÚretriesr   ÚdtÚiÚrs         ú&/root/gov_crawler/crawl_jianhu_hpgs.pyÚhttp_getr#   :   s°   € ä	�‰‹”yÑ	 €BØ	ÔÒÜ�
‰
Ô# bÑ(Ô)Ü—	‘	“€IÜ�7‹^ò ˆð	Ü—‘˜S¬'¸7È5ÔQˆAØ�}‰} Ò#Ø$�”
Ø’ð $ô
 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	Ùð	ús   Á$4B:Â:	CÃCc                 ó  — | syt        j                  | «      } | j                  dd«      j                  dd«      j                  dd«      j                  dd«      } t        j                  dd| «      } | j                  «       S )Nr   u   â€‹u   â€Œu   â€�u   ï»¿ú\s+ú )Úhtml_libÚunescapeÚreplaceÚreÚsubÚstrip)Úts    r"   Úclean_titler.   L   so   € ÙØÜ×Ñ˜!Ó€AØ	�	‰	�(˜BÓ×'Ñ'¨°"Ó5×=Ñ=¸hÈÓK×SÑSÐT\Ð^`Óa€AÜ
�‰ˆv�s˜AÓ€AØ�7‰7‹9Ðó    c           
      ót  — | ddddddddœ}t        t        d	z   t        j                  j	                  |«      z   «      }|€ddg fS |j
                  }d}d}t        j                  d
|«      }t        j                  d|«      }|rt        |j                  d«      «      }|rt        |j                  d«      «      }g }t        j                  d|t        j                  «      D ]Ò  }	|	j                  d«      }
t        j                  d|
t        j                  «      }|sŒ<|j                  d«      }t        t        j                  dd|j                  d«      «      «      }|j                  d«      j                  «       }t        j                  j                  t         |«      }|j#                  |||f«       ŒÔ |||fS )uX   è°ƒ dataproxy.jsp æ‹¿ä¸€é¡µåˆ—è¡¨, è¿”å›ž (æ€»é¡µæ•°, æ€»æ�¡æ•°, [(abs_url,title,date)])r
   é9   ú/iÑR  Ú49858u   å»ºæ¹–åŽ¿äººæ°‘æ”¿åºœr   )ÚpageÚappidÚwebidÚpathÚcolumnidÚunitidÚwebnameÚpermissiontypeú?z<totalpage>(\d+)</totalpage>z <totalrecord>(\d+)</totalrecord>z&<record><!\[CDATA\[(.*?)\]\]></record>z2<a href="([^"]+)"[^>]*>(.*?)<span>(.*?)</span></a>ú<[^>]+>r   r   é   )r#   ÚLIST_URLÚurllibÚparseÚ	urlencodeÚtextr*   ÚsearchÚintÚgroupÚfinditerÚSr.   r+   r,   ÚurljoinÚBASE_URLÚappend)r4   Úparamsr!   Ú	html_textÚ	totalpageÚtotalrecordÚtmÚrmÚitemsÚmÚblockÚhmÚhrefÚtitleÚdateÚabs_urls                   r"   Ú
fetch_listrZ   U   sƒ  € ð ØØØØØØ*Øñ	€Fô 	”˜C‘¤&§,¡,×"8Ñ"8¸Ó"@Ñ@ÓA€AØ€yØ�!�RˆxˆØ—‘€IØ€IØ€KÜ	�‰Ð2°IÓ	>€BÜ	�‰Ð6¸	Ó	B€BÙ	Ü˜Ÿ™ ›Ó$ˆ	Ù	Ü˜"Ÿ(™( 1›+Ó&ˆØ€EÜ�[‰[ÐBÀIÌrÏtÉtÓTò 	-ˆØ—‘˜“
ˆÜ�Y‰YÐLÈeÔUW×UYÑUYÓZˆÙØØ�x‰x˜‹{ˆÜœBŸF™F :¨r°2·8±8¸A³;Ó?Ó@ˆØ�x‰x˜‹{× Ñ Ó"ˆÜ—,‘,×&Ñ&¤x°Ó6ˆØ�‰�g˜u dÐ+Õ,ð	-ð �k 5Ð(Ð(r/   c                 ó  — t        | «      }|€y|j                  }t        |d«      }t        j                  d|t        j
                  «      }|rt        |j                  d«      «      }n4t        j                  d|«      }|rt        |j                  d«      «      nd}t        j                  d|«      }|r|j                  d«      nd}|j                  d	d
¬«      }	|	s||dfS |	j                  d„ ¬«      D ]  }
|
j                  «        Œ |||	fS )u-   è¯¦æƒ…é¡µ: è¿”å›ž (title, pubdate, zoom_soup)N)NNNzhtml.parseruS   <!--<\$\[æ ‡é¢˜å��ç§°\(html\)\]>begin-->(.*?)<!--<\$\[æ ‡é¢˜å��ç§°\(html\)\]>end-->r
   z+<meta name="ArticleTitle" content="([^"]*)"r   u"   å�‘å¸ƒæ—¥æœŸï¼š(\d{4}-\d{2}-\d{2})ÚdivÚzoom)Úidc                 ó"   — t        | t        «      S )N)Ú
isinstancer   )Úss    r"   ú<lambda>zparse_detail.<locals>.<lambda>Ž   s   € ¬J°q¼'Ó,B€ r/   )Ústring)r#   rC   r   r*   rD   rH   r.   rF   ÚfindÚfind_allÚextract)r   r!   rM   ÚsouprP   rW   Útm2ÚdmÚpubdater]   Úcs              r"   Úparse_detailrl   {   sô   € ä�‹€AØ€yØØ—‘€IÜ˜ MÓ2€Dä	�‰ÐiÐktÔvx×vzÑvzÓ	{€BÙ	Ü˜BŸH™H Q›KÓ(‰ä�i‰iÐFÈ	ÓRˆÙ-0”˜CŸI™I a›LÔ)°bˆÜ	�‰Ð8¸)Ó	D€BÙˆb�h‰h�qŒk R€GØ�9‰9�U˜vˆ9Ó&€DÙØ�g˜tÐ#Ð#Ø�]‰]Ñ"Bˆ]ÓCò ˆØ	�	‰	�ðà�'˜4ÐÐr/   c                 ó  — | €ddg fS | j                  g d¢«      D ]  }|j                  «        Œ t        | j                  d«      «      }g }| j                  dd¬«      D ]™  }|d   j	                  «       }|j                  d	«      s|j                  d
«      r't        j                  j                  t        |«      |d<   d|v sd|v sŒht        |j                  «       «      }|sŒ„|j                  |d   |f«       Œ› t        | «      }|||fS )u@   æ­£æ–‡: ä¿�ç•™è¡¨æ ¼/é™„ä»¶, é™„ä»¶è½¬ç»�å¯¹URL, åŽ»è„šæœ¬æ ·å¼�r   F)ÚscriptÚstyleÚiframeÚobjectÚtableÚaT)rV   rV   r2   ÚhttpÚdownfileÚdownload)re   Ú	decomposeÚboolrd   r,   Ú
startswithr@   rA   rI   rJ   r.   Úget_textrK   Ústr)	Ú	zoom_souprY   ÚtagÚ	has_tableÚattachmentsrs   ÚhÚtxtÚcontents	            r"   Úhtml_to_textrƒ   “   sÿ   € àÐØ�5˜"ˆ}ÐØ×!Ñ!Ò"IÓJò ˆØ�‰�ðä�Y—^‘^ GÓ,Ó-€IØ€KØ×Ñ ¨$ÐÓ/ò 5ˆØˆf‰I�O‰OÓˆØ�<‰<˜Ô §¡¨VÔ 4ÜŸ™×,Ñ,¬X°qÓ9ˆAˆf‰Ià˜‰?˜j¨AšoÜ˜aŸj™j›lÓ+ˆCÚØ×"Ñ" A f¡I¨sÐ#3Õ4ð5ô �)‹n€GØ�I˜{Ð*Ð*r/   c                 óš   — |s| S | j                  «       r| gng }|D ]  \  }}|j                  d|› d|› d�«       Œ dj                  |«      S )Nz<p><a href="z" target="_blank">z</a></p>z

)r,   rK   Újoin)r‚   r   ÚpartsrY   r�   s        r"   Úappend_attachmentsr‡   ¨   s[   € ÙØˆØ Ÿ™œˆW‰I¨b€EØ#ò N‰ˆ�Ø�‰�| G 9Ð,>¸s¸eÀ8ÐLÕMðNà�;‰;�uÓÐr/   c                 ó°   — 	 | j                  dt        f«      }|j                  «       D �ch c]  }|d   ’Œ	 c}S c c}w # t        $ r t	        «       cY S w xY w)Nz.SELECT page_url FROM gov_raw WHERE site_name=?r   )ÚexecuteÚ	SITE_NAMEÚfetchallr   Úset)ÚconnÚcurÚrows      r"   Úload_existing_urlsr�   ±   sN   € ðØ�l‰lÐKÌiÈ\ÓZˆØ"%§,¡,£.Ö1˜3��A“Ò1Ð1ùÒ1øÜò Ü‹uŠðús   ‚)? «:·? º? ¿AÁAc                 óž  — | j                  d|t        f«      }|j                  «       ry	 d}	 ddlm}  ||«      }| j                  d|||||t        t        t        ||f
«      }|j                  dkD  ryt        j                  dd|«      }	t        j                  |	«      }	t        j                  d	d
|	«      j                  «       d d }	| j                  d|j                  |t        |	f«       yy# t
        $ r Y Œ¼w xY w# t        j                   $ r=}
dt#        |
«      v r*t%        j&                  d«       t)        | |||||«      cY d }
~
S ‚ d }
~
ww xY w)Nz7SELECT id FROM gov_raw WHERE page_url=? AND site_name=?FÚotherr   )Úclassify_industryz¨INSERT OR IGNORE INTO gov_raw (page_url, source_url, title, content, publish_date, site_name, group_name, script_name, has_table, industry) VALUES (?,?,?,?,?,?,?,?,?,?)r=   r   r%   r&   r   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedr>   )r‰   rŠ   ÚfetchoneÚcrawler_libr“   r   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr*   r+   r'   r(   r,   Ú	lastrowidÚsqlite3ÚOperationalErrorr{   r   r   Ústore_record)r�   r   rW   r‚   rX   r~   rŽ   Úindustryr“   ÚsummaryÚes              r"   r�   r�   ¹   sF  € Ø
�,‰,ÐPÐSVÔXaÐRbÓ
c€CØ
‡|�|„~ØðØˆð	Ý5Ù(¨Ó/ˆHð �l‰lð+ð �#�u˜g t¬Y¼
ÄKÐQZÐ\dÐeó	
ˆð �<‰<˜!ÒÜ—f‘f˜Z¨¨WÓ5ˆGÜ×'Ñ'¨Ó0ˆGÜ—f‘f˜V S¨'Ó2×8Ñ8Ó:¸4¸CÐ@ˆGØ�L‰LØfØ—‘ ¤y°'Ð:ôð Øøô# ò 	Ùð	ûô$ ×#Ñ#ò Ø”s˜1“vÑÜ�J‰J�qŒMÜ  c¨5°'¸4ÀÓKÕKØûð	úsF   «C< ®C- ¼B/C< Ã-	C9Ã6C< Ã8C9Ã9C< Ã<EÄ1EÅ EÅEÅEc                  óø  — d } t         sbt        j                  t        d¬«      } | j	                  d«       | j	                  d«       t        | «      }t        dt        |«      › d�d¬«       d	}d	}g }t        d
«      \  }}}|rt        t        |«      nt        }t        d|› d|› d|› �d¬«       t        d
|d
z   «      D �]†  }	t        |	«      \  }
}}t        d|	› dt        |«      › �d¬«       |st        dd¬«        �nI|D �]@  \  }}}t         s
|v r|d
z  }Œt        |«      \  }}}|€t        d|d d › �d¬«       |d
z  }ŒB|s|}|s|}t        ||«      \  }}}t        ||«      }t        t        j                   dd|«      j#                  «       «      }|dk  rt        d|d d › �d¬«       |d
z  }Œ²t         rC|j%                  |||||t&        t(        t*        dœ«       t        d|d d › d|› d�d¬«       |d
z  }Œût-        | |||||«      }|r/|d
z  }j/                  |«       t        d|d d › d|› d�d¬«       �Œ<|d
z  }�ŒC �Œ‰ t         rmt1        t         dd¬«      5 }|D ]+  }|j3                  t5        j6                  |d¬ «      d!z   «       Œ- 	 d d d «       t        d"t         › dt        |«      › d#�d¬«       | � | j9                  «        | j;                  «        t        d$|› d%|› �d¬«       y # 1 sw Y   Œ`xY w)&Né<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu
   å·²å…¥åº“ u    æ�¡, ç”¨äºŽåˆ—è¡¨çº§é¢„æŸ¥é‡�T)Úflushr   r
   z[list] totalpage=z totalrecord=z fetch_pages=z[list] page=z items=zEmpty page, stop paginationz  skip empty: é   r=   r   é
   )Úpage_urlrW   r‚   Úpublish_dater~   Ú	site_nameÚ
group_nameÚscript_namez
  JSONL + é(   z (ú)z  + Úwr   )r   F)Úensure_asciiú
zJSONL written: z rows)z[done] new=z skip=)r   r›   Úconnectr   r‰   r�   ÚprintÚlenrZ   ÚminÚ_PAGESr   rl   rƒ   r‡   r*   r+   r,   rK   rŠ   r—   r˜   r�   ÚaddÚopenÚwriteÚjsonÚdumpsÚcommitÚclose)r�   ÚexistingÚ	new_countÚ
skip_countÚ
jsonl_rowsrN   rO   Ú_Únpagesr4   ÚtpÚtrrR   rY   rW   rX   ÚdtitleÚddater]   r‚   r~   ÚattsÚ	plain_lenÚokÚfr�   s                             r"   ÚmainrÊ   Û   s/  € Ø€DÝÜ�‰œw°Ô3ˆØ�‰Ð0Ô1Ø�‰Ð.Ô/Ü% dÓ+ˆÜ�
œ3˜x›=˜/Ð)GÐHÐPTÕUà€IØ€JØ€Jä *¨1£Ñ€Iˆ{˜AÙ'0ŒS”˜Ô#´f€FÜ	Ð˜i˜[¨°k°]À-ÐPVÈxÐ
XÐ`dÕeä�a˜ !™Ó$ó * ˆÜ" 4Ó(‰ˆˆB�Ü�˜T˜F '¬#¨e«*¨Ð6¸dÕCÙÜÐ/°tÕ<ÚØ$)ó $	 Ñ ˆG�U˜DÝ '¨XÑ"5Ø˜a‘�
ØÜ".¨wÓ"7ÑˆF�E˜4Øˆ|Ü˜ u¨S¨b z lÐ3¸4Õ@Ø˜a‘�
ØÙØ�ÙØ�Ü'3°D¸'Ó'BÑ$ˆG�Y Ü(¨°$Ó7ˆGÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIØ˜2Š~Ü˜ v¨c¨r { mÐ4¸DÕAØ˜a‘�
ØÝØ×!Ñ!Ø '°&ÀWØ$)¸	Ü!*¼*Ü#.ñ	#ô ô ˜
 6¨#¨2 ; -¨r°%°¸Ð:À$ÕGØ˜Q‘�	ØÜ˜d G¨V°W¸eÀYÓOˆBÙØ˜Q‘�	Ø—‘˜WÔ%Ü˜˜V C R˜[˜M¨¨E¨7°!Ð4¸D×Aà˜a‘’
òI$	 ð* õX Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	�¤
˜|¨2¬c°*«oÐ->¸fÐEÈTÕRàÐØ�‰ŒØ�
‰
ŒÜ	ˆK˜	�{ &¨¨Ð
5¸TÖB÷	Dð 	Dús   É1K0Ë0K9Ú__main__)r>   r¤   )1Ú__doc__ÚsysÚosr*   r   Úhtmlr'   Úurllib.parser@   r›   r¸   r   Úbs4r   r   rJ   r?   rŠ   r—   r˜   Úenvironr   r   r   ÚENCr   r   r   Ú
_MAX_PAGESÚ	enumerateÚargvr    rs   ry   rE   ÚsplitÚ
ValueErrorr²   r´   r#   r.   rZ   rl   rƒ   r‡   r�   r�   rÊ   Ú__name__© r/   r"   ú<module>rÛ      s˜  ðñó Û 	Û 	Û Û Û Û Û ã ß &ð '€ØÐ7Ñ7€Ø!€	Ø€
Ø$€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø�Z‰Z�^‰^˜L¨"Ó-€
Ø€ð @ØOØ'ñ€ð Ð Ø€	à€
Ù�c—h‘hÓò 
�D€A€qØ‡|�|�JÔð	Ù˜QŸW™W S¨!›_¨QÑ/Ó0‰Jð 
ˆi‹˜A ™E¡C¨¯©£MÓ1ð	Ù˜SŸX™X a¨!¡e™_Ó-‰Jð
ð " Q’‰¨A€óò$ò#)òL ò0+ò*òòòDFCðR ˆzÒÙ…Fð øði ò 	Ùð	ûð
 ò 	Ùð	ús$   Â,D5Ã(E Ä5D=Ä<D=Å EÅE