Ë
    Tp|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dddœdd	dœd
œZdZdZdZej(                  j+                  dd«      Zej(                  j+                  dd«      ZdZeZ eej6                  «      D ]]  \  ZZej=                  d«      rej?                  dd«      d   ZŒ-edk(  sŒ3edz    e ej6                  «      k  sŒLej6                  edz      ZŒ_ eevr4 e!de› d e"ejG                  «       «      › �«        ejH                  d«       ee   d   Z%ee   d   Z&e› de&› �Z'ddde'dœZ(dZ)d a*dZ+ eej6                  «      D ]k  \  ZZej=                  d!«      r	  e,ej?                  dd«      d   «      Z+Œ4ed"k(  sŒ:edz    e ej6                  «      k  sŒS	  e,ej6                  edz      «      Z+Œm e+dk\  re+ndZ.d-d#„Z/d$„ Z0d%„ Z1d&„ Z2d'„ Z3d(„ Z4d)„ Z5d*„ Z6d+„ Z7e8d,k(  r e7«        yy# e-$ r Y Œ¨w xY w# e-$ r Y Œ³w xY w).uÇ  
crawl_huaqing_hpgs.py - é»„å†ˆå¸‚å�Žæ¸…ç”Ÿæ€�çŽ¯å¢ƒå’¨è¯¢æœ‰é™�å…¬å�¸-çŽ¯ä¿�å…¬ç¤º
http://www.huaqingeec.com/index.php?c=content&a=list&catid=46 (çŽ¯å¢ƒå½±å“�è¯„ä»·å…¬ç¤º)
                             catid=47 (ç«£å·¥çŽ¯ä¿�éªŒæ”¶å…¬ç¤º)
åˆ—è¡¨: div.new1 > ul > li > a[href='/index.php?c=content&a=show&id=N'](å�•å¼•å�·) > æ ‡é¢˜ + font æ—¥æœŸ
åˆ†é¡µ: ?c=content&a=list&catid=N&page=M (catid46: 47æ�¡5é¡µ / catid47: 93æ�¡10é¡µ)
è¯¦æƒ…: ?c=content&a=show&id=N
  â†’ div.product_title(æ ‡é¢˜) + div.product_related(ä¿®æ”¹æ—¶é—´) + æ— å��divæ­£æ–‡(<p><span>æ®µè�½, å�«ç™¾åº¦ç½‘ç›˜é“¾æŽ¥)
é™„ä»¶: æ—  (çº¯æ–‡æœ¬å…¬ç¤º, ç½‘ç›˜é“¾æŽ¥åœ¨æ­£æ–‡å†…)
ä¸€è„šæœ¬å¤šæ �ç›®: --col=46|47 ä¸¤æ�¡ç‹¬ç«‹é…�ç½® (site_name åŒºåˆ†)
é    N)ÚBeautifulSoupÚCommentzhttp://www.huaqingeec.comÚ46u%   é»„å†ˆå�Žæ¸…-çŽ¯å¢ƒå½±å“�è¯„ä»·å…¬ç¤º)ÚcatidÚ	site_nameÚ47u%   é»„å†ˆå�Žæ¸…-ç«£å·¥çŽ¯ä¿�éªŒæ”¶å…¬ç¤º)r   r   u   æ¹–åŒ—zcrawl_huaqing_hpgs.pyÚDB_PATHz/root/search.dbÚ
JSONL_PATHÚ úutf-8z--col=ú=é   z--colu   æœªçŸ¥ --col=u
   , å�¯ç”¨: r   r   z"/index.php?c=content&a=list&catid=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-LanguageÚRefererg333333ó?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_huaqing_hpgs.pyÚhttp_getr(   N   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_titler3   `   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         d| › �z   }t        |«      }|€g S |j                  }g }t        j                  d|«      D ]š  }|j                  d«      }t        |j                  d«      «      }|j                  d«      j                  «       }|j                  d«      r$t        j                  j                  t        |«      n|}	|sŒ‡|j                  |	||f«       Œœ |S )u0   æŠ“ä¸€é¡µåˆ—è¡¨, è¿”å›ž [(abs_url, title, date)]r   z&page=zD<li><a href='([^']+)'[^>]*>([^<]+)</a><font[^>]*>([^<]*)</font></li>r   é   ú/)ÚLIST_URLr(   Útextr/   ÚfinditerÚgroupr3   r1   Ú
startswithÚurllibÚparseÚurljoinÚBASE_URLÚappend)
Úpager"   r&   Ú	html_textÚitemsÚmÚhrefÚtitleÚdateÚabs_urls
             r'   Ú
fetch_listrJ   i   sÑ   € àˆq‚yÜ‰ä˜6 $ ˜Ñ(ˆÜ�‹€AØ€yØˆ	Ø—‘€IØ€EÜ�[‰[Ð`ÐbkÓlò 1ˆØ�w‰w�q‹zˆÜ˜AŸG™G A›JÓ'ˆØ�w‰w�q‹z×ÑÓ!ˆØ:>¿/¹/È#Ô:N”&—,‘,×&Ñ&¤x°Ô6ÐTXˆÚØ�L‰L˜' 5¨$Ð/Õ0ð1ð €Lr4   c                 óp  — t        | «      }|€y|j                  }t        |d«      }d}|j                  dd¬«      }|rt	        |j                  «       «      }d}|j                  dd¬«      }|r9t        j                  d	|j                  «       «      }|r|j                  d
«      nd}d}	|j                  dd¬«      }
|
ru|
j                  dd¬«      }d}d}|D ]S  }t        |j                  d«      «      }|j                  «       j                  «       }||kD  sŒAt        |«      dkD  sŒP|}|}ŒU |�|n|
}	|||	fS )u-   è¯¦æƒ…é¡µ: è¿”å›ž (title, pubdate, body_soup)N)NNNzhtml.parserr   ÚdivÚproduct_title)Úclass_Úproduct_relatedz(\d{4}-\d{2}-\d{2})r   ÚcontentF)Ú	recursiveéÿÿÿÿÚpé   )r(   r9   r   Úfindr3   Úget_textr/   Úsearchr;   Úfind_allÚlenr1   )r"   r&   rC   ÚsouprG   ÚptÚpubdateÚprÚdmÚbodyÚcontent_divÚdivsÚbestÚbest_psÚdÚpsÚtxts                    r'   Úparse_detailrg   ~   s9  € ä�‹€AØ€yØØ—‘€IÜ˜ MÓ2€Dà€EØ	�‰�5 ˆÓ	1€BÙ	Ü˜BŸK™K›MÓ*ˆà€GØ	�‰�5Ð!2ˆÓ	3€BÙ	Ü�Y‰YÐ-¨r¯{©{«}Ó=ˆÙ!#�"—(‘(˜1”+¨ˆà€DØ—)‘)˜E¨)�)Ó4€KÙØ×#Ñ# E°UÐ#Ó;ˆØˆØˆØò 	ˆAÜ�Q—Z‘Z “_Ó%ˆBØ—*‘*“,×$Ñ$Ó&ˆCØ�G‹|¤ C£¨2£Ø�Ø‘ð	ð Ð'‰t¨[ˆØ�'˜4ÐÐr4   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<   |j                  «       j                  d«      s%d|j                  «       v 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 t        | «      }
t!        j"                  dd|
«      }
t!        j"                  dd|
«      }
t!        j"                  dd|
«      }
|
||fS )Nr   F)ÚscriptÚstyleÚiframeÚobjectÚtableÚaT)rF   rF   r7   Úhttp)	z.pdfz.docz.docxz.xlsz.xlsxz.zipz.rarz.wpsz.7zÚuploadÚattachÚimg)Úsrcrs   z<p[^>]*>z<p>z^<div[^>]*>z
</div>\s*$)rX   Ú	decomposeÚboolrU   r1   r<   r=   r>   r?   r@   ÚlowerÚendswithr3   rV   rA   Ústrr/   r0   )r_   rI   ÚtagÚ	has_tableÚattachmentsrn   Úhrf   rr   ÚsrP   s              r'   Úhtml_to_textr~   ¡   sÜ  € Ø€|Ø�5˜"ˆ}ÐØ�}‰}ÒDÓEò ˆØ�‰�ðä�T—Y‘Y˜wÓ'Ó(€IØ€KØ�]‰]˜3 Tˆ]Ó*ò 5ˆØˆf‰I�O‰OÓˆØ�<‰<˜Ô §¡¨VÔ 4ÜŸ™×,Ñ,¬X°qÓ9ˆAˆf‰IØ�7‰7‹9×ÑÐgÔhÐltÐxy×xÑxó  yBñ  mBð  FNð  RS÷  RYñ  RYó  R[ò  F[Ü˜aŸj™j›lÓ+ˆCÚØ×"Ñ" A f¡I¨sÐ#3Õ4ð5ð �}‰}˜U¨ˆ}Ó-ò ;ˆØ�‰J×ÑÓˆØ�<‰<˜Ô §¡¨VÕ 4ÜŸ™×-Ñ-¬h¸Ó:ˆC�ŠJð;ô �$‹i€Gä�f‰f�[ %¨Ó1€Gä�f‰f�^ R¨Ó1€GÜ�f‰f�] B¨Ó0€GØ�I˜{Ð*Ð*r4   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

)r1   rA   Újoin)rP   r{   ÚpartsrI   rf   s        r'   Úappend_attachmentsr‚   ½   s[   € ÙØˆØ Ÿ™œˆW‰I¨b€EØ#ò N‰ˆ�Ø�‰�| G 9Ð,>¸s¸eÀ8ÐLÕMðNà�;‰;�uÓÐr4   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Úlockedr6   )r„   r…   ÚfetchoneÚcrawler_librŽ   r!   Ú
GROUP_NAMEÚSCRIPT_NAMEÚrowcountr/   r0   r,   r-   r1   Ú	lastrowidÚsqlite3ÚOperationalErrorrx   r   r   Ústore_record)rˆ   r"   rG   rP   rH   rz   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t        › d|› dt        |«      › �d¬«       |st        dd¬«        �nV|D �]M  \  }}}	t         s
|v r|d
z  }Œt        |«      \  }
}}|€t        d|d d › d|› �d¬«       |d
z  }ŒE|
s|}
|s|	}t        ||«      \  }}}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¬«       �ŒI|d
z  }�ŒP �Œ™ 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$t        › d%|› d&|› �d¬«       y # 1 sw Y   ŒgxY w)'Né<   )r   zPRAGMA busy_timeout=60000zPRAGMA journal_mode=WALu
   å·²å…¥åº“ u    æ�¡, ç”¨äºŽåˆ—è¡¨çº§é¢„æŸ¥é‡�T)Úflushr   r   z[list] col=z page=z items=zEmpty page, stop paginationz  skip empty: é   z | r�   r   é
   z<img)Úpage_urlrG   rP   Úpublish_daterz   r   Ú
group_nameÚscript_namez
  JSONL + é(   z (ú)z  + Úwr   )r    F)Úensure_asciiú
zJSONL written: z rows)z[done] col=z new=z skip=)r
   r—   Úconnectr	   r„   r‹   ÚprintrY   r   Ú_PAGESrJ   ÚCATIDrg   r~   r‚   r/   r0   r1   rA   r…   r“   r”   r™   ÚaddÚopenÚwriteÚjsonÚdumpsÚcommitÚclose)rˆ   ÚexistingÚ	new_countÚ
skip_countÚ
jsonl_rowsrB   rD   rI   rG   rH   ÚdtitleÚddater_   rP   rz   Ú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Ó ˆÜ�œE˜7 &¨¨¨g´c¸%³j°\ÐBÈ$ÕOÙÜÐ/°tÕ<ÚØ$)ó $	 Ñ ˆG�U˜DÝ '¨XÑ"5Ø˜a‘�
ØÜ".¨wÓ"7ÑˆF�E˜4Øˆ|Ü˜ u¨S¨b z l°#°g°YÐ?ÀtÕLØ˜a‘�
ØÙØ�ÙØ�Ü'3°D¸'Ó'BÑ$ˆG�Y Ü(¨°$Ó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$	 ð* õX Ü”*˜c¨GÔ4ð 	D¸Ø!ò D�Ø—‘œŸ
™
 3°UÔ;¸dÑBÕCñD÷	Dô 	�¤
˜|¨2¬c°*«oÐ->¸fÐEÈTÕRàÐØ�‰ŒØ�
‰
ŒÜ	ˆKœ�w˜e I ;¨f°Z°LÐ
AÈÖN÷	Dð 	Dús   È61KËKÚ__main__)r6   r    )9Ú__doc__ÚsysÚosr/   r   Úhtmlr,   Úurllib.parser=   r—   r²   r   Úbs4r   r   r@   ÚCOLUMNSÚDEFAULT_COLr“   r”   Úenvironr   r	   r
   ÚENCÚ_COLÚ	enumerateÚargvr%   rn   r<   ÚsplitrY   r¬   ÚlistÚkeysÚexitr…   r®   r8   r   r   r   Ú
_MAX_PAGESÚintÚ
ValueErrorr­   r(   r3   rJ   rg   r~   r‚   r‹   r™   rÀ   Ú__name__© r4   r'   ú<module>rØ      s~  ðñ
ó Û 	Û 	Û Û Û Û Û ã ß &ð '€àÐ'NÑ
OØÐ'NÑ
Oñ€ð €Ø€
Ø%€Ø
�*‰*�.‰.˜Ð$5Ó
6€Ø�Z‰Z�^‰^˜L¨"Ó-€
Ø€ð €Ù�c—h‘hÓò �D€A€qØ‡|�|�HÔØ�w‰w�s˜A‹˜qÑ!‰Ø	
ˆg‹˜!˜a™%¡# c§h¡h£-Ó/Ø�x‰x˜˜A™‰‰ð	ð
 ˆwÑÙ	ˆM˜$˜˜z©$¨w¯|©|«~Ó*>Ð)?Ð
@ÔAØ€C‡H�HˆQ„KØ�D‰M˜+Ñ&€	Ø�‰�gÑ€ØˆZÐ9¸%¸ÐA€ð @Ø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€óò$òò*  òF+ò8òòòDBOðJ ˆzÒÙ…Fð øðc ò 	Ùð	ûð
 ò 	Ùð	ús$   Å6G?Æ2H
Ç?HÈHÈ
HÈH