利用python爬虫下载小说

回想当初自学Python很大一部分原因是想要自己爬数据,今天终于学会了怎么下载小说。于是搞了一波《球状闪电》

需要用到两个库:requests 和 BeautifulSoup,用 pip 安装即可。

主要的步骤是:

  • 利用 requests.get(url) 获取网页信息。注意如果中文出现乱码,就加上 edcoding = '*',其中星号代表 html 解码方式,通常在 head 里面的 charset 可以找到。
  • 通过审查元素找到想要抓取内容的路径(右击正文部分打开检查即可)
  • 利用 find_all() 抓取有用信息,并进行过滤

但最后效果是换行有点多,格式有些乱。我用 text.replace() 也没用,可能换行符不大一样吧。

同志还需努力。

import requests, sys
from bs4 import BeautifulSoup
        
def get_contents(target):   # 获取章节内容
    req = requests.get(url = target)
    req.encoding = 'GB2312'
    html = req.text
    bf = BeautifulSoup(html, features = "lxml")
    texts = bf.find_all('div', id = 'content')
    texts = texts[0].text.replace('\n\n', '\n')	#去不掉多余换行?
    return texts

def writer(name, path, text):   # 写入 path
    write_flag = True
    with open(path, 'a', encoding = 'utf-8') as f:
        f.write(name + '\n')
        f.writelines(text)
        f.write('\n\n')
    
if __name__ == "__main__":
    # 获取目录
    names, urls = [], []
    req = requests.get(url = 'http://book.sbkk8.com/xiandai/liucixinzuopinji/qiuzhuangshandian')
    req.encoding = 'GB2312'
    html = req.text
    bf = BeautifulSoup(html, features = "lxml")
    content = bf.find_all('div', class_ = 'mulu')
    atmp = BeautifulSoup(str(content[0]), features = "lxml")
    a = atmp.find_all('a')	# 返回一个list
    num = len(a)

    for u in a:     # 每章名称和链接
        names.append(u.string)
        urls.append('http://book.sbkk8.com/' + u.get('href'))
 
    print("Downloading...")
    for i in range(num):
        writer(names[i], 'Ball-lightning.txt', get_contents(urls[i]))
        print("%.2f%% has been downloaded" % float(100.0*i/num), end = '\r') 
    print("100.00% has been downloaded\nFinish") 
  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值