至于我为什么发这么火,原因如下:

  1. 朋友的小说全部放在文件夹中,就是一章一个text文本, 没有目录的存在,而且目录章节混乱,我大致看了下,第五章就跳到第七章了, 中间的不知道怎么没了。
  2. 打开小说一看, 密密麻麻挤着一起,没有一点段落感,而且还有一些html代码,没有处理干净,最重要的,居然还有一大批网址在里面,简直就是不走心
  3. 第三,爬取的小说根本就不能算一整本,我看了一下文件数量,足足少了二十多章,我评价到看个鬼,你自己看看能不能行 !
  4. 朋友看完,自己也很无语,至于他为什么会出现这种情况,我想很多爬虫新手们,都会出现这样的情况,而且这些问题都是出自细节中,新手们,不怎么会考虑周到,那么既然朋友也出现了这样的问题,他让我帮他改改,于是改完之后,我写下这篇博客,让更多人真正的爬小说,而不是爬一坨屎,自己都看不下去的那种坨屎!!!!

解决方案如下:

这一期还是做一个干货分享,都是我半年以来的爬虫经验,需要教学可以私聊我,在校学生还是需要一点经济支持的!

如何产生章节:

自己问自己,有多少人爬取小说是这样的,你自己能看吗?

写代码的时候大部分人是这样的

with open('**.text', 'w') as fw:fw.write(r.text)

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

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

如何章节顺序稳定:

一般我们都是从目录url 中, 去获取我们需要的章节网址, 这里拿我爬取的网址实例:

这里我们就能获取所有章节的网址了, 只要进行适当的拼接处理, 那么很多人就舒服了,直接获取整个url列表, 直接返回给调用函数, 舒服吧? 你电脑不舒服, 关于returnyield 你真的懂吗? 如果你请求的网址很多, 一定时间请求次数过多,就容易丢失网址,我想大部分人都是返回列表,然后遍历列表吧? 万一丢了一个章节网址呢? 是不是就会出现章节混乱的情况,使用yield 就不需要考虑这么多因素了, 它可以直接调用一次返回一次,有效的避免了可能的因素, 我觉得很好用, 我也推荐使用, 不是所有的返回都是用return!!!

示例如下:

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

如何保证文字的处理:

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

示例如下:

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

非常的简单, 而且xpath的匹配非常的快,不会的朋友一定要学,soup真的不推荐,大工程起来真的慢!


如何应对ip限制等因素:

他在爬小说的时候,也出现了这样的问题,在一个urls列表中, 竟然有的能请求成功, 有的不能请求成功, 明明都是网址没有错, 我也能打得开,但就是出现了这样的bug,很闹腾,但是后面我还是修复了。

bug 出现 : 所有的网址 一定是正确的, 我可以确保。

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

这样搞:

多次请求,模块分离,你搞我, 我也可以搞你!

将获取文本的函数 分离出来, 在parse_page 进行三次判断,失败就回溯,三次回溯,实测,请求被挡住的概率大幅降低。这是一个不错的方法, 当然, 还需要加入 sleep(), 来控制代码的延迟时间。

    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('全部下载完成!')

这一期干货就到此为此, 主要还是满足自己的需求,2020年了,看小说还不会爬虫,你有多捞!

爬虫全程序:

# -*- coding :  utf-8 -*-# @Software  :  PyCharm# @CSDN      :  https://me.csdn.net/qq_45906219import requestsfrom lxml import etreeimport osimport timeclass 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']) + '' + '- ' * 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爬虫更改ip_Python小说爬虫,有目录,有文字极简处理,还有IP解锁方式相关推荐

  1. python写的有声小说爬虫

    querybook.py from bs4 import BeautifulSoup from lxml import html import xml import requests import s ...

  2. python搭建博客系统_用Pelican快速搭建极简静态博客系统

    我一直建议每个开发者都要有写博客记笔记的习惯,一来可以沉淀知识,二来可以帮助别人,我使用过很多博客平台,也用Python开发过博客系统,就这么个东西折腾好几年,一直找不到理想的产品,直到我用Pelic ...

  3. python批量将word、ppt转化为pdf(极简版)

    日将将PPT和word批量转成pdf的需求还是比较普遍的.下列两段代码中,word转pdf的有时候会出现莫名奇妙的报错,跑了两次由于顺利将工作完成了,也没继续研究原因,有需要的使用时得注意下.ppt转 ...

  4. python 小说 小说_python潇湘书院网站小说爬虫

    很久没有写爬虫了,最近接到一个抓取小说的项目顺便做此纪录练练手,之后工作中可能也会有部分场景要用到爬虫,爬取竞争对手进行数据分析什么的. 目标网站:潇湘书院 环境准备: python3 request ...

  5. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

    从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个 ...

  6. 简单 python 小说爬虫 ultimate

    简单 python 小说爬虫 想爬就爬 带txt配置文件 day01(半成品) 划掉 - day02(成品) 书名 史上第一剑修 笔趣阁 url代码里找 ####################### ...

  7. Python爬虫实战——下载小说

    Python爬虫实战--下载小说 前言 第三方库的安装 示例代码 效果演示 结尾 前言 使用requests库下载开源网站的小说 注意:本文仅用于学习交流,禁止用于盈利或侵权行为. 操作系统:wind ...

  8. python爬取小说写入txt_燎原博客—python爬取网络小说存储为TXT的网页爬虫源代码实例...

    python是一门优秀的计算机编程语言,两年前曾因为动过自动化交易的念头而关注过它.前几天在微信上点了个python教学的广告,听了两堂课,所以现在又热心了起来,照葫芦画瓢写了一段简单的网络爬虫代码, ...

  9. python超简单超基础的免费小说爬虫

    python超简单超基础的免费小说爬虫 需要准备的环境 选取网页 思路 代码 总结 需要准备的环境 1.python 3.0及以上皆可 2.requests库,os,re 选取网页 找一个免费的小说网 ...

最新文章

  1. css层叠样式表(一)
  2. 区块链+5G=智慧城市?
  3. MFC“未定义标识符”报错解决方法
  4. pyDash : Linux 性能监测工具
  5. 如歌将两个数组合并_腾讯50题---合并两个有序数组
  6. Necessary configuration to get Smart business tile work in UXT/928
  7. xampp mac mysql 密码_max系统中修改xampp的mysql默认密码
  8. Abp Vnext Vue3 的版本实现
  9. HTML+CSS+JS实现canvas仿ps橡皮擦刮卡效果
  10. 【机器学习】深度学习开发环境搭建
  11. 分享Qt的面试题目(或许未来的我能用的上呢)_vortex_新浪博客
  12. 【ABAP系列】SAP ABAP 总结常用术语简称解析
  13. cartopy模块介绍与安装
  14. linux bzip2 命令,Linux bzip2 命令的使用
  15. 最新四级联动数据json
  16. PDF编辑方法,怎么在PDF中添加图片
  17. IP 地址分为哪几类?
  18. 电脑电源问题,导致攒机电脑无法开机
  19. 复杂网络作业二:第一题——Wikipedia vote网络的基本分析
  20. 广东电信最新DNS更新了

热门文章

  1. Python编写的桌面图形界面程序实现更新检测和下载安装
  2. 使用Python打造一款间谍程序
  3. 深度学习《BiGAN》
  4. 漫步微积分十——复合函数和链式法则
  5. ios开发循环网络请求_如何简化网络请求接口开发
  6. torch中Dataset的构造与解读
  7. [论文阅读][ICP变种] Generalized-ICP
  8. [解决方案]ln:无法创建符号链接‘ /usr/bin/python‘:权限不够
  9. ELV局部视图与差分隐私【敏感度到底怎么理解】【上】
  10. vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)