python爬虫小白升仙_1-----爬取笔趣阁小说

时间:2025-02-19 22:37:06

                                                       python爬虫小白升仙

爬取笔趣阁小说

一、思想

1.使用requests库进行网页源码的获取

2.使用xpath对HTML进行特定节点内容的提取

3.保存数据内容到文件

4.生成可执行文件.exe

二、源码

'''
author:
time:2019/4/29
function:爬取笔趣阁的部分小说
'''
import requests
from lxml import etree

class Novel_Spider(object):
    def __init__(self,novel_name):
        self.__url=""
        self.__novel_name=novel_name

    #获取小说的链接
    def get_request(self):
        #请求网站获取到HTML源码
        response=(self.__url)
        xml=()
        #使用xpath进行特定部分的提取
        result_name_1=('//div[@class="item"]//dt/a/text()')
        result_url_1=('//div[@class="item"]//dt/a/@href')
        result_name_2=('//div[@class="novelslist"]//ul/li/a/text()')
        result_url_2=('//div[@class="novelslist"]//ul/li/a/@href')
        result_name=result_name_1+result_name_2
        result_url=result_url_1+result_url_2
        #将小说名和小说链接组合成字典,形成1v1的关系
        ndict=dict(zip(result_name,result_url))
        #判断小说是否在可爬取的范围内
        if not self.__novel_name in result_name:
            print("该小说不在范围内,请重新输入。。。")
            print("可爬取的小说有:",)
            for n in result_name:
                #end="" 可使输出不换行
                print(n+"  ",end="")
        else:
            self.get_chapter((self.__novel_name))

    #获取每一章节的链接,并调用获取章节内容的方法,将文本写入文件
    def get_chapter(self,str_url):
        response=(str_url)
        #response为返回的html源代码,可能存在中文乱码的情况。 采用下行代码,获取源码中的编码规则,可解决乱码问题
        =response.apparent_encoding
        xml=()
        chapter_name=('//div[@class="box_con"]//dd/a/text()')
        chapter_url=('//div[@class="box_con"]//dd/a/@href')
        i=0
        while i<len(chapter_url):
           chapter_url[i]=self.__url+chapter_url[i]
           i+=1
        f = open(self.__novel_name+".txt", "w", encoding="utf-8")
        generator=(self.download_file(n,u) for n,u in zip(chapter_name,chapter_url))
        print("下载中。。。。请稍后")
        rate=0
        for gi in generator:
            #用于记载爬取进度
            rate+=1
            print("进度:",round((rate/len(chapter_name)*100),2),"%")
            for xi in gi:
                (xi)
        ()

    #获取章节内容
    def download_file(self,str_name,str_url):
        response=(str_url)
        =response.apparent_encoding
        xml=()
        txt=('//div[@class="box_con"]/div[@]/text()')
        #插入章节标题到每一章节的开头,并修改输出格式,以符合原文章格式
        (0,"    "+str_name+"\n\n")
        ("\n\n")
        return txt



if __name__=="__main__":
    #简单交互
    print("----小说爬取----")
    print("---------------")
    a=input("请输入小说名:")
    novel_spider=Novel_Spider(a)
    novel_spider.get_request()
    input()

github地址:/KilterW/Novel_Spider