Python爬虫-爬取17K小说

 随笔记录方便自己和同路人查阅。

#------------------------------------------------我是可耻的分割线-------------------------------------------

 这是一个爬取用户17k小说网站爬虫。

#------------------------------------------------我是可耻的分割线-------------------------------------------

 

# !/usr/bin/env python
# -*- coding: UTF-8 -*-
__author__ = 'Mr.Li'

from bs4 import BeautifulSoup
import requests, sys


"""
类说明:下载《17K》网小说
Parameters:
    无
Returns:
    无
Modify:
    2019-05-13
"""
class downloader(object):
    def __init__(self):
        """

        :rtype: object
        """
        self.server = 'http://www.17k.com'  # 网站地址
        self.target = 'http://www.17k.com/list/2731559.html'  # 目录URL地址
        self.names = []            #存放章节名
        self.urls = []            #存放章节链接
        self.nums = 0            #章节数

    """
    函数说明:获取下载链接
    Parameters:
        无
    Returns:
        无
    Modify:
        2017-09-13
    """
    def get_downloader_url(self):
        req = requests.get(self.target)  # 获取URL地址内容
        req.encoding = 'utf-8'  # 转码
        html = req.text  # 保存get到的内容
        div_bf = BeautifulSoup(html, 'html.parser')  # 使用BeautifulSoup进行解析
        div = div_bf.find_all('div', class_='Main List')  # 查询符合条件的内容

        a_bf = BeautifulSoup(str(div[0]),'html.parser')#重新解析
        a = a_bf.find_all('a')#查找元素为'a'的内容

        self.nums = len(a[11:])
        for each in a[11:]:
            self.names.append(each.string)#把章节名称添加到变量
            self.urls.append(self.server + each.get('href'))#把章节URL地址添加到变量

    """
        函数说明:获取章节内容
        Parameters:
            target - 下载连接(string)
        Returns:
            texts - 章节内容(string)
        Modify:
            2019-05-13
        """

    def get_contents(self,target):
        req = requests.get(target)#获取URL地址内容
        req.encoding = 'utf-8'#解码
        html = req.text
        bf = BeautifulSoup(html, 'html.parser')#解析
        texts = bf.find_all('div', class_='readAreaBox content')#使用查找章节正文
        texts = texts[0].text.replace('\xa0' * 8, '\n\n')#使用replace方法,剔除空格,替换为回车进行分段
        return texts

    """
    函数说明:将爬取的文章内容写入文件
    Parameters:
        name - 章节名称(string)
        path - 当前路径下,小说保存名称(string)
        text - 章节内容(string)
    Returns:
        无
    Modify:
        2019-05-13
    """
    def writer(self, name, path, text):
        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__":
    dl = downloader()
    dl.get_downloader_url()
    print('《正道潜龙》开始下载:')
    for i in range(dl.nums):
        dl.writer(str(dl.names[i]), '正道潜龙.txt', dl.get_contents(dl.urls[i]))
        sys.stdout.write("  已下载:%.3f%%" %  float(i/dl.nums) + '\r')
        sys.stdout.flush()
    print('《正道潜龙》下载完成')

  

posted @ 2019-06-26 14:50  李荣洋  阅读(1070)  评论(0编辑  收藏  举报