最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python如何使爬取的小说更利于观看

    正文概述    2020-03-26   374

    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"]/h1/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知识,请关注:Python自学网!!


    下载网 » python如何使爬取的小说更利于观看

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元