?wx_fmt=gif&wxfrom=5&wx_lazy=1

本文来自作者 孙亖  GitChat 上分享 「如何用 Python 爬取网页制作电子书」,阅读原文查看交流实录。

文末高能

编辑 | 哈比

0 前言

有人爬取数据分析黄金周旅游景点,有人爬取数据分析相亲,有人大数据分析双十一,连小学生写论文都用上了大数据。

我们每个人每天都在往网上通过微信、微博、淘宝等上传我们的个人信息,现在就连我们的钱都是放在网上,以后到强人工智能,我们连决策都要依靠网络。网上的数据就是资源和宝藏,我们需要一把铲子来挖掘它。

最近,AI 的兴起让 Python 火了一把。实际上 Python 拥有庞大的第三方支持,生态系统非常完整,可以适用各种场景和行业。

这次,我们准备通过 Python 学习爬虫的开发,既简单有趣,而且是数据采集重要一环。同时脱离应用谈技术就是耍流氓,通过制作电子书学习数据的收集与整理,即能学到东西又有实用价值。

我们将通过爬取网页信息这个很小的应用场景来体会数据预处理的思想,并从中学习了解数据处理中抓取、处理、分组、存储等过程的实现。

我这次分享主要分为以下几个部分:

Python 语法:通过分享掌握简单的 Python 开发语法和思路,侧重于后面爬虫开发的需要用的内容;Scrapy 爬虫开发:通过分享了解基本的 Scrapy 开发,并实现从网络爬取数据,使用 Sigil 制作 epub 电子书。

最后,我希望通过分享,让更多人能够入门并喜欢上 Python 开发,掌握 Scrapy 爬虫开发的思路和方法。

1 Python 开发

1.1 Windows 下环境安装

熟悉 Windows 的安装 Python 不难,首先官网下载:https://www.python.org/downloads/。

有两个版本,根据需要选择自己的版本,现在越来越多的库开始支持 3,所以建议下载 3,这里我们以 2 为例。

双击下载的安装文件,一路 Next 即可,但是要注意勾选 __pip__ 和 Add python.exe to Path

?wx_fmt=png

pip 是 Python 生态体系里面的包管理工具,很多第三方库可以通过它方便的管理。

安装 Finish 之后,打开命令行窗口,输入 Python:

?wx_fmt=png

如果出现这个界面说明安装成功了,如果出现下面的情况:

‘python’ 不是内部或外部命令,也不是可运行的程序或批处理文件。

需要把 python.exe 的目录添加到 path 中,一般是 C:/Python27。

1.2 Python 之 HelloWorld

目前我所接触过的所有编程语言都只要掌握三个内容就可以了:就是输入、处理、输出。我们已经安装好了 Python,可以来一个最俗套的程序。

首先我们打开 windows 的控制台,然后输入 python 回车,然后输入如下代码:

print 'Hello world!'

我就问你俗不俗,好了,看结果:

?wx_fmt=png

根据我上面的说法,这个程序的输入就是 Hello World 字符串,处理使系统内部的输出处理,输出结果就是 ‘Hello World’。

我们还可以把代码写在文件里面:

#!/usr/bin/env python # -*- coding: utf-8 -*-print 'Hello World!'

执行效果:

?wx_fmt=png

我们说这个不是单纯的秀一下,以前没有用户界面的时候 print 可以作为人机交互用途,现在多数是用于调试,可以在程序运行的时候快速的输出程序结果或者过程结果。

1.3 做菜与编程

现在有个很有意思的说法:生数据(原始数据)就是没有处理过的数据,熟数据(Cooked Data)是指原始数据经过加工处理后的数据,处理包括解压缩、组织,或者是分析和提出,以备将来使用。

这就像做菜生菜是输入,菜谱是程序,洗、切、烹饪等处理是程序执行过程,最后输出的熟菜。但不管生菜、熟菜都是菜,或者都是物质。

准备食材

在程序世界里的物质组成就是数据,就像有萝卜白菜等不同的品种一样,数据也有不同的类型。我目前所接触到的数据类型主要有以下几种:

  • 物理类:数据在物理内存中的表达存储方式;

    • 字节

  • 数据类:数据类中的具体类型代表了不同精度和内存中不同的存储结构;

    • 整数

    • 浮点数

    • 长整型

    • 双精度

  • 字符类:就是文本字符相关的数据类型;

    • 字符

    • 字符串

  • 逻辑类:就是逻辑真与逻辑假;

    • 布尔值

  • 复合类:由各基本的数据类型按照一定的结构组合而成的数据;

    • 结构体

    • 集合

    • 字典

    • 列表

    • 序列

    • Hash 表

    • ……

这里我强调几点:

  • 首先,这个分类不是某种语言特有,目前大多数编程语言都差不多,你理解这个思想就把自己的编程能力扩展了。

  • 其次,它不需要专门记忆,编程是程序性的知识,运用的知识,是一种技能,你要做什么菜,你来这个分类查查需要什么原材料,再去具体研究,慢慢就会了,不做你记住了也没用。

  • 用多深,研究多深,不用就别研究浪费时间。比如说,我们一般性应用不会去考虑数据的内存模型,但是涉及到精度、性能或者边界值时我们就需要小心,研究得深一些。

器皿

食材已准备好了,可以下锅,可锅在哪里,你不能放在手里加工。程序里我们用变量、常量来盛各种数据,还有个作用域的问题,严格的厨房红案和白案是分开的,有时候砧板是不能互用的。

  • 空值:四大皆空,什么也不是,不是 0,不是长度为 0 的字符串,不是 false,什么都不是;

  • 变量:学过数学的人都应该有这个概念,反正差不多;

  • 常量:固定不变的量,比如说 π。

烹饪手法

刚查了下,我大天朝常用的烹饪手法多达 20 多种,我归纳了一下,编程大概就那么几种:

  • 数值计算——加减乘除、位移等;

  • 逻辑计算——逻辑真假判断;

  • 过程计算——循环、嵌套、递归等;

  • 数据处理——字符串、对象的操作。

菜谱与炒菜

菜都准备好了,下锅怎么炒,全靠菜谱,它就是程序,而我们按照菜谱炒菜这个过程就是程序的执行。

Python 或任何一种编程语言都是博大精深,同时又是一种技能,不可能在使用之前完全掌握,也没必要。

我们需要知道的是我们想吃什么(程序要输出什么),然后再去菜市场买时才找菜谱(搜索引擎查资料),最后按照我们的需求加工(编程)

1.4 Python 简单实践

首先我们来写三个 Python 文件:

hello.py
——事情的处理有落点,程序执行有入口,例如:main,这个文件可以看作程序的入口。

#!/usr/bin/env python # -*- coding: utf-8 -*- import pkg print 'Hello World!' pkg.test() p = pkg.Person("Mike", 23) p.showInfo()

pkg.py
——程序可以分块编写,这样层次更分明,易于理解和维护,我们在 pkg.py 中编写一部分功能,作为演示模块。

#!/usr/bin/env python # -*- coding: utf-8 -*-def test():print "Here is pkg's test"class Person(object):def __init__(self, name, age):self.name = nameself.age = agepassdef showInfo(self):print self.nameprint self.age

init.py
——这是一个空文件,也可以写代码,表明当前路径是包。

接下来,我们来运行一下:

python hello.py

显示结果如下:

Hello World!

Here is pkg’s test

Mike

23

我们运行了 hello.py 文件,然后 hello.py 导入了包 pkg;包 pkg 定义了一个方法和一个类,我们在 hello.py 文件里面调用了外部的方法和类。

2 使用 Scrapy 抓取电子书

2.1 写在爬取数据之前

虽然我们这里的数据都是从公开的网络获取,但也不能确定其版权问题,因此获取的数据仅用于编程练习,严禁分享或用于其他用途。

好了,现在我们找一个在线看书的网站,找一本书把它下载到本地。首先,我们准备下载工具,就是 Python 的爬虫框架 Scrapy。

2.2 Scrapy 安装

安装完 Python 后可以用以下的命令按照 Scrapy,有些版本的 Python 没有带 pip 需要手动安装。

pip install scrapy

pip 是 Python 的包管理器,大量的第三方包或者说功能可以通过这个工具来管理,所谓包就是模块化的功能集合,基本的技术参考实践里面的包。

我安装成功显示如下信息:

> Collecting scrapyDownloading Scrapy-1.5.0-py2.py3-none-any.whl (251kB)100% |████████████████████████████████| 256kB 181kB/s Collecting service-identity (from scrapy)Downloading service_identity-17.0.0-py2.py3-none-any.whl Collecting parsel>=1.1 (from scrapy)Downloading parsel-1.3.1-py2.py3-none-any.whl Collecting six>=1.5.2 (from scrapy)Downloading six-1.11.0-py2.py3-none-any.whl Collecting w3lib>=1.17.0 (from scrapy)Downloading w3lib-1.18.0-py2.py3-none-any.whl Collecting lxml (from scrapy)Downloading lxml-4.1.1-cp27-cp27m-win_amd64.whl (3.6MB)100% |████████████████████████████████| 3.6MB 142kB/s Collecting Twisted>=13.1.0 (from scrapy)Downloading Twisted-17.9.0-cp27-cp27m-win_amd64.whl (3.2MB)100% |████████████████████████████████| 3.2MB 169kB/s Collecting pyOpenSSL (from scrapy)Downloading pyOpenSSL-17.5.0-py2.py3-none-any.whl (53kB)100% |████████████████████████████████| 61kB 313kB/s Collecting PyDispatcher>=2.0.5 (from scrapy)Downloading PyDispatcher-2.0.5.tar.gz Collecting queuelib (from scrapy)Downloading queuelib-1.4.2-py2.py3-none-any.whl Collecting cssselect>=0.9 (from scrapy)Downloading cssselect-1.0.3-py2.py3-none-any.whl Collecting pyasn1 (from service-identity->scrapy)Downloading pyasn1-0.4.2-py2.py3-none-any.whl (71kB)100% |████████████████████████████████| 71kB 328kB/s Collecting attrs (from service-identity->scrapy)Downloading attrs-17.4.0-py2.py3-none-any.whl Collecting pyasn1-modules (from service-identity->scrapy)Downloading pyasn1_modules-0.2.1-py2.py3-none-any.whl (60kB)100% |████████████████████████████████| 61kB 347kB/s Collecting hyperlink>=17.1.1 (from Twisted>=13.1.0->scrapy)Downloading hyperlink-17.3.1-py2.py3-none-any.whl (73kB)100% |████████████████████████████████| 81kB 407kB/s Collecting Automat>=0.3.0 (from Twisted>=13.1.0->scrapy)Downloading Automat-0.6.0-py2.py3-none-any.whl Collecting constantly>=15.1 (from Twisted>=13.1.0->scrapy)Downloading constantly-15.1.0-py2.py3-none-any.whl Collecting zope.interface>=3.6.0 (from Twisted>=13.1.0->scrapy)Downloading zope.interface-4.4.3-cp27-cp27m-win_amd64.whl (137kB)100% |████████████████████████████████| 143kB 279kB/s Collecting incremental>=16.10.1 (from Twisted>=13.1.0->scrapy)Downloading incremental-17.5.0-py2.py3-none-any.whl Collecting cryptography>=2.1.4 (from pyOpenSSL->scrapy)Downloading cryptography-2.1.4-cp27-cp27m-win_amd64.whl (1.3MB)100% |████████████████████████████████| 1.3MB 220kB/s Requirement already satisfied: setuptools in c:\python27\lib\site-packages (from zope.interface>=3.6.0->Twisted>=13.1.0->scrapy) Collecting idna>=2.1 (from cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading idna-2.6-py2.py3-none-any.whl (56kB)100% |████████████████████████████████| 61kB 311kB/s Collecting cffi>=1.7; platform_python_implementation != "PyPy" (from cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading cffi-1.11.2-cp27-cp27m-win_amd64.whl (163kB)100% |████████████████████████████████| 163kB 183kB/s Collecting enum34; python_version < "3" (from cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading enum34-1.1.6-py2-none-any.whl Collecting asn1crypto>=0.21.0 (from cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading asn1crypto-0.24.0-py2.py3-none-any.whl (101kB)100% |████████████████████████████████| 102kB 194kB/s Collecting ipaddress; python_version < "3" (from cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading ipaddress-1.0.19.tar.gz Collecting pycparser (from cffi>=1.7; platform_python_implementation != "PyPy"->cryptography>=2.1.4->pyOpenSSL->scrapy)Downloading pycparser-2.18.tar.gz (245kB)100% |████████████████████████████████| 256kB 264kB/s Installing collected packages: pyasn1, six, idna, pycparser, cffi, enum34, asn1crypto, ipaddress, cryptography, pyOpenSSL, attrs, pyasn1-modules, service-identity, w3lib, cssselect, lxml, parsel, hyperlink, Automat, constantly, zope.interface, incremental, Twisted, PyDispatcher, queuelib, scrapyRunning setup.py install for pycparser ... doneRunning setup.py install for ipaddress ... doneRunning setup.py install for PyDispatcher ... done Successfully installed Automat-0.6.0 PyDispatcher-2.0.5 Twisted-17.9.0 asn1crypto-0.24.0 attrs-17.4.0 cffi-1.11.2 constantly-15.1.0 cryptography-2.1.4 cssselect-1.0.3 enum34-1.1.6 hyperlink-17.3.1 idna-2.6 incremental-17.5.0 ipaddress-1.0.19 lxml-4.1.1 parsel-1.3.1 pyOpenSSL-17.5.0 pyasn1-0.4.2 pyasn1-modules-0.2.1 pycparser-2.18 queuelib-1.4.2 scrapy-1.5.0 service-identity-17.0.0 six-1.11.0 w3lib-1.18.0 zope.interface-4.4.3

2.3 新建 Scrapy 爬虫项目

Scrapy 是 Python 程序,同时也是一套框架,提供了一系列工具来简化开发,因此我们按照 Scrapy 的模式来开发,先新建一个 Scrapy 项目,如下:

scrapy startproject ebook

Scrapy 项目包含一些基础框架代码,我们在此基础上开发,目录结构类似下图:

?wx_fmt=png

2.4 新建 Scrapy 爬虫

这时,Scrapy 还不知道我们要爬取什么数据,所以我们要用 Scrapy 工具新建一个爬虫,命令如下:

scrapy genspider example example.com

下面实操,我们在起点中文网找一篇免费小说的完本,这里选择是《修真小主播》。

我们就在前面建立的 Scrapy 项目 ebook 下新建一个爬虫,命令如下:

cd ebook scrapy genspider xzxzb qidian.com

执行成功之后,在项目的 spider 目录下就多了一个 xzxzb.py 的文件。

2.5 爬虫思路

怎么抓取数据,首先我们要看从哪里取,打开《修真小主播》的页面,如下:

?wx_fmt=png

有个目录页签,点击这个页签可以看见目录,使用浏览器的元素查看工具,我们可以定位到目录和每一章节的相关信息,根据这些信息我们就可以爬取到具体的页面:

?wx_fmt=png

2.6 获取章节地址

现在我们打开 xzxzb.py 文件,就是我们刚刚创建的爬虫:

# -*- coding: utf-8 -*- import scrapyclass XzxzbSpider(scrapy.Spider):name = 'xzxzb'allowed_domains = ['qidian.com']start_urls = ['http://qidian.com/']def parse(self, response):pass

start_urls 就是目录地址,爬虫会自动爬这个地址,然后结果就在下面的 parse 中处理。现在我们就来编写代码处理目录数据,首先爬取小说的主页,获取目录列表:

   def parse(self, response):pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')for page in pages:url = page.xpath('./child::a/attribute::href').extract()print urlpass

获取网页中的 DOM 数据有两种方式,一种是使用 CSS 选择子,另外一种是使用 XML 的 xPath 查询。

这里我们用 xPath,相关知识请自行学习,看以上代码,首先我们通过 ID 获取目录框,获取类 cf 获取目录列表:

pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')

接着,遍历子节点,并查询 li 标签内 a 子节点的 href 属性,最后打印出来:

for page in pages:url = page.xpath('./child::a/attribute::href').extract()print url

这样,可以说爬取章节路径的小爬虫就写好了,使用如下命令运行 xzxzb 爬虫查看结果:

scrapy crawl xzxzb

这个时候我们的程序可能会出现如下错误:


ImportError: No module named win32api

运行下面的语句即可:

pip install pypiwin32

屏幕输出如下:

> ... > [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/wrrduN6auIlOBDFlr9quQA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Jh-J5usgyW62uJcMpdsVgA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5YXHdBvg1ImaGfXRMrUjdw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/fw5EBeKat-76ItTi_ILQ7A2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/KsFh5VutI6PwrjbX3WA1AA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/-mpKJ01gPp1p4rPq4Fd4KQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MlZSeYOQxSPM5j8_3RRvhw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/5TXZqGvLi-3M5j8_3RRvhw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/sysD-JPiugv4p8iEw--PPw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/xGckZ01j64-aGfXRMrUjdw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/72lHOJcgmedOBDFlr9quQA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/cZkHZEYnPl22uJcMpdsVgA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/vkNh45O3JsRMs5iq0oQwLQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ge4m8RjJyPH6ItTi_ILQ7A2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Y33PuxrKT4dp4rPq4Fd4KQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/MDQznkrkiyXwrjbX3WA1AA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/A2r-YTzWCYj6ItTi_ILQ7A2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Ng9CuONRKei2uJcMpdsVgA2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/Q_AxWAge14pMs5iq0oQwLQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/ZJshvAu8TVVp4rPq4Fd4KQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/hYD2P4c5UB2aGfXRMrUjdw2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/muxiWf_jpqTgn4SMoDUcDQ2'] [u'//read.qidian.com/chapter/MuRzJqCY6MyoLoerY3WDhg2/OQQ5jbADJjVp4rPq4Fd4KQ2'] > ...

爬取章节路径的小爬虫就写好了,但我们的目的不仅于此,我们接下来使用这些地址来抓取内容:

2.7 章节页面分析

我们接下来分析一下章节页面,从章节页面我们要获取标题和内容。

如果说章节信息爬取使用的 parser 方法,那么我们可以给每一个章节内容的爬取写一个方法,比如:parser_chapter,先看看章节页面的具体情况:

?wx_fmt=png

可以看到,章节的整个内容在类名为 main-text-wrap 的 div 标签内,标题是其中类名为j_chapterName的 h3 标签,具体内容是类名为read-content j_readContent的 div 标签。

试着把这些内容打印出来:

# -*- coding: utf-8 -*- import scrapyclass XzxzbSpider(scrapy.Spider):name = 'xzxzb'allowed_domains = ['qidian.com']start_urls = ['https://book.qidian.com/info/1010780117/']def parse(self, response):pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')for page in pages:url = page.xpath('./child::a/attribute::href').extract_first()# yield scrapy.Request('https:' + url, callback=self.parse_chapter)yield response.follow(url, callback=self.parse_chapter)passdef parse_chapter(self, response):title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()print title# print contentpass

上一步,我们获取到了一个章节地址,从输出内容来看是相对路径,因此我们使用了yield response.follow(url, callback=self.parse_chapter),第二个参数是一个回调函数,用来处理章节页面,爬取到章节页面后我们解析页面和标题保存到文件。

next_page = response.urljoin(url) yield scrapy.Request(next_page, callback=self.parse_chapter)

scrapy.Request 不同于使用 response.follow,需要通过相对路径构造出绝对路径,response.follow 可以直接使用相对路径,因此就不需要调用 urljoin 方法了。

注意,response.follow 直接返回一个 Request 实例,可以直接通过 yield 进行返回。

数据获取了之后是存储,由于我们要的是 html 页面,因此,我们就按标题存储即可,代码如下:

   def parse_chapter(self, response):title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()# print title# print contentfilename = './down/%s.html' % (title)with open(filename, 'wb') as f:f.write(content.encode('utf-8'))pass

至此,我们已经成功的抓取到了我们的数据,但还不能直接使用,需要整理和优化。

2.8 数据整理

首先,我们爬取下来的章节页面排序不是很好,如果人工去排需要太多的时间精力;另外,章节内容包含许多额外的东西,阅读体验不好,我们需要优化内容的排版和可读性。

我们先给章节排个序,因为目录中的章节列表是按顺序排列的,所以只需要给下载页面名称添加一个顺序号就行了。

可是保存网页的代码是回调函数,顺序只是在处理目录的时候能确定,回调函数怎么能知道顺序呢?因此,我们要告诉回调函数它处理章节的顺序号,我们要给回调函数传参,修改后的代码是这样的:

   def parse(self, response):pages = response.xpath('//div[@id="j-catalogWrap"]//ul[@class="cf"]/li')for page in pages:url = page.xpath('./child::a/attribute::href').extract_first()idx = page.xpath('./attribute::data-rid').extract_first()# yield scrapy.Request('https:' + url, callback=self.parse_chapter)req = response.follow(url, callback=self.parse_chapter)req.meta['idx'] = idxyield reqpassdef parse_chapter(self, response):idx = response.meta['idx']title = response.xpath('//div[@class="main-text-wrap"]//h3[@class="j_chapterName"]/text()').extract_first().strip()content = response.xpath('//div[@class="main-text-wrap"]//div[@class="read-content j_readContent"]').extract_first().strip()# print title# print contentfilename = './down/%s_%s.html' % (idx, title)cnt = '<h1>%s</h1> %s' % (title, content)with open(filename, 'wb') as f:f.write(cnt.encode('utf-8'))pass

不知道大家注意到没有,前面的分析中目录已经提供了一个data_rid可以作为排序号,我们在目录分析页面获取这个序号,然后通过 request 的 meta 传入parse_chapter

parse_chapter中通过 response 的 meta 获取传入的参数,然后文件名中加入这个顺序好完成了排序。另外,Sigil 找那个通过 H1 标签来生成目录,需要目录的话,我们需要给内容添加一个 h1 标签。

还有可读性差的问题,也许我们下载的网页可能会包含一些乱七八糟的东西,我们有很多办法,也可以使用 readbility 等第三方库,这里就不深入了。

3 使用 Sigil 制作电子书

电子书的制作,完全就是工具的应用,非常简单,这里把流程过一下,大家根据兴趣自行深入。

3.1 Sigil 简介

Sigil 是一个多平台的 ePub 电子书编辑器。官方网站:https://sigil-ebook.com/,下载页面在 https://github.com/Sigil-Ebook/Sigil/releases,根据自己的需求下载,安装很简单就不啰嗦了。

3.2 ePub 电子书简介

ePub(Electronic Publication 的缩写,意为:电子出版),是一个自由的开放标准,属于一种可以 “自动重新编排” 的内容;也就是文字内容可以根据阅读设备的特性,以最适于阅读的方式显示。

ePub 档案内部使用了 XHTML 或 DTBook (一种由 DAISY Consortium 提出的 XML 标准)来展现文字、并以 zip 压缩格式来包裹档案内容。EPub 格式中包含了数位版权管理(DRM)相关功能可供选用。

3.3 加载 html 文件

要制作 ePub 电子书,我们首先通过 Sigil 把我们的抓取的文件加载到程序中,在添加文件对话框中我们全选所有文件:

?wx_fmt=png

内容都是 HTML 文件,所以编辑、排版什么的学习下 HTML。

3.4 制作目录

文件中存在 HTML 的 h 标签时,点击生成目录按钮就可以自动生成目录,我们在前面数据抓取时已经自动添加了 h1 标签:

?wx_fmt=png

3.5 制作封面

?wx_fmt=png

封面本质上也是 HTML,可以编辑,也可以从页面爬取,就留给大家自己实现吧。

?wx_fmt=png

3.6 编辑元数据

编辑书名、作者等信息:

?wx_fmt=png

3.6 输出 ePub

编辑完成后保存,取个名字:

?wx_fmt=png

输出可以使用电子书阅读软件打开查看,我用的是 Calibre,还可以方便的转换为相应的格式装到 Kindle 中阅读。

?wx_fmt=png?wx_fmt=png

整个过程就结束了,文章内代码提交到码云:https://goo.gl/yjGizR,接下来自由发挥,请开始你的表演。

参考资料

爬虫 Scrapy 学习系列之一:Tutorial:https://goo.gl/LwqouP。

近期热文

《作为面试官,如何考察工程师的软素质》

《谈谈 Java 内存模型》

《Jenkins 与 GitLab 的自动化构建之旅》

《通往高级 Java 开发的必经之路》

《谈谈源码泄露 · WEB 安全》

《用 LINQ 编写 C# 都有哪些一招必杀的技巧?》

《机器学习面试干货精讲》


?wx_fmt=jpeg

「阅读原文」看交流实录,你想知道的都在这里

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. uniapp 打包后的App使用 new Date().toLocaleDateString() 无法获取 2021/10/29 格式的时间

    使用手机模拟器和真机调试&#xff0c;均能通过new Date().toLocaleDateString()获取到2021/10/29格式的日期。但是在 app 打包后获取到的是 查看了一下 MDN 中对 toLocaleDateString() 方法的解释: 返回该日期对象日期部分的字符串&#xff0c;该字符串格式因不同语言而不同。…...

    2024/4/24 15:31:45
  2. 百度地图支持windows触摸屏手势代码

    //地图在触摸屏上放大缩小 var mapDom document.getElementById(cheliangditu); _offsetHeight mapDom.offsetHeight; _offsetWidth mapDom.offsetWidth; let _touchPoint,_touchStartDistance,_isPinch,_touchEndDistance; document.getElementById("cheliangditu&qu…...

    2024/4/24 15:31:45
  3. 【OpenCV】鼠标操作与响应

    文章目录鼠标操作与响应主要操作点击鼠标拖动移动鼠标抬起完整代码结果展示鼠标操作与响应 主要操作 点击鼠标 捕捉位置 拖动移动 需要使用图片复制来擦除移动过程 鼠标抬起 鼠标复位 完整代码 //参数1表示鼠标事件。 Point sp(-1, -1);//鼠标的开始的位置 Point ep(-…...

    2024/4/24 15:31:43
  4. 开发辅助小工具-01-Ditto(,绿色版)

    Ditto绿色版 平时window复制粘贴只能一条一条弄&#xff0c;这个软件可以保留历史数据&#xff0c;类似于Linux的history命令保存的记录 官网: https://ditto-cp.sourceforge.io/ 但是这个由于是国外的网站&#xff0c;下载特别费劲&#xff0c;所以下面就提供了个绿色版本的…...

    2024/5/4 13:24:18
  5. 11.5K Star,一个开源的 Python 静态类型检查库

    Mypy 是 Python 的静态类型检查库&#xff0c;可以向 Python 程序添加类型注解&#xff0c;并用 mypy 对它们进行静态类型检查&#xff0c;无需运行代码即可发现程序中潜在的错误。还可以加入到 git hook 中&#xff0c;实现在提交代码前自动检查。Mypy 具有强大且易于使用的类…...

    2024/5/4 8:17:01
  6. 申宝资讯市场三连回踩

    三大指数今日集体收跌&#xff0c;沪指、深证成指、创业板指跌幅都在1%左右&#xff0c;日K线齐收三连阴。两市成交额继续维持在一万亿上方&#xff0c;以煤炭为代表的传统周期板块继续大跌。两市下跌股票数量超过3000只&#xff0c;北向资金净买入超71.72亿元。连续下杀是空间…...

    2024/4/24 15:28:47
  7. 16、STM32——DMA详解

    1、DMA简介 DMA(Direct Memory Access) &#xff1a;直接存储器存取&#xff0c;是单片机的一个外设&#xff0c;它的主要功能是用来搬数据&#xff0c;但是不需要占用 CPU&#xff0c;即在传输数据的时候&#xff0c; CPU 可以干其他的事情&#xff0c;好像是多线程一样。数据…...

    2024/4/24 15:28:46
  8. SpringCloudAlibaba:Sentinel热点规则

    SpringCloudAlibaba&#xff1a;Sentinel热点规则 一、介绍 何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据&#xff0c;并对其访问进行限制。比如&#xff1a; 商品 ID 为参数&#xff0c;统计一段时间内最常购买…...

    2024/4/24 15:28:46
  9. XLua 表映射为接口

    Lua脚本 testClass {testInt2,testBooltrue,testString"qwe",testFloat1.2,testFunfunction()print("123456")end }C# 接口 /// <summary> /// 接口中不允许成员变量 使用属性 接收Lua映射 /// 接口属性默认公有 不需要修饰符 /// 接口拷贝是引用拷…...

    2024/4/24 15:28:45
  10. 项目策划书

    文章目录前言一、&#x1f451;目录1.❤️编写目的&#xff1a;2.❤️参考文档&#xff1a;3.❤️名称解释&#xff1a;4.❤️项目背景&#xff1a;4.1设计背景&#xff1a;4.2项目组织&#xff1a;&#x1f6e9;️项目来源:&#x1f6e9;️委托单位:&#x1f6e9;️开发单位:5…...

    2024/5/4 5:51:28
  11. 谈谈 AI ISP (1)开场白

    前几天看到一则新闻“小米成立研究院&#xff0c;攻关AI-ISP芯片”。作为一个十几年的ISP从业人员&#xff0c;也来谈谈AI ISP. 在开始正文以前&#xff0c;突然想到一件事情。十多年前&#xff0c;那时候我还在读研究生&#xff0c;那时候我们做人脸识别&#xff0c;人工设计…...

    2024/4/24 15:28:42
  12. 以rpm包形式升级Linux驱动

    一般在自己适配驱动或者升级驱动时&#xff0c;如果将所有的安装命令以及后续的依赖关系写在一个文件中&#xff0c;那么在现场环境中只需要执行一步命令即可&#xff0c;减少了现场维护人员操作步骤&#xff0c;那么这里想写的一个方法是将升级驱动的步骤打包成rpm包的形式&am…...

    2024/4/24 15:28:41
  13. 区域生长算法

    参考链接 原理 区域生长算法的基本思想是将有相似性质的像素点合并到一起。 对每一个区域要先指定一个种子点作为生长的起点&#xff0c;然后将种子点周围邻域的像素点和种子点进行对比&#xff0c;将具有相似性质的点合并起来继续向外生长&#xff0c;直到没有满足条件的像素…...

    2024/5/4 0:55:05
  14. 诚之和:微博新添一项“爆炸”功能,网友却说是“掩耳盗铃”

    微博增添新功能了&#xff0c;主要涉及个人评论管理。微博客户端10月26日更新后带来了“炸毁评论”功能&#xff0c;用户可以点击评论旁边的小炸弹&#xff0c;或者长按评论后选择“炸毁”选项来对该评论进行炸毁。 “炸毁评论”功能可以将别人的评论从自己的屏幕内“删除”&am…...

    2024/4/24 15:31:50
  15. Qt 调用讯飞翻译

    将appid appkey appsecret替换即可&#xff0c;只是简单的调用&#xff0c;自己封装&#xff0c;源代码https://download.csdn.net/download/yonggandess/35319430https://download.csdn.net/download/yonggandess/35319430 #include "dialog.h" #include "ui_d…...

    2024/4/24 15:31:39
  16. 汞酸性废水治理除汞树脂技术

    项目名称&#xff1a;PVC含汞废水深度处理项目 项目信息&#xff1a; 安徽某氯碱化工企业PVC含汞废水项目&#xff0c;经过前端的硫化沉淀活性炭过滤产水汞含量在50ppb&#xff0c;出水要求做到0.1ppb以下&#xff0c;经过特种除汞螯合树脂&#xff0c;产水做到50ppt以下稳定达…...

    2024/4/24 15:31:22
  17. Rest接口返回日期格式不听话

    spring.jackson.date-format yyyy-MM-dd HH:mm:ss spring.jackson.time-zone GMT8 两个配置搞定&#xff0c;药到病除。...

    2024/5/4 8:08:51
  18. IDEA Edit Configuration解决隐藏了不见了

    IDEA Edit Configuration解决隐藏了不见了 IDEA Edit Configuration解决隐藏了不见了&#xff0c;我的IDEA版本是2020.3.4&#xff0c;某天按了哪个快捷键导致不见了。按AltHome也不显示 通过官网得知&#xff1a;View | Appearance | Navigation Bar是设置Edit Configuratio…...

    2024/4/24 15:31:21
  19. C语言中的选择排序

    文章目录前言一、选择排序1.计算素组元素个数2.选择排序基本逻辑&#xff08;例子是从大到小排列&#xff09;3.具体实现1.外层循环: 决定大回合个数 每个大回合决出一个席位2.内层循环: 决定小回合个数 每个小回合进行1V1大战 实力强的为擂主 直至最后一位挑战者3.两个元素值的…...

    2024/4/24 15:31:23
  20. 2364591-79-5,DBCO-PEG1-amine TFA salt含有DBCO和胺部分的PEG连接剂

    英文名称&#xff1a;DBCO-PEG1-amine TFA salt 中文名称&#xff1a;DBCO-PEG1-胺TFA盐 化学式&#xff1a;C23H25N3O3 分子量&#xff1a;391.5 CAS:2364591-79-5 纯度&#xff1a;98% 储存条件&#xff1a;-20C 溶解性&#xff1a;水、DMSO、DCM、DMF 运输&#xff…...

    2024/4/24 15:31:15

最新文章

  1. Java--方法的使用

    1.1什么是方法 方法顾名思义就是解决问题的办法&#xff0c;在程序员写代码的时候&#xff0c;会遇到很多逻辑结构一样&#xff0c;解决相同问题时&#xff0c;每次都写一样的代码&#xff0c;这会使代码看起来比较绒余&#xff0c;代码量也比较多&#xff0c;为了解决这个问题…...

    2024/5/4 13:36:13
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 【Ubuntu】在 Windows 和 Ubuntu 之间传输文件

    在 Ubuntu 上安装 Samba&#xff1a; sudo apt-get update sudo apt-get install samba在 Ubuntu 上创建一个共享文件夹并设置权限&#xff1a; mkdir /home/your_username/shared sudo chown nobody:nogroup /home/your_username/shared sudo chmod 0777 /home/your_username/…...

    2024/5/4 6:23:58
  4. 【Java】假如把集合体系看作购物中心

    购物中心入口&#xff1a;Java集合框架 “Java集合广场”的购物中心&#xff0c;这是一个集合了各种奇特商店的地方&#xff0c;每个商店都充满了不同的宝藏&#xff08;数据结构&#xff09;。 一楼&#xff1a;基础集合区 - Collection接口 一楼是基础集合区&#xff0c;这…...

    2024/5/2 2:40:27
  5. 【项目新功能开发篇】开发编码

    作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…...

    2024/5/3 2:06:18
  6. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  7. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  8. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  9. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  10. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  11. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  12. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  13. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  14. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  15. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  16. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  17. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  18. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  19. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  20. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  21. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  22. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  23. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  24. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  25. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57