温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python使爬取小说观看的方法

发布时间:2020-06-30 11:05:37 来源:亿速云 阅读:181 作者:清晨 栏目:编程语言

不懂python使爬取小说观看的方法?其实想解决这个问题也不难,下面让小编带着大家一起学习怎么去解决,希望大家阅读完这篇文章后大所收获。

python使爬取的小说更利于观看的方法:

1、使用追加模式将文章写入txt文本

关于文件的写入, ‘w’ 的方式 是覆盖写, 没有就创建, 那么我们写小说就不需要用这个, 使用
‘a’ 追加写的模式, 然后添加适当的分隔符, 只有文本中添加目录, 整个txt在手机中才会显示出目录的存在 ,我的实例如下: 最好加点文字提示, 代表这章节下载成功到总txt中 !

path = 'D://爬取小说//'
        os.chdir(path)  # 进入这个文件夹
        with open('酒神.txt', 'a+', encoding='utf-8') as fw:
            fw.write(''.join(items['title']) + '\n\n\n' + '- ' * 40)
            fw.write(''.join(items['text']))
        print(f'{items["title"]} 下载完成!')

2、使用xpath读取网页的文章内容

爬取小说这样的文字量很多的情况下, 文字的处理显得极为重要了,爬取小说不推荐使用正则re,也不推荐使用soup, 原因你获取不了网页自带的换行符和缩进符, 比如 \xboo 之类的, 如果你获取不了文本自带的这些,那么你就得自己添加,可以使用re的sub进行适当的替换换行,这就很麻烦,这里一定推荐使用xpath的text() 去匹配, 方便快捷,爬小说的小助手!

text = html.xpath('//div[@id="content"]/text()')

3、添加sleep函数,降低爬取速度

为什么会出现这样的情况,高频发的请求网址,如果不是使用框架, 那么就需要设置延迟时间了。比如sleep() 或者 request 加入参数 timeout ,不然很容易被网址通过请求次数 进而识别出来 这是一个爬虫程序, 也就是非人类操作, 那么他就可以不让你请求,从而你就爬虫失败!

r = requests.get(url, headers=self.headers) 
time.sleep(0.7)

完整代码如下:

# -*- coding :  utf-8 -*-
# @Time      :  2020/6/2  16:13
# @author    :  沙漏在下雨
# @Software  :  PyCharm
# @CSDN      :  https://me.csdn.net/qq_45906219
import requests
from lxml import etree
import os
import time
class Spider:
    def __init__(self):
        self.start_url = 'http://www.biquge.info/11_11079/'
        self.headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                                      'AppleWebKit/537.36 (KHTML, like Gecko)'
                                      ' Chrome/81.0.4044.129 Safari/537.36',
                        'Host': 'www.biquge.info',
                        'Referer': 'http://www.biquge.info/11_11079/5216668.html',
                        'Cookie': 'clickbids=11079; Hm_lvt_6dfe3c8f195b43b8e667a2a2e5936122=1591085546;'
                                  ' Hm_lvt_c979821d0eeb958aa7201d31a6991f34=1591085539,1591085553,1591085815; '
                                  'Hm_lpvt_6dfe3c8f195b43b8e667a2a2e5936122=1591087376; '
                                  'Hm_lpvt_c979821d0eeb958aa7201d31a6991f34=1591087377'}
    def get_page(self):
        """
        获得每一章节的网址
        yield 回去
        """
        r = requests.get(self.start_url, headers=self.headers)
        if r.status_code == 200:
            r.encoding = r.apparent_encoding
            html = etree.HTML(r.text)
            page_url = html.xpath('//div[@id="list"]/dl/dd/a/@href')
            for url in page_url[222:]:
                url = f'http://www.biquge.info/11_11079/{url}'
                yield url
    def save_text(self, items):
        """
        根据章节下载'
        """
        path = 'D://爬取小说//'
        os.chdir(path)  # 进入这个文件夹
        with open('酒神.txt', 'a+', encoding='utf-8') as fw:
            fw.write(''.join(items['title']) + '\n\n\n' + '- ' * 40)
            fw.write(''.join(items['text']))
        print(f'{items["title"]} 下载完成!')
    def parse_page_error(self, r):
        # 为处理异常:
        r.encoding = r.apparent_encoding
        html = etree.HTML(r.text)
        title = html.xpath('//div[@class="bookname"]/h2/text()')
        text = html.xpath('//div[@id="content"]/text()')
        items = {}
        items['title'] = title
        items['text'] = text
        self.save_text(items)
    def parse_page(self):
        """
        分析每一章节  然后下载, 次数过快 容易炸ip 三次保底请求 !
        """
        for url in self.get_page():
            r = requests.get(url, headers=self.headers)
            time.sleep(0.7)
            if r.status_code == 200:
                self.parse_page_error(r)
            else:
                print(f'该 {url}未下载成功! 再次请求')
                rr = requests.get(url, headers=self.headers)
                if rr.status_code == 200:
                    self.parse_page_error(rr)
                else:
                    print("第三次请求!")
                    rrr = requests.get(url, headers=self.headers)
                    self.parse_page_error(rrr)
        print('全部下载完成!')
jiushen = Spider()
jiushen.parse_page()

感谢你能够认真阅读完这篇文章,希望小编分享python使爬取小说观看的方法内容对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,遇到问题就找亿速云,详细的解决方法等着你来学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI