Python爬虫实战 | 抓取小说网完结小说斗罗大陆

储备知识应有:Python语言程序设计
Python网络爬虫与信息提取
两门课程都是中国大学MOOC的精彩课程,特别推荐初学者。环境Python3
本文整体思路是:1.获取小说目录页面,解析目录页面,得到所有章节链接存储在一个二维列表中。对应函数 allurl(urldir,html)
2.每次解析一章节,然后保存在文件中。对应函数 fillFile(urldir, file)

# 下载斗罗大陆
import bs4, lxml, traceback
from bs4 import BeautifulSoup
import requests

#爬取网页信息
def getHtmlText(url):
    try:
        # 设置代理 获取网页
        header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'}
        r=requests.get(url, headers= header)
        # 判断返回状态
        r.raise_for_status()
        # 设置编码
        r.encoding=r.apparent_encoding
        # 返回网页内容
        return r.text
    except:
        return "获取网页信息失败"

#解读网页信息
def fillFile(urldir, file):
    # 总章节数
    numbers = len(urldir)
    # 当前处理的章节数
    index = 1
    # 对二维列表进行解析
    for i in range(numbers):
        # 处理一维列表
        child = urldir[i]
        text = getHtmlText(child[1])
        # 煲汤,解析网页信息
        soup = BeautifulSoup(text, 'lxml')
        # 获取标题
        title = child[0]
        # 捕获出现的异常
        try:
            # 获取内容
            content = soup.select('#content')[0].text.replace('<br/><br/>', '').strip('style56(); ')
            both = title + '\n' + content + '\n'
            file.write(both)
        except IndexError:
            print(title +  '出现列表索引异常----------------')
            print(traceback.print_exc())
        except:
            print(title + ' 出现异常')
            # 打印具体的异常信息
            print(traceback.print_exc())

        print('\r{}当前已下载:{:.3f}%'.format(title,index / numbers * 100))
        index += 1

# 解读目录信息,获取所有章节url
def allurl(urldir,html):
    # 煲汤,解析目录信息
    soup = BeautifulSoup(html,'html.parser')
    # 查找目录信息位置
    allurl = soup.find_all('div', class_="clearfix dirconone")[0]
    # 下行遍历获取所有的章节信息 保存在二维列表中
    for li in allurl.children:
        # 是否是标签对象
        if isinstance(li, bs4.element.Tag):
            # 读取a标签
            lis = li.a
            # 在字典类型中获取标题和链接
            name,link = lis.attrs['title'].split(sep=',共')[0], lis.attrs['href']
            urldir.append([name, link])
def main():
    # 小说目录地址
    url = 'http://www.quanshuwang.com/book/44/44683'
    # 存储所有的章节链接
    uinfo = []
    # txt文件
    file = open('D:斗罗大陆.txt', 'w', encoding='utf-8')
    # 获取网页内容
    html = getHtmlText(url)
    # 将所有目录url放入uinfo
    allurl(uinfo, html)
    # 将每一章解析到txt文件中
    fillFile(uinfo, file)
    # 关闭文件
    file.close()
main()
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值