zoukankan      html  css  js  c++  java
  • 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, '
    
    ')#使用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 + '
    ')
                f.writelines(text)
                f.write('
    
    ')
    
    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) + '
    ')
            sys.stdout.flush()
        print('《正道潜龙》下载完成')
    

      

  • 相关阅读:
    Python
    12C配置EM Express的https端口
    在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
    Java – How to add days to current date
    Java – Display all ZoneId and its UTC offset
    Java 8 – Period and Duration examples
    Java 8 – Convert Instant to ZonedDateTime
    Java 8 – Convert Instant to LocalDateTime
    Java 8 – How to format LocalDateTime
    how-to-convert-string-to-localdate
  • 原文地址:https://www.cnblogs.com/lirongyang/p/11089838.html
Copyright © 2011-2022 走看看