登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 897|回复: 0

[Python教程] 【Python】小说爬取,源可能失效

[复制链接]

444

主题

509

帖子

2051

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2051

荣誉管理论坛元老

发表于 2021-6-30 22:26:25 来自手机 | 显示全部楼层 |阅读模式 来自:
  1. from time import time
    " B( C* E7 Z: T, p8 c+ \( Q2 M
  2. import requests0 E+ ?. ~5 b* l  [" V
  3. import re4 j1 P$ A& V2 C5 @2 n+ \
  4. import os7 s. m+ \; x% F# A$ c  ~% D' a, t
  5. from multiprocessing.dummy import Pool
    & \* d% Z9 v7 x8 m3 o% {

  6. ; z  _% B# l- [
  7. start_url = 'https://www.kanunu8.com/book4/10365/'
      K2 Q1 u& P, F! |- x' _/ e) q

  8. $ _  o0 z$ x+ Z
  9. def get_source(url):  ?6 E# G2 [& P2 z2 S/ J
  10.     html = requests.get(url)) [$ E6 u7 B* L; }- Y( B7 g
  11.     return html.content.decode('gbk')0 e/ D" |  ^( N9 t! }% h  I
  12. 4 i' Y/ s9 N4 m
  13. def get_toc(html):
    + q9 x& x- M, T' a
  14. 0 ?/ h2 t# [: x5 P; G+ T2 t
  15.     toc_url_list = []
    6 p4 y1 n' P% o0 n& o5 z1 g
  16.     toc_block = re.findall('正文(.*?)</tbody>',html,re.S)[0]
    * I' `$ I& R- a! y% G$ I* P' I
  17.     toc_url = re.findall('href="(.*?)"',toc_block,re.S)
    8 r( I- ~" u$ w( M% h+ F4 ?
  18.     for url in toc_url:# v8 A, ]# n9 {4 D, k) B' e& G
  19.         toc_url_list.append(start_url+url)$ ^. d' a5 Z  g' _) T
  20.     return toc_url_list
    $ D6 N0 _7 |; W6 k5 O. ]/ M7 j

  21. 4 B, e2 ]) g2 S% u6 F( Y" n, \' D  K
  22. def get_article(html):
    3 s; Z$ `) X- k* p* S, ^
  23. ) S8 l1 C. j* u4 @* z1 i
  24.     chapter_name = re.search('size="4">(.*?)<',html,re.S).group(1)- h/ b1 J7 z) d1 `/ w# p! m3 z
  25.     text_block = re.search('<p>(.*?)</p>',html,re.S).group(1)5 v3 U  O/ g( C- @/ G$ E3 x
  26.     text_block = text_block.replace('<br />','')
    0 u8 x6 X& p* E! `$ Z) f& w9 p
  27.     text_block = text_block.replace('&nbsp;','')! ?8 u; d2 C+ X( B2 Y) }8 y5 ~
  28.     return chapter_name,text_block
    1 g8 ]# {' L3 K6 J% _

  29. - C; }2 V" D4 R( S- e- Q" q7 f
  30. def save(chapter,article):, V  D2 [7 U% `& T, F0 z  I" M0 O. J
  31.     os.makedirs('罗密欧与朱丽叶',exist_ok=True)9 Z  ]' i- b% n) T: s# ?
  32.     with open(os.path.join('罗密欧与朱丽叶',chapter + '.txt'),'w',encoding='utf-8') as f:
    7 E$ M# ^+ b8 A! s) l
  33.         f.write(article)
    ) V3 x/ L- B3 K  C( s* \
  34.         print('下载成功--->',chapter, '.txt')
    ' s6 S" O, \0 ^% u, s$ X

  35. ! q7 W, \% q( b$ W3 k
  36. def query_article(url):
    6 q3 W+ k1 g7 ?3 ~
  37.     article_html = get_source(url)( r# M- [- o3 N) f
  38.     chapter_name,article_text = get_article(article_html), o5 L* u0 M8 G/ W* C6 p1 Q
  39.     save(chapter_name,article_text)3 z+ y& y( N& m$ G& b/ t/ a

  40. ' ~) V4 s( ~. i, S2 Z  t
  41. if __name__ == '__main__':
    ( y, ?1 l8 J3 p6 t# A
  42.     a = get_source(start_url)4 K0 _8 `# O: E, I  ?* F( }
  43.     b = get_toc(a)0 T  a$ o& H, F, e
  44.     start = time()" k; G; B3 `& V0 J8 C& R2 _# r
  45.     pool = Pool(4)
    & E2 r9 ?; G- t
  46.     pool.map(query_article, b)" n6 V( x3 {& P" N
  47.     end = time()
    ' X1 h$ N- {4 n' @0 o. G; |& n5 H
  48.     print(end-start)
    # Q% P- h% G0 X& d
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|星空社区 |网站地图

GMT+8, 2024-4-30 07:53 , Processed in 0.049174 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表