Ë
    ÑK|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edz   ZdZdZd	Zej*                  j-                  d
d«      Zej*                  j-                  d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.e/d!k(  r e.«        yy# e$$ r Y Œ¥w xY w# e$$ r Y Œ°w xY w)#u:  
crawl_ichangzhi_gdxw.py - ié•¿æ²»ç½‘-æ»šåŠ¨æ–°é—»
https://www.ichangzhi.com.cn/e/action/ListInfo/?classid=9
å¸�å›½CMS (EmpireCMS): e/action/ListInfo/index.php?page=N&classid=9&totalnum=212
åˆ—è¡¨: td.list5 > a[rel=canonical][href=/xinwen/gundongxinwen/NNN.html][title=å®Œæ•´æ ‡é¢˜]
åˆ†é¡µ: å…± 8 é¡µ (page=9 ç©º), æ¯�é¡µ ~21 æ�¡
è¯¦æƒ…: /xinwen/gundongxinwen/NNN.html
  â†’ td.icznr h1(æ ‡é¢˜) + div.lmly(æ�¥æº�/å�‘å¸ƒæ—¶é—´) + td.iczcontent(æ­£æ–‡ p/table/img)
æ³¨æ„�: åˆ—è¡¨é¡µå�«å¤–é“¾(mp.weixin/weibo)ä¸Žçƒ­é—¨æŽ¨è��æ··å…¥, é™�å®š td.list5 + /xinwen/gundongxinwen/
é    N)ÚBeautifulSoupÚCommentzhttps://www.ichangzhi.com.cnz/e/action/ListInfo/?classid=9z;/e/action/ListInfo/index.php?classid=9&totalnum=212&page={}u   ié•¿æ²»ç½‘-æ»šåŠ¨æ–°é—»u   å±±è¥¿zcrawl_ichangzhi_gdxw.pyÚDB_PATHz/root/search.dbÚ
JSONL_PATHÚ zkMozilla/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-Languageg333333ó?g        é	   z--pages=ú=é   z--pagesc                 ó�  — t        j                   «       t        z
  }|t        k  rt        j                  t        |z
  «       t        j                   «       at	        |«      D ]U  }	 t        j                  | t        |¬«      }|j                  dk(  rd|_	        |c S 	 t        j                  d|dz  z   «       ŒW y # t        $ r Y Œ)w xY w)N)ÚheadersÚtimeoutéÈ   úutf-8é   )ÚtimeÚ	_last_reqÚREQUEST_INTERVALÚsleepÚrangeÚrequestsÚgetÚHEADERSÚstatus_codeÚencodingÚ	Exception)ÚurlÚretriesr   ÚdtÚiÚrs         ú)/root/gov_crawler/crawl_ichangzhi_gdxw.pyÚhttp_getr#   :   s®   € ä	�‰‹”yÑ	 €BØ	ÔÒÜ�
‰
Ô# bÑ(Ô)Ü—	‘	“€IÜ�7‹^ò ˆð	Ü—‘˜S¬'¸7ÔCˆAØ�}‰} Ò#Ø$�”
Ø’ð $ô
 	�
‰
�1�q˜1‘u‘9Õðð øô ò 	Ùð	ús   Á$3B9Â9	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                 ó  — | dk(  rt         }nt        j                  | dz
  «      }t        |«      }|€g S t	        |j
                  d«      }g }|j                  dd¬«      D ]¦  }|j                  dd¬«      }|sŒ|d	   j                  «       }t        j                  d
|«      sŒCt        j                  j                  t        |«      }t        |j!                  d«      xs |j#                  «       «      }	|j%                  ||	df«       Œ¨ |S )uŠ   æŠ“ä¸€é¡µåˆ—è¡¨, è¿”å›ž [(abs_url, title, date)]
    page=1 ç”¨ç”¨æˆ·URL (?classid=9, æœ€æ–°13æ�¡); page>1 ç”¨ index.php?page=N-1 (å½’æ¡£)r   úhtml.parserÚtdÚlist5©Úclass_ÚaT©Úhrefr8   z/xinwen/gundongxinwen/\d+\.htmlÚtitler   )ÚLIST_URL_P1ÚLIST_URL_PNÚformatr#   r   ÚtextÚfind_allÚfindr,   r*   ÚsearchÚurllibÚparseÚurljoinÚBASE_URLr.   r   Úget_textÚappend)
Úpager   r!   ÚsoupÚitemsr2   r6   r8   Úabs_urlr9   s
             r"   Ú
fetch_listrK   U   sï   € ð ˆq‚yÜ‰ä× Ñ  ¨¡Ó*ˆÜ�‹€AØ€yØˆ	Ü˜Ÿ™ Ó/€DØ€EØ�m‰m˜D¨ˆmÓ1ò 	+ˆØ�G‰G�C˜dˆGÓ#ˆÙØØ�‰y�‰Ó ˆÜ�y‰yÐ;¸TÔBØÜ—,‘,×&Ñ&¤x°Ó6ˆÜ˜AŸE™E '›NÒ:¨a¯j©j«lÓ;ˆØ�‰�g˜u bÐ)Õ*ð	+ð €Lr/   c                 óP  — t        | «      }|€ddddg fS t        |j                  d«      }d}|j                  dd¬«      }|r,|j                  d«      }|rt	        |j                  «       «      }|s>t        j                  d	|j                  «      }|rt	        |j                  d
«      «      nd}d}|j                  dd¬«      }|r7t        j                  d|j                  «       «      }	|	r|	j                  d
«      }|j                  dd¬«      }
|
€||ddg fS |
j                  g d¢«      D ]  }|j                  «        Œ |
j                  d„ ¬«      D ]  }|j                  «        Œ |
j                  d«      D ]t  }t	        |j                  «       «      }|j                  d«      s8|j                  d«      s'|j                  d«      s|j                  d«      sd|v sŒe|j                  «        Œv |
j                  d«      D ]  }|j                  «        Œ t        |
j                  d«      «      }g }|
j                  dd¬«      D ]Â  }|d   j                  «       }|j                  d«      s|j                  d«      r't         j"                  j%                  t&        |«      |d<   |j)                  «       j+                  d «      sd!|j)                  «       v sŒ‘t	        |j                  «       «      }|sŒ­|j-                  |d   |f«       ŒÄ |
j                  d"d¬#«      D ]_  }|d$   j                  «       }|j                  d«      s|j                  d«      sŒ9t         j"                  j%                  t&        |«      |d$<   Œa dj/                  d%„ |
j0                  D «       «      }|||||fS )&uC   è¯¦æƒ…é¡µ: è¿”å›ž (title, pubdate, content, has_table, attachments)NFr1   r   r2   Úicznrr4   Úh1u   <title>(.*?)_ié•¿æ²»ç½‘r   ÚdivÚlmlyu(   å�‘å¸ƒæ—¶é—´[:ï¼š]\s*(\d{4}-\d{2}-\d{2})Ú
iczcontent)ÚscriptÚstyleÚiframeÚobjectÚmetaÚlinkc                 ó"   — t        | t        «      S ©N)Ú
isinstancer   )Úss    r"   ú<lambda>zparse_detail.<locals>.<lambda>‹   s   € ¬J°q¼'Ó,B€ r/   )ÚstringÚpu   ï¼ˆæ�¥æº�ï¼šu
   (æ�¥æº�ï¼šu
   [ç¼–è¾‘ï¼šu   [è´£ä»»ç¼–è¾‘ï¼šu	   ç¼–è¾‘ï¼šz$.pageLink, .share, .bdsharebuttonboxÚtabler6   Tr7   r8   ú/Úhttp)
z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarz.wpsz.jpgz.pngz/uploadÚimg)Úsrcrc   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wrY   )Ústr)Ú.0Úcs     r"   ú	<genexpr>zparse_detail.<locals>.<genexpr>£   s   è ø€ Ò4 ”c˜!—fÑ4ùs   ‚)r#   r   r=   r?   r.   rE   r*   r@   Úgroupr>   Ú	decomposeÚextractÚ
startswithÚselectÚboolr,   rA   rB   rC   rD   ÚlowerÚendswithrF   ÚjoinÚcontents)r   r!   rH   r9   rN   ÚhÚtmÚpubdateÚlmÚmÚbodyÚtagrg   ÚtxtÚ	has_tableÚattachmentsr6   rb   r[   Úcontents                       r"   Úparse_detailr~   n   s<  € ä�‹€AØ€yØ�T˜4 ¨Ð*Ð*Ü˜Ÿ™ Ó/€Dà€EØ	�‰�4 ˆÓ	(€BÙ	Ø�G‰G�D‹MˆÙÜ §
¡
£Ó-ˆEÙÜ�Y‰YÐ1°1·6±6Ó:ˆÙ,.”˜BŸH™H Q›KÔ(°Bˆà€GØ	�‰�5 ˆÓ	(€BÙ	Ü�I‰IÐAÀ2Ç;Á;Ã=ÓQˆÙØ—g‘g˜a“jˆGà�9‰9�T ,ˆ9Ó/€DØ€|Ø�g˜t U¨BÐ.Ð.Ø�}‰}ÒTÓUò ˆØ�‰�ðà�]‰]Ñ"Bˆ]ÓCò ˆØ	�	‰	�ðð �}‰}˜SÓ!ò ˆÜ˜#Ÿ,™,›.Ó)ˆØ�N‰N˜>Ô*¨c¯n©n¸\Ô.JÈcÏnÉnÐ]iÔNjØ—>‘>Ð"4Ô5¸ÈÒ9KØ�M‰M�Oð	ð
 �{‰{ÐAÓBò ˆØ�‰�ðä�T—Y‘Y˜wÓ'Ó(€IØ€KØ�]‰]˜3 Tˆ]Ó*ò 5ˆØˆf‰I�O‰OÓˆØ�<‰<˜Ô §¡¨VÔ 4ÜŸ™×,Ñ,¬X°qÓ9ˆAˆf‰IØ�7‰7‹9×ÑÐpÔqÐu~ð  CD÷  CJñ  CJó  CLò  vLÜ˜aŸj™j›lÓ+ˆCÚØ×"Ñ" A f¡I¨sÐ#3Õ4ð5ð �}‰}˜U¨ˆ}Ó-ò ;ˆØ�‰J×ÑÓˆØ�<‰<˜Ô §¡¨VÕ 4ÜŸ™×-Ñ-¬h¸Ó:ˆC�ŠJð;ð �g‰gÑ4 d§m¡mÔ4Ó4€GØ�'˜7 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,   rF   rq   )r}   r|   ÚpartsrJ   rz   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   zTINSERT OR IGNORE INTO gov_search (rowid, title, site_name, summary) VALUES (?,?,?,?)TÚlockedé   )rƒ   r„   ÚfetchoneÚcrawler_libr�   r   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr*   r+   r'   r(   r,   Ú	lastrowidÚsqlite3ÚOperationalErrorre   r   r   Ústore_record)r‡   r   r9   r}   Údater{   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
t        d
z   «      D �]�  }t        |«      }t        d|› dt        |«      › �d¬«       |st        dd¬«        �ndt        «       }|D �]Q  \  }}	}
||v rŒ|j                  |«       t         s
|v r|d
z  }Œ.t        |«      \  }}}}}|€t        d|	d d › d|› �d¬«       |d
z  }Œ]|s|	}t        ||«      }t        t        j                   dd|«      j#                  «       «      }|dk  r"d|vr|st        d|d d › d|› �d¬«       |d
z  }ŒÂt         rD|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¬«       �ŒM|d
z  }�ŒT �Œ  t         rmt/        t         dd¬«      5 }|D ]+  }|j1                  t3        j4                  |d¬«      d z   «       Œ- 	 d d d «       t        d!t         › dt        |«      › d"�d¬«       | � | j7                  «        | j9                  «        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] page=z items=zEmpty page, stop paginationz  skip empty: é   z | rŽ   r   é
   z<img)Úpage_urlr9   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Úlenr   Ú_PAGESrK   r†   Úaddr~   r�   r*   r+   r,   rF   r„   r“   r”   r™   ÚopenÚwriteÚjsonÚdumpsÚcommitÚclose)r‡   ÚexistingÚ	new_countÚ
skip_countÚ
jsonl_rowsrG   rI   ÚseenrJ   r9   rš   ÚdtitleÚddater}   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ä�aœ !™Ó$ó + ˆÜ˜4Ó ˆÜ�˜T˜F '¬#¨e«*¨Ð6¸dÕCÙÜÐ/°tÕ<ÚÜ‹uˆØ$)ó $	 Ñ ˆG�U˜DØ˜$‰ØØ�H‰H�WÔÝ '¨XÑ"5Ø˜a‘�
ØÜ6BÀ7Ó6KÑ3ˆF�E˜7 I¨tØˆÜ˜ u¨S¨b z l°#°g°YÐ?ÀtÕLØ˜a‘�
ØÙØ�Ü(¨°$Ó7ˆGÜœBŸF™F :¨r°7Ó;×AÑAÓCÓDˆIØ˜2Š~ &°Ñ"7ÁÜ˜ v¨c¨r { m°3°w°iÐ@ÈÕMØ˜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$	 ð+ õZ Ü”*˜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   È=1KËKÚ__main__)r�   r¡   )0Ú__doc__ÚsysÚosr*   r   Úhtmlr'   Úurllib.parserA   r—   r´   r   Úbs4r   r   rD   r:   r;   r„   r“   r”   Úenvironr   r   r   r   r   r   Ú
_MAX_PAGESÚ	enumerateÚargvr    r6   rl   ÚintÚsplitÚ
ValueErrorr¯   r°   r#   r.   rK   r~   r�   rŠ   r™   rÃ   Ú__name__© r/   r"   ú<module>rÔ      s™  ðñ	ó Û 	Û 	Û Û Û Û Û ã ß &ð *€ØÐ8Ñ8€ØÐVÑV€Ø%€	Ø€
Ø'€Ø
�*‰*�.‰.˜Ð$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€óò$òò26;òròòòDCCðL ˆzÒÙ…Fð øða ò 	Ùð	ûð
 ò 	Ùð	ús$   Â/D5Ã+E Ä5D=Ä<D=Å EÅE