Ë
    €ÛµjÏ  ã                   ór  — d Z ddlZddlZddlZddlZddlZej                  j                  dd«       ddlm	Z	m
Z
 ddlZddlZddlZdZdZe› d�Z ej                   dd	«      Zd
ZdZddiZdd„Zd„ Zd„ Zd„ Zd„ Zedk(  r8 ej                  «       Z e«         ed ej                  «       ez
  d›d�«       yy)u…   
æ±Ÿè‹�å›½æ­£æ£€æµ‹æœ‰é™�å…¬å�¸ - æ–°é—»åŠ¨æ€�
http://www.gztesting.com/list_news.aspx?cid=216
ASP.NET WebForms + AspNetPager ç¿»é¡µ
é    Nz/root/gov_crawler)Ú
fetch_pageÚ
clean_htmlu   æ±Ÿè‹�å›½æ­£æ£€æµ‹-æ–°é—»åŠ¨æ€�zhttp://www.gztesting.comz/list_news.aspx?cid=216Ú	SEARCH_DBz/root/search.dbz
2023-06-01é   z
User-AgentzoMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36c                 ó’  — |€3t        j                  «       }|j                  j                  t        «       | dk(  r4|j                  t        d¬«      }|j                  dk(  r|j                  S dS t        |dd«      }|s3|j                  t        d¬«      }|j                  dk7  ry|j                  }i }t        j                  d|«      D ]%  }|j                  d«      ||j                  d«      <   Œ' d	|d
<   t        | «      |d<   |j                  t        |d¬«      }|j                  dk(  r|j                  |_        |j                  S y)z:Get a page. Page 1 via GET, pages 2+ via ASP.NET postback.Né   é   ©ÚtimeoutéÈ   Ú
_last_htmlz;<input\s+type="hidden"\s+name="([^"]+)"[^>]*value="([^"]*)"é   z&_ctl0$ContentPlaceHolder1$AspNetPager1Ú__EVENTTARGETÚ__EVENTARGUMENT)Údatar   )ÚrequestsÚSessionÚheadersÚupdateÚHEADERSÚgetÚLIST_URLÚstatus_codeÚtextÚgetattrÚreÚfinditerÚgroupÚstrÚpostr   )Úpage_noÚsessÚrÚhtml_for_vsr   Úms         ú$/root/gov_crawler/crawl_gztesting.pyÚfetch_list_pager'      s)  € à€|Ü×ÑÓ!ˆØ�‰×ÑœGÔ$à�!‚|Ø�H‰H”X rˆHÓ*ˆØŸ™¨#Ò-ˆq�v‰vÐ7°4Ð7ô ˜$ ¨dÓ3€KÙØ�H‰H”X rˆHÓ*ˆØ�=‰=˜CÒØØ—f‘fˆà€DÜ�[‰[ØFØóò &ˆð Ÿ7™7 1›:ˆˆQ�W‰W�Q‹ZÒð	&ð E€DˆÑÜ! '›l€DÐ	Ñà�	‰	”( ¨rˆ	Ó2€AØ‡}�}˜ÒØŸ&™&ˆŒØ�v‰vˆØó    c                 ó„  — g }t        j                  d| t         j                  «      D �]  }|j                  d«      }t        j                  d|t         j                  «      }|sŒ=t
        |j                  d«      z   }t        j                  dd|j                  d«      «      j                  «       }d}t        j                  d|t         j                  «      }|rNt        j                  dd|j                  d«      «      j                  «       }t        j                  dd	|«      d
d }|j                  ||d|f«       �Œ |S )u2   ä»Žåˆ—è¡¨é¡µæ��å�– (title, url, date_str, summary)z<div class="new">(.*?)</div>r   z;href="(/show\.aspx\?id=\d+)"[^>]*class="tit"[^>]*>(.*?)</a>ú<[^>]+>Ú r   z<p class="con">(.*?)</p>ú\s+ú Né,  )	r   r   ÚDOTALLr   ÚsearchÚBASEÚsubÚstripÚappend)	ÚhtmlÚitemsr%   Ú	item_htmlÚ
link_matchÚhrefÚtitleÚsummaryÚ	con_matchs	            r&   Ú
parse_listr=   ;   s  € à€EÜ�[‰[Ð8¸$ÄÇ	Á	ÓJó 1ˆØ—G‘G˜A“Jˆ	ä—Y‘YÐ]Ð_hÔjl×jsÑjsÓtˆ
ÙØÜ�j×&Ñ& qÓ)Ñ)ˆÜ—‘�z 2 z×'7Ñ'7¸Ó':Ó;×AÑAÓCˆð ˆÜ—I‘IÐ9¸9ÄbÇiÁiÓPˆ	ÙÜ—f‘f˜Z¨¨Y¯_©_¸QÓ-?Ó@×FÑFÓHˆGÜ—f‘f˜V S¨'Ó2°4°CÐ8ˆGà�‰�e˜T 2 wÐ/Ö0ð!1ð" €Lr(   c                 óŽ  — t        | dd¬«      }|syd}t        j                  d|t        j                  «      }|r4t        j                  dd|j                  d«      «      j                  «       }d}t        j                  d	|t        j                  «      }|r|j                  d«      j                  «       }|r{t        j                  d
d|t        j                  t        j                  z  ¬«      }t        j                  dd|t        j                  t        j                  z  ¬«      }t        |«      }d}|xs d|xs d|xs dfS )u   èŽ·å�–è¯¦æƒ…é¡µæ­£æ–‡zutf-8é   )Úencodingr   )NNNr+   z'<h3[^>]*id="title_info"[^>]*>(.*?)</h3>r*   r   z<div class="detail">(.*?)</div>z<script[^>]*>.*?</script>)Úflagsz<style[^>]*>.*?</style>N)	r   r   r0   r/   r2   r   r3   ÚIr   )Úurlr5   r:   r%   ÚcontentÚpub_dates         r&   Úfetch_detailrF   Q   s  € ä�c G°RÔ8€DÙØð €EÜ
�	‰	Ð<¸dÄBÇIÁIÓN€AÙÜ—‘�z 2 q§w¡w¨q£zÓ2×8Ñ8Ó:ˆð €GÜ
�	‰	Ð4°d¼B¿I¹IÓF€AÙØ—'‘'˜!“*×"Ñ"Ó$ˆáÜ—&‘&Ð5°r¸7Ì"Ï)É)ÔTV×TXÑTXÉ.ÔYˆÜ—&‘&Ð3°R¸ÌÏ	É	ÔRT×RVÑRVÉÔWˆÜ˜WÓ%ˆð €HàŠ=�D˜'š/ T¨8Ò+;°tÐ;Ð;r(   c                 óD  — | sy t        j                  t        d¬«      }|j                  d«       |j                  d«       |j                  d«       d\  }}| D ]`  }	 |j                  d|d   d d	 |d
   |d
   |d   d d |d   d d |d   d d |d   dd|d   d d f
«       |j                  dkD  r|dz  }n|dz  }Œb |j                  «        |j                  dt        f«       |j                  «        |j                  «        t        d|› d|› d�«       y #  |dz  }Y ŒÆxY w)Né<   r
   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALzPRAGMA synchronous=NORMAL)r   r   z›INSERT OR IGNORE INTO gov_raw (site_name, source_url, page_url, title, publish_date, summary, content, status, category, tags) VALUES (?,?,?,?,?,?,?,?,?,?)Ú	site_namer   rC   r:   iô  rE   é
   r;   rD   Úactiver+   Útagséd   r   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=?u     ðŸ’¾ å…¥åº“: æ–°å¢žu   , è·³è¿‡u   , FTSå·²å�Œæ­¥)	Úsqlite3Úconnectr   ÚexecuteÚtotal_changesÚcommitÚ	SITE_NAMEÚcloseÚprint)r6   ÚdbÚokÚskipÚitems        r&   Úinsert_to_dbrZ   m   sS  € ÙØÜ	�‰œ¨BÔ	/€BØ‡J�JÐ*Ô+Ø‡J�JÐ(Ô)Ø‡J�JÐ*Ô+Ø�H€BˆØò ˆð	Ø�J‰Jð /ð �[Ñ! $ 3Ð'¨¨e©°d¸5±kØ�W‘˜d˜sÐ# T¨*Ñ%5°c°rÐ%:Ø�Y‘  Ð% t¨I¡Ø˜"˜d 6™l¨4¨CÐ0ð	1ôð ×Ñ !Ò#Ø�a‘‘à˜‘	�øðð  ‡I�I„KØ‡J�Jð MäOXÈlô\ð ‡I�I„KØ‡H�H„JÜ	Ð! "  X¨d¨V°>Ð
BÕCøð	Ø�A‰IŠDús   ÁADÄDc                  ó"  — t        dd› �«       t        dt        › �«       t        d› «       g } t        «       }t        }t	        t
        j                  «      dkD  r#t
        j                  d   dk(  rd}t        d«       t        j                  «       }|j                  j                  t        «       t        d|dz   «      D �]l  }t        d|› d|› d	�d
d¬«       t        ||«      }|st        d«        �n;t        |«      }|st        d«        �n t        dt	        |«      › d�«       |D ]ë  \  }}}	}
||v rŒ|j                  |«       t        d|d d › d�d
d¬«       d}t!        |«      \  }}}|r|}|r|}	|
sA|r?t#        j$                  dd
|«      j'                  «       d d }
t#        j$                  dd
|
«      }
| j)                  t        |||xs d|	xs d|
xs |d d ddœ«       t        dt	        |xs d«      › d�«       t+        j,                  d«       Œí t+        j,                  d«       �Œo | rFt/        j0                  t2        d¬«      }|j5                  «        |j7                  «        t9        | «       t        dt	        | «      › d�«       y )Nú
z2==================================================u   ðŸ�  r   Úincu   ðŸ“‹ å¢žé‡�æ¨¡å¼�ï¼šä»…ç¬¬1é¡µu     ðŸ“„ ç¬¬ ú/u    é¡µ...r-   T)ÚendÚflushu   â�Œ æ— å“�åº”u   0 æ�¡u   âœ… u    æ�¡z    é7   z...r+   r*   r.   r,   u   çŽ¯è¯„éªŒæ”¶)rI   r:   rC   rD   rE   r;   rL   u   å­—g      à?rH   r
   u   
âœ… å®Œæˆ�! å…± )rU   rS   ÚsetÚTOTAL_PAGESÚlenÚsysÚargvr   r   r   r   r   Úranger'   r=   ÚaddrF   r   r2   r3   r4   ÚtimeÚsleeprN   rO   r   rR   rT   rZ   )Ú	all_itemsÚ	seen_urlsÚ	MAX_PAGESr"   r!   r5   r6   r:   r9   Údate_strr;   rD   ÚdtrE   rV   s                  r&   Úmainrp   �   sg  € Ü	ˆBˆvˆhˆ-ÔÜ	ˆE”)�Ð
ÔÜ	ˆVˆHÔà€IÜ“€Iä€IÜ
Œ3�8‰8ƒ}�qÒœSŸX™X a™[¨EÒ1Øˆ	ÜÐ.Ô/ä×ÑÓ€DØ‡L�L×ÑœÔ ä˜˜I¨™MÓ*ó +ˆÜ�˜G˜9 A i [°Ð8¸cÈÕNÜ˜w¨Ó-ˆÙÜ�/Ô"ÚÜ˜4Ó ˆÙÜ�'ŒNÚÜ�”S˜“Z�L Ð%Ô&à.3ò 	Ñ*ˆE�4˜ 7Ø�yÑ ØØ�M‰M˜$Ôä�D˜˜s ˜˜ CÐ(¨c¸Õ>ð ˆGÜ$0°Ó$6Ñ!ˆB�˜ÙØ�ÙØ#�á™wÜŸ&™& ¨S°'Ó:×@Ñ@ÓBÀ4ÀCÐH�ÜŸ&™& ¨¨gÓ6�à×ÑÜ&ØØØ"š= bØ$šN¨Ø"Ò1 e¨D¨S kØ&ñô ô �Dœ˜Wš]¨Ó+Ð,¨CÐ0Ô1Ü�J‰J�s�Oð;	ô> 	�
‰
�1ŽðW+ñZ ä�_‰_œY°Ô3ˆð 	�	‰	ŒØ
�‰Œ
Ü�YÔÜ	Ðœs 9›~Ð.¨dÐ
3Õ4r(   Ú__main__u   â�± è€—æ—¶: z.1fÚs)N)Ú__doc__re   Úosr   ri   ÚjsonÚpathÚinsertÚcrawler_libr   r   rN   r   rS   r1   r   Úgetenvr   ÚTHREE_YEARS_AGOrc   r   r'   r=   rF   rZ   rp   Ú__name__Út0rU   © r(   r&   ú<module>r~      sÖ   ðñ÷
 × Ó Ø ‡�‡��Ð&Ô 'ß .ß Û 	à-€	Ø!€ØˆVÐ*Ð+€ØˆB�I‰I�kÐ#4Ó5€	Ø€Ø€ð ð  Dð€ó!òFò,<ò8Dò@E5ðN ˆzÒØ	ˆ�‰‹€BÙ„FÙ	ˆL˜˜Ÿ™› R™¨Ð,¨AÐ
.Õ/ð r(   