Python:50行代码实现下载小说,图片章节可自动识别转文字保存...
最近有小伙伴吐槽,有些小说下载下来后发现是图片章节,白下载了,问我怎么处理?
这还不简单,加个文字识别不就好了。
所以今天咱们来展示一下怎么将小说爬下来,再识别成文字保存。
话不多说,开搞!
一、准备工作
1、环境使用
Python 3.8
Pycharm
2、模块使用
requests >>> 数据请求模块
parsel >>> 数据解析模块
re 正则表达式
requests 是第三方模块,需要手动安装,在CMD里面进行安装 输入安装命令 pip install 模块名。如果平时下载模块慢,可以切换国内镜像源。
3、模块安装问题
安装python第三方模块最快捷的有两种方法
第一种: win + R 输入 cmd 点击确定,输入安装命令 pip install 模块名 (pip install requests) 回车。
第二种: 在pycharm中点击Terminal(终端) 输入安装命令
安装失败原因
失败一
pip 不是内部命令
解决方法: 设置环境变量
失败二
出现大量报红 (read time out)
解决方法: 因为是网络链接超时, 需要切换镜像源。
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:https://pypi.hustunique.com/
山东理工大学:https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.com/simple/
例如:pip install -i https://pypi.doubanio.com/simple/ 模块名
失败三
cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入。
解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好,或者你pycharm里面python解释器没有设置好。
4、如何配置pycharm里面的python解释器?
- 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
- 点击齿轮, 选择add
- 添加python安装路径
5、pycharm如何安装插件?
- 选择file(文件) >>> setting(设置) >>> Plugins(插件)
- 点击 Marketplace 输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
- 选择相应的插件点击 install(安装) 即可
- 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
二、案例思路/基本流程
1、分析我们想要数据内容来自于哪里
F12 开发者工具进行抓包分析,打开 F12 或者 鼠标右键点击检查 刷新网页,点击搜索按钮,输入搜索内容,点击回车找到数据包。
请求 https://b.faloo.com/631781_1.html 这个网址, 就可以得到我们想要小说内容。
2、代码实现步骤
- 发送请求, 模拟浏览器对于 https://b.faloo.com/631781_1.html 发送请求
- 获取数据, 获取服务器返回响应数据 —> 开发者工具里面response
- 解析数据,提取我们想要数据内容,小说章节名字
- 保存数据,保存本地文件。
3、代码展示
模块导入
# 导入数据请求模块
import requests
# 导入数据解析模块
import parsel
# 导入获取VIP章节代码
import Vip
# 导入图片文字识别代码
import spot
# 导入os模块
import os
发送请求
模拟浏览器对于 https://b.faloo.com/631781_1.html 发送请求
为什么使用的是 requests.get ?
根据开发者工具里面所看到请求方式, 浏览器是什么请求方式, 我们代码当中就使用什么请求方式
爬虫代码要伪装成浏览器发送请求
添加headers请求,你不加请求头, 不伪装, 你就会被识别出来你是爬虫程序, 从而得到你想要的内容,被反爬了。
# 目录页url地址
link = 'https://地址我先屏蔽了,不然不给过com/631781.html'
# 请求头参数 ---> 在开发者工具复制粘贴的
# 复制这个替换掉上面地址中的中文 b.faloo
headers = {# User-Agent 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求 ---> <Response [200]> 响应对象
html_data = requests.get(url=link, headers=headers).text# 目录页url地址
link = 'https://b.faloo.com/631781.html'
# 请求头参数 ---> 在开发者工具复制粘贴的
headers = {# User-Agent 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求 ---> <Response [200]> 响应对象
html_data = requests.get(url=link, headers=headers).text
# 转成可解析对象
selector = parsel.Selector(html_data)
# 获取小说名字
name = selector.css('#novelName::text').get()
# 获取所有章节url地址 ---> .DivTd a 还是定位标签 attr(href) 获取标签里面href属性
href = selector.css('.DivTd a::attr(href)').getall()[58:100]
获取数据
获取服务器返回响应数据 —> 开发者工具里面 response 响应文本数据 print(response.text)
for index in href:# 确定请求链接url = f'https:{index}'# 请求头参数 ---> 在开发者工具复制粘贴的headers = {# User-Agent 表示浏览器基本身份信息'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'}# 发送请求 ---> <Response [200]> 响应对象response = requests.get(url=url, headers=headers)
解析数据
提取我们想要数据内容, 小说 小说章节名字
撤回 ctrl + z
得到的 response.text 响应文本数据 字符串数据类型 需要转换一下数据类型
解析方法: css选择器 —> 根据标签属性内容提取数据
css语法不会, 没有关系, 只要你会 ctrl + c / v
# 转成可解析对象
selector = parsel.Selector(response.text)
# 提取小说章节标题 --> .nr_center .c_left .c_l_title h1 css语法用于定位标签 ::text 获取标签文本内容
title = selector.css('.nr_center .c_left .c_l_title h1::text').get()
# 提取小说内容 --> 获取所有 getall
content_list = selector.css('div.noveContent p::text').getall()
if len(content_list) != 0:# 保存文本数据, 保存字符串数据类型 需要把列表转成字符串 str(content_list)强制转换content = '\n'.join(content_list) # 用\n (换行符) 把 content_list (列表) 合并成一个字符串数据
保存数据, 保存本地文件
# 打开文件 进行保存with open(name + '.txt', mode='a', encoding='utf-8') as f:# 写入数据f.write(title)f.write('\n')f.write(content)f.write('\n')print('成功保存: ',title)else:img_content = Vip.get_vip_img(link=url)with open('img\\' + title + '.png', mode='wb') as img_f:img_f.write(img_content)print('成功保存: ',title)
图片文字识别,返回文字内容
files = os.listdir('img\\')
for file in files:img_file = 'img\\' + filenovel_title = file.replace('.png', '')novel_content = spot.get_vip_content(file=img_file)with open(name + '.txt', mode='a', encoding='utf-8') as f:# 写入数据f.write(novel_title)f.write('\n')f.write(novel_content)f.write('\n')
好了,今天的分享就到这里,全部代码下方名片获取。
最后推荐一套Python教程, 涵盖了常见的大部分案例实战,非常详细~
代码总是学完就忘记?100个爬虫实战项目!让你沉迷学习丨学以致用丨下一个Python大神就是你!
Python:50行代码实现下载小说,图片章节可自动识别转文字保存...相关推荐
- python爬虫实战:利用scrapy,短短50行代码下载整站短视频
近日,有朋友向我求助一件小事儿,他在一个短视频app上看到一个好玩儿的段子,想下载下来,可死活找不到下载的方法.这忙我得帮,少不得就抓包分析了一下这个app,找到了视频的下载链接,帮他解决了这个小问题 ...
- 利用scrapy,短短50行代码下载整站短视频
一.撕开爬虫的面纱--爬虫是什么,它能做什么 爬虫是什么 爬虫就是一段能够从互联网上高效获取数据的程序. 我们每天都在从互联网上获取数据.当打开浏览器访问百度的时候,我们就从百度的服务器获取数据,当拿 ...
- python爬虫入门:在命令行搜索并下载小说
文章目录 前言 一.生成小说章节目录 1.具体流程 2.效果演示 二.小说下载 1.具体流程 2.效果演示 总结 前言 本篇文章以笔趣阁为例,链接:https://www.biquge7.com,实现 ...
- (已加马赛克)10 行代码判定色*情*图片——Python 也可以系列之二
10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...
- python跑酷游戏源码_HTML5游戏实战(1):50行代码实现正面跑酷游戏
前段时间看到一个"熊来了"的HTML5跑酷游戏,它是一个典型的正面2D跑酷游戏,这里借用它来介绍一下用Gamebuilder+CanTK开发正面跑酷游戏的基本方法. CanTK(C ...
- (已加马赛克)10 行代码判定色 情 图片——Python 也可以系列之二
10 行代码判定色*情*图片--Python 也可以系列之二 作者:赖勇浩(http://blog.csdn.net/lanphaday) 致编辑:我已经给图片打上马赛克了,别再删除了啊,我这是纯技术 ...
- 50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误.微信公众号引流工具.html,python学习小项目.艺术签名设计微信小程序,前端学习小项目有趣的项目
50行代码实现的艺术签名设计微信小程序,轻松对接公众号,涨粉神器,学习赚钱两不误 先看效果 这个小程序实现艺术签名设计的功能 对接到公众号之后,相当于给你的公众号添加了一个功能,别人关注公众号后,可以 ...
- 【Python】50行代码带你背单词,四六级冲冲冲
前言 很快就要到六月份的英语四级考试了,你们都准备好了吗?听说很多小伙伴还在背单词,在我看来,背单 词真的是很难坚持的一件事.今天,就用Python给大家分享一个背单词神奇,一边学还能一边玩,这可 把 ...
- python实现50行代码_50行代码实现python计算器主要功能
实现功能:计算带有括号和四则运算的式子 3*( 4+ 50 )-(( 100 + 40 )*5/2- 3*2* 2/4+9)*((( 3 + 4)-4)-4) 基本思路:使用正则表达式提取出每一层小括 ...
- python pyquery不规则数据的抓取_爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网...
爬虫神器之PyQuery实用教程(二),50行代码爬取穷游网 前言 上篇文章 PyQuery (一) 回顾.今天来介绍具体 PyQuery 的使用方法. 穷游网目标与分析 开始之前,按照之前的套路一步 ...
最新文章
- Dedicated and Shared Server
- python中def fun(a、b=200)_python 基础 函数
- android 文件读写
- 弹性理论法研究桩基受力计算公式_竖向荷载下群桩的承载力分析
- mysql取整,小数点处理函数floor(), round()
- 6章:常用工具类以及函数
- Java并发(一)——线程安全的容器(上)
- [转载] 七龙珠第一部——第019话 天下第一武道会开始
- OpenNETCF Smart Device Framework 2.1 发布
- input type类型_005 类型转换,我的存款是负值
- 目前最全的动画名称中英对照表
- PHP 开发杂谈:对后端开发的思考
- 拷贝出师表到另一个文件,恢复顺序
- [转]VC知识库文章 - 在MFC中用正则表达式对窗体进行有效性验证
- uniapp定位和选择城市
- 题目58 工厂流水线调度(ok)
- 2020世界人工智能大会 -- 落地AI,赋能未来
- @keyup.enter事件
- 龙年新作:水印文字添加工具源码摘要
- 小米4C刷openwrt
热门文章
- 关于a:hover span和a span:hover的区别
- admob 服务器验证_Admob广告植入过程中遇到的错误汇总
- 用力过猛的“中产阶级教育
- 算法、数据结构经典资料简介(TAOCP、Robert Sedgewick、算法导论、编程珠玑)
- 分享一个编程学习网站——并发编程网
- 如何让工作更有活力?社科院与杜兰大学金融管理硕士项目帮你充电续航
- html 倒计时毫秒,实现毫秒级倒计时
- 进程管理软件SysCheck使用指南
- linux进程管理工具:supervisor
- Go语言Web开发Revel框架搭建