鱼C论坛

 找回密码
 立即注册
查看: 1927|回复: 4

[作品展示] python爬虫 小说下载

[复制链接]
发表于 2017-11-21 11:31:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写了个下载小说的爬虫,可以下载大部分排行榜靠前的小说
效果图如下: 微信截图_20171121112640.png

代码如下
  1. import urllib.request
  2. import urllib.parse
  3. import re
  4. import time
  5. from bs4 import BeautifulSoup as bs

  6. url_1 = 'http://www.23us.so/top/allvisit_'


  7. #打开网页
  8. def url_open(url):
  9.     req = urllib.request.Request(url)
  10.     req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0)\
  11. Gecko/20100101 Firefox/57.0')
  12.     response = urllib.request.urlopen(req, timeout=10)
  13.     html = response.read().decode('utf-8')
  14.     response.close()
  15.     return html

  16. def get_url(html, word):
  17.     search_index = word+'</a></td>(\s*?)<td class="\w"><a href="(.*?)"'
  18.     p = re.compile(search_index)
  19.     m = p.search(html)   
  20.     try:
  21.         novel_address = m.group(2)
  22.         return novel_address
  23.     except:
  24.         return None
  25.      
  26. def get_chapters(html):
  27.     chapter_list = []
  28.     p = re.compile(r'a href="(.{50,70}?)">(第(.+?)章)(.*?)</a>')
  29.     chapter_list = p.findall(html)
  30.     return chapter_list

  31. def download_chapters(chapter_list, word):
  32.     file_name = word + '.txt'
  33. #    p = re.compile(r'<dd id="contents">(.*?)</dd>', re.DOTALL)
  34.     with open(file_name, 'w', encoding='utf-8') as f:
  35.         for each in chapter_list:
  36.             html = url_open(each[0])
  37.             soup = bs(html, "html.parser")
  38.             f.write('\n' +each[1] + '\n')
  39.             temp = soup.find_all('dd', id='contents')
  40.             f.write(temp[0].text)
  41.               
  42.         
  43. def download_novel():
  44.     word = input("请输入要下载的小说名字:")
  45.     i = 0
  46.     while True:
  47.         i += 1
  48.         novel_search = url_1 + str(i) + '.html'
  49.         #获取小说网页
  50.         html = url_open(novel_search)  
  51.         novel_url = get_url(html, word)
  52.         #获取章节网页
  53.         if novel_url == None:
  54.             if i>50:                        
  55.                 print('您需要的小说暂时无法下载')
  56.                 break
  57.         else:
  58.             print('正在下载中....')
  59.             chapter_list = get_chapters(url_open(novel_url))
  60.             download_chapters(chapter_list,word)
  61.             print('下载完成!')
  62.             break
  63.    

  64. if __name__ == '__main__':
  65.     download_novel()   
  66.    
复制代码


代码比较简单,更多功能有待完善

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
purplenight + 1 + 1 支持楼主!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-22 20:36:35 From FishC Mobile | 显示全部楼层
666666666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-25 10:51:25 | 显示全部楼层
这么厉害??强大
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-23 16:44:39 | 显示全部楼层
运行直接报错啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-24 08:33:41 | 显示全部楼层
麻烦楼主能解答一下 第21行  search_index 以及后面的那一串是什么意思?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 21:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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