Ë
    ¸¬uj]  ã            	       ó>  — 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	 ej                  j                  ej                  j                  e«      «      Z ej                  dd«      ZdZdZdZd	Zd
Zd	ZddiZdez  ZdZdZdddddœZd„ Zd„ Zd„ Zd„ Zd4d„Z d„ Z!e"dk(  �rÚddl#Z# e#jH                  d¬«      Z%e%jM                  ddd¬«       e%jM                  de'dd¬ «       e%jM                  d!dd"¬«       e%jM                  d#dd$¬«       e%jM                  d%d&e'dd'¬(«       e%jQ                  «       Z) ejT                  e«       e)jB                  r e!«         ejV                  d«        e«       Z, e-d)e,z  «       e)j\                  re,Z/n4e)j`                  �e)j`                  Z/ne)jb                  �e)jb                  Z/neZ/ e2e/e,«      Z/ e-d*e/z  «        e3de/dz   «      D ]�  Z4	  ee4«      Z5 ee5«      Z6e6s e-d+e4z  «        na e-d,e4 e7e6«      fz  «       e6D ]G  \  Z8Z9Z:Z;e)jx                  r e e8e9e:«       n ee9«      \  Z=Z> e e8e9e:e=e>«        ej~                  d-«       ŒI Œƒ  e-d/ed0   ed1   ed2   ed3   fz  «       yy# e@$ rZA e-d.e4eAfz  «       Y dZA[AŒ¸dZA[Aww xY w)5uŸ  
yanshougs.com (å·¥ç¨‹å»ºè®¾éªŒæ”¶å…¬ç¤ºç½‘) - çŽ¯è¯„å…¬ç¤ºçˆ¬è™«
==================================================
API: /publicity_list?id=4&page=N èŽ·å�–åˆ—è¡¨
è¯¦æƒ…é¡µèŽ·å�–æ­£æ–‡å†…å®¹

ç”¨æ³•:
  python3 crawl_yanshougs.py                    # å¢žé‡�çˆ¬ï¼ˆç¬¬1é¡µï¼Œå�«æ­£æ–‡ï¼‰
  python3 crawl_yanshougs.py --pages=5          # çˆ¬5é¡µ
  python3 crawl_yanshougs.py 1                  # å…¼å®¹æ—§é…�ç½®(æ•°å­—å�‚æ•°=é¡µæ•°)
  python3 crawl_yanshougs.py --full             # å…¨é‡�çˆ¬æ‰€æœ‰é¡µ
  python3 crawl_yanshougs.py --backfill-body    # è¡¥çˆ¬å·²æœ‰è®°å½•çš„ç¼ºå¤±æ­£æ–‡
  python3 crawl_yanshougs.py --pages=1 --no-body  # ä»…æ ‡é¢˜/URL/æ—¥æœŸï¼Œä¸�çˆ¬æ­£æ–‡
é    N)ÚBeautifulSoupÚ	SEARCH_DBz/mnt/data/search.dbu   å·¥ç¨‹å»ºè®¾éªŒæ”¶å…¬ç¤ºç½‘zhttps://www.yanshougs.comé   u   çŽ¯è¯„å…¬ç¤ºu   å…¨å›½z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36z.https://www.yanshougs.com/publicity_list?id=%déi   é   )ÚnewÚskipÚerrorsÚbody_errorsc                  óî   — 	 t        j                  dt        d¬«      } t        j                  d| j
                  «      }|r$t        t        |j                  d«      «      d«      S 	 t        S #  Y t        S xY w)Nz%https://www.yanshougs.com/list/4.htmlé
   ©ÚheadersÚtimeoutzlist/4_(\d+)\.htmlr   r   )
ÚrequestsÚgetÚHEADERSÚreÚsearchÚtextÚmaxÚintÚgroupÚ	MAX_PAGES)ÚrÚms     ú$/root/gov_crawler/crawl_yanshougs.pyÚget_total_pagesr   &   si   € ðÜ�L‰LÐ@Ì'Ð[]Ô^ˆÜ�I‰IÐ+¨Q¯V©VÓ4ˆÙÜ”s˜1Ÿ7™7 1›:“¨Ó,Ð,ð ô ÐøðØÜÐús   ‚A!A+ Á+A4c                 óv   — dt         | fz  }t        j                  |t        d¬«      }d|_        |j
                  S )Nz
%s&page=%dé   r   úutf-8)ÚAPI_BASEr   r   r   Úencodingr   )Úpage_numÚurlr   s      r   Úfetch_list_pager&   1   s3   € Ø
œ( HÐ-Ñ
-€CÜ�‰�S¤'°2Ô6€AØ€A„JØ�6‰6€Mó    c                 óæ  — g }t        | d«      }|j                  d«      }|dd  D ]É  }|j                  d«      }t        |«      dk  rŒ#|d   j	                  d«      }|sŒ:|j                  dd«      j                  «       }|sŒ]|j                  d	¬
«      }|d   j                  d	¬
«      }	|d   j                  d	¬
«      }
|j                  d«      r|nt        |z   }|j                  |||
|	f«       ŒË |S )NÚlxmlztable trr   Útdr   ÚaÚhrefÚ T©Ústripé   é   Úhttp)r   ÚselectÚfind_allÚlenÚfindr   r/   Úget_textÚ
startswithÚDOMAINÚappend)ÚhtmlÚitemsÚsoupÚrowsÚrowÚcellsÚa_tagr,   ÚtitleÚbuilderÚdateÚfull_urls               r   Úparse_itemsrF   8   sù   € Ø€EÜ˜˜vÓ&€DØ�;‰;�zÓ"€DØ�A�Bˆxò 7ˆØ—‘˜TÓ"ˆÜˆu‹:˜Š>ØØ�a‘—‘˜cÓ"ˆÙØØ�y‰y˜ Ó$×*Ñ*Ó,ˆÙØØ—‘ T�Ó*ˆØ˜‘(×#Ñ#¨$Ð#Ó/ˆØ�Q‰x× Ñ  tÐ Ó,ˆØŸ?™?¨6Ô2‘4¼À¹ˆØ�‰�e˜X t¨WÐ5Õ6ð7ð €Lr'   c                 ó¤  — 	 t        j                  | t        d¬«      }d|_        t	        |j
                  d«      }|j                  d«      }d}d}|rH|j                  ddg«      D ]  }|j                  «        Œ t        |«      }|j                  d	¬
«      dd }||fS # t        $ r(}t        d|z  t        j                  ¬«       Y d}~yd}~ww xY w)u"   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡HTMLå’Œæ‘˜è¦�r    r   r!   r)   zdiv.dir_c_contentr-   ÚscriptÚstyleTr.   NéÈ   z    body error: %s©Úfile©r-   r-   )r   r   r   r#   r   r   Ú
select_oner4   Ú	decomposeÚstrr7   Ú	ExceptionÚprintÚsysÚstderr)Úpage_urlr   r=   Úcontent_divÚ	body_htmlÚsummaryÚtagÚes           r   Ú
fetch_bodyr[   N   sÊ   € ðÜ�L‰L˜¬7¸BÔ?ˆØˆŒ
Ü˜QŸV™V VÓ,ˆØ—o‘oÐ&9Ó:ˆØˆ	ØˆÙØ"×+Ñ+¨X°wÐ,?Ó@ò  �Ø—‘•ð ä˜KÓ(ˆIØ!×*Ñ*°Ð*Ó6°t¸Ð<ˆGØ˜'Ð!Ð!øÜò ÜÐ" QÑ&¬S¯Z©ZÕ8Üûðús   ‚BB Â	CÂ'C
Ã
Cc                 ó.  — t        j                  t        «      }	 |j                  d| j	                  «       |t
        t        |t        t        t        ||f
«       |j                  «        |j                  dkD  }|sj|rh|j                  d|f«      j                  «       }|rE|d   r|d   j	                  «       dk(  r*|j                  d|||d   f«       |j                  «        d}|r™|j                  d|f«      j                  «       }|rdt        j                  t        «      }	 |j                  d	|d   | j	                  «       t        f«       |j                  «        |j                  «        t        d
xx   dz  cc<   nt        dxx   dz  cc<   |j                  «        y #  Y ŒHxY w# |j                  «        w xY w# t        $ r9}	t        dxx   dz  cc<   t!        d|	z  t"        j$                  ¬«       Y d }	~	Œjd }	~	ww xY w# |j                  «        w xY w)Nz£INSERT OR IGNORE INTO gov_raw (title, page_url, source_url, site_name, publish_date, category, industry, group_name, content, summary) VALUES (?,?,?,?,?,?,?,?,?,?)r   z0SELECT id, content FROM gov_raw WHERE page_url=?r   r-   ú2UPDATE gov_raw SET content=?, summary=? WHERE id=?Tz'SELECT id FROM gov_raw WHERE page_url=?zHINSERT OR IGNORE INTO gov_search(rowid, title, site_name) VALUES (?,?,?)r   r	   r
   z  DB error: %srK   )Úsqlite3Úconnectr   Úexecuter/   r9   Ú	SITE_NAMEÚCATEGORY_NAMEÚINDUSTRYÚGROUPÚcommitÚtotal_changesÚfetchoneÚcloseÚstatsrQ   rR   rS   rT   )
rB   rU   Úpublish_daterW   rX   ÚconnÚis_newr?   Ú_c2rZ   s
             r   Ústore_recordrn   b   s»  € Ü�?‰?œ9Ó%€Dð&Ø�‰ð+ð �[‰[‹]˜H¤f¬i¸ÜœH¤e¨Y¸ðAô		
ð 	�‰ŒØ×#Ñ# aÑ'ˆñ ™)Ø—,‘,ÐQÐT\ÐS^Ó_×hÑhÓjˆCÙ˜C šF c¨!¡f§l¡l£n¸Ò&:Ø—‘ÐQÐT]Ð_fÐhkÐlmÑhnÐSoÔpØ—‘”Ø�áØ—,‘,ÐHÈ8È+ÓV×_Ñ_ÓaˆCÙÜ—o‘o¤iÓ0�ð Ø—K‘KÐ jØ!$ Q¡¨¯©«¼	Ð BôDà—J‘J”Lð —I‘I”KÜ�%‹L˜AÑŒLä�&‹M˜QÑ‹Mð
 	�
‰
�øðÙûà—I‘I•Kûô ò 5Üˆh‹˜1Ñ‹ÜÐ Ñ"¬¯©×4Ò4ûð5ûð 	�
‰
�úsN   ›DF= Ä#:F! Å3F= Æ!F%Æ#F( Æ(F:Æ:F= Æ=	G?Ç/G:Ç5H Ç:G?Ç?H ÈHc            	      óz  — t        j                  t        «      } | j                  dt        f«      j                  «       }| j                  «        t        dt        |«      z  «       t        |«      D ]½  \  }\  }}}t        |«      \  }}|rot        j                  t        «      } | j                  d|||f«       | j                  «        | j                  «        t        d|dz   t        |«      |dd fz  «       n t        d|dz   t        |«      |dd fz  «       t        j                  d	«       Œ¿ t        d
«       y)u!   è¡¥çˆ¬å·²æœ‰è®°å½•çš„ç¼ºå¤±æ­£æ–‡z]SELECT id, page_url, title FROM gov_raw WHERE site_name=? AND (content IS NULL OR content='')zFound %d records missing bodyr]   z  [%d/%d] OK: %sr   Né(   z  [%d/%d] FAIL: %sç333333Ó?z
Backfill done!)r^   r_   r   r`   ra   Úfetchallrh   rR   r5   Ú	enumerater[   re   ÚtimeÚsleep)rk   r>   ÚiÚridr%   rB   ÚbodyrX   s           r   Úbackfill_bodyry   �   s  € ä�?‰?œ9Ó%€DØ�<‰<ØgÜ	ˆó÷ �hƒjð 	ð 	‡J�J„LÜ	Ð
)¬C°«IÑ
5Ô6Ü )¨$£ò 
ÑˆÑˆC��eÜ" 3›‰ˆˆgÙÜ—?‘?¤9Ó-ˆDØ�L‰LÐMÐPTÐV]Ð_bÐOcÔdØ�K‰KŒMØ�J‰JŒLÜÐ$¨¨A©¬s°4«y¸%ÀÀ¸*Ð'EÑEÕFäÐ&¨!¨a©%´°T³¸EÀ#À2¸JÐ)GÑGÔHÜ�
‰
�3�ð
ô 
Ð
Õr'   Ú__main__z"yanshougs ringping gongshi crawler)Údescriptionz--fullÚ
store_truezcrawl all pages)ÚactionÚhelpz--pageszpages to crawl)ÚtypeÚdefaultr~   z	--no-bodyzskip body (title/URL/date only)z--backfill-bodyz*backfill missing body for existing recordsÚnú?zlegacy arg (page count))Únargsr   r€   r~   zTotal pages: %dzWill crawl %d pages...z  Page %d: emptyz  Page %d: %d itemsrq   z  Error page %d: %sz-
Done! New:%d Skip:%d Errors:%d BodyErrors:%dr   r	   r
   r   rM   )BÚ__doc__Úosr   rS   rt   Újsonr^   r   Úbs4r   ÚpathÚdirnameÚabspathÚ__file__ÚBASE_DIRÚgetenvr   ra   r9   ÚCATEGORY_IDrb   rd   rc   r   r"   r   ÚDEFAULT_PAGESri   r   r&   rF   r[   rn   ry   Ú__name__ÚargparseÚArgumentParserÚparserÚadd_argumentr   Ú
parse_argsÚargsÚchdirÚexitÚtotal_pagesrR   ÚfullÚpages_to_crawlÚpagesr�   ÚminÚrangeÚpr;   r<   r5   rB   r%   rD   rC   Úno_bodyrW   rX   ru   rQ   rZ   © r'   r   ú<module>r¢      s  ðñ÷ (× '× 'Û Ý à�7‰7�?‰?˜2Ÿ7™7Ÿ?™?¨8Ó4Ó5€ØˆB�I‰I�kÐ#8Ó9€	à)€	Ø	$€Ø€Ø€Ø€Ø€Øð  Kð  L€à;¸kÑI€Ø€	Ø€Ø˜1¨¸!Ñ<€òòòò,ó((òVð. ˆzÓÛØ$ˆX×$Ñ$Ð1UÔV€FØ
×Ñ˜¨Ð<MÐÔNØ
×Ñ˜	¨°TÐ@PÐÔQØ
×Ñ˜¨LÐ?`ÐÔaØ
×ÑÐ)°,ÐEqÐÔrØ
×Ñ˜ 3¨S¸$ÐE^ÐÔ_Ø×ÑÓ€Dà€B‡H�HˆXÔà×ÒÙŒØˆ�‰�Œá!Ó#€KÙ	Ð
˜kÑ
)Ô*à‡y‚yØ$‰Ø	�‰Ð	ØŸ™‰Ø	�‰Ð	ØŸ™‰à&ˆá˜¨Ó5€NÙ	Ð
" ^Ñ
3Ô4á�1�n qÑ(Ó)ò 2ˆð	2Ù" 1Ó%ˆDÙ Ó%ˆEÙÙÐ(¨1Ñ,Ô-ÙÙÐ'¨1©c°%«j¨/Ñ9Ô:Ø-2ò  Ñ)��s˜D 'Ø—<’<Ù  ¨¨TÕ2á)3°C«Ñ&�I˜wÙ  ¨¨T°9¸gÔFØ�—
‘
˜3•ñ ð2ñ$ 
Ð
:Øˆe‰�e˜F‘m U¨8¡_°e¸MÑ6Jð>Lñ Lõ Mðc øð\ ò 	2ÙÐ'¨1¨a¨&Ñ0×1Ñ1ûð	2ús   Ç#J ÈAJ Ê JÊJÊJ