很多时候想看小说但是在网页上找不到资源,即使找到了资源也没有提供下载,小说当然是下载下来用手机看才爽快啦!

于是程序员的思维出来了,不能下载我就直接用爬虫把各个章节爬下来,存入一个txt文件中,这样,一部小说就爬下来啦。

这一次我爬的书为《黑客》,一本网络小说,相信很多人都看过吧,看看他的代码吧。

代码见如下:

import re
import urllib.request
import time #
root = 'http://www.biquge.com.tw/3_3542/'
# 伪造浏览器
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) ' \
'AppleWebKit/537.36 (KHTML, like Gecko)'
' Chrome/62.0.3202.62 Safari/537.36'} req = urllib.request.Request(url=root, headers=headers) with urllib.request.urlopen(req, timeout=1) as response:
# 大部分的涉及小说的网页都有charset='gbk',所以使用gbk编码
htmls = response.read().decode('gbk') # 匹配所有目录<a href="/3_3542/2020025.html">HK002 上天给了一个做好人的机会</a>
dir_req = re.compile(r'<a href="/3_3542/(\d+?.html)">')
dirs = dir_req.findall(htmls) # 创建文件流,将各个章节读入内存
with open('黑客.txt', 'w') as f:
for dir in dirs:
# 组合链接地址,即各个章节的地址
url = root + dir
# 有的时候访问某个网页会一直得不到响应,程序就会卡到那里,我让他0.6秒后自动超时而抛出异常
while True:
try:
request = urllib.request.Request(url=url, headers=headers)
with urllib.request.urlopen(request, timeout=0.6) as response:
html = response.read().decode('gbk')
break
except:
# 对于抓取到的异常,我让程序停止1.1秒,再循环重新访问这个链接,一旦访问成功,退出循环
time.sleep(1.1) # 匹配文章标题
title_req = re.compile(r'<h1>(.+?)</h1>')
# 匹配文章内容,内容中有换行,所以使flags=re.S
content_req = re.compile(r'<div id="content">(.+?)</div>',re.S,)
# 拿到标题
title = title_req.findall(html)[0]
# 拿到内容
content_test = content_req.findall(html)[0]
# 对内容中的html元素杂质进行替换
strc = content_test.replace('&nbsp;', ' ')
content = strc.replace('<br />', '\n')
print('抓取章节>' + title)
f.write(title + '\n')
f.write(content + '\n\n')

就这样,一本小说就下载下来啦!!!

运行情况见图:

有的时候服务器会因为大量访问而认为你是个机器人就封了你的IP,可以加个随机数,让程序随机停止不同的时间。

如果下载太慢,可以使用多线程,一起下载多个章节

使用Python3爬虫抓取网页来下载小说的更多相关文章

  1. 关于Python3爬虫抓取网页Unicode

    import urllib.requestresponse = urllib.request.urlopen('http://www.baidu.com')html = response.read() ...

  2. Python3简单爬虫抓取网页图片

    现在网上有很多python2写的爬虫抓取网页图片的实例,但不适用新手(新手都使用python3环境,不兼容python2), 所以我用Python3的语法写了一个简单抓取网页图片的实例,希望能够帮助到 ...

  3. PHP利用Curl实现多线程抓取网页和下载文件

    PHP 利用 Curl  可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery ...

  4. 笔趣看小说Python3爬虫抓取

    笔趣看小说Python3爬虫抓取 获取HTML信息 解析HTML信息 整合代码 获取HTML信息 # -*- coding:UTF-8 -*- import requests if __name__ ...

  5. python3爬虫爬取网页思路及常见问题(原创)

    学习爬虫有一段时间了,对遇到的一些问题进行一下总结. 爬虫流程可大致分为:请求网页(request),获取响应(response),解析(parse),保存(save). 下面分别说下这几个过程中可以 ...

  6. 怎么用Python写爬虫抓取网页数据

    机器学习首先面临的一个问题就是准备数据,数据的来源大概有这么几种:公司积累数据,购买,交换,政府机构及企业公开的数据,通过爬虫从网上抓取.本篇介绍怎么写一个爬虫从网上抓取公开的数据. 很多语言都可以写 ...

  7. linux中使用wget模拟爬虫抓取网页

    如何在linux上或者是mac上简单使用爬虫或者是网页下载工具呢,常规的我们肯定是要去下载一个软件下来使用啦,可怜的这两个系统总是找不到相应的工具,这时wget出来帮助你啦!!!wget本身是拿来下载 ...

  8. C# 使用 Abot 实现 爬虫 抓取网页信息 源码下载

    下载地址 ** dome **

  9. win7下用python3.3抓取网上图片并下载到本地

    这篇文章是看了网上有人写了之后,才去试试看的,但是因为我用的是python3.3,与python2.x有些不同,所以就写了下来,以供参考. get_webJpg.py #coding=utf-8 im ...

随机推荐

  1. Sharepoint对List增删改操作

    在sharepoint的开发过程中,用得最多的,就是获取sharepoint的列表数据,以及对其进行一系列的增删改查等操作,这里主要是记录一些常用的操作,通过对象模型方式对数据进行增删改查. 由于sh ...

  2. WordPress让文本小工具支持简码

    WordPress 的 “文本” 小工具是非常常用的,可以添加一些自定义的文本或者 Html 代码.但很多时候,我们需要在文本小工具里使用简码来添加一些更加丰富的内容. 默认情况下,文本小工具是不支持 ...

  3. iOS 提交审核报错 ERROR ITMS-90087解决办法

    ERROR ITMS-: "Unsupported Architectures. The executable for yht.temp_caseinsensitive_rename.app ...

  4. 如何写对kubernetes的模板文件

    kubernetes的模板配置文件随着版本更迭也会有相应的调整,正确配置模板关键字的方式是参考版本发布的doc,如下图 在docs\api-reference下面有不同功能的API目录,如下图 各个A ...

  5. Web开发中Listener、Filter、Servlet的初始化及调用

    我们在使用Spring+SpringMVC开发项目中,web.xml中一般的配置如下: <?xml version="1.0" encoding="UTF-8&qu ...

  6. linux性能调试之iostat

    iostat用来监控调试linux系统的IO性能. 一般用法: iostat -xdct time_interval count [disk] -x:显示扩展统计项,如果不使用-x参数只会打印基本统计 ...

  7. oracle相同SID对外提供多个service_names

    为数据库设置多个服务名(通过SCOPE=both设置,同时修改参数文件) SQL> show parameter service_names; NAME TYPE VALUE --------- ...

  8. 关于VS2017+Qt5.6.3(msvc2015_64)联合编程Qt project settings界面没有ok,cancel选项的问题

    如题,我在项目开发的过程中,需要添加数据库模块SQL,然后发现VS上QT project settings选项中不能修改添加的模块,也就是对应QT creator中的在.pro文件中添加一句:QT + ...

  9. Java中的懒汉式单例与饿汉式单例实例详解

    懒汉式单例:线程非安全,当被调用的时候才创建实例,效率较高 public class LazySingleton { private static LazySingleton lazySingleto ...

  10. java排序算法(三):堆排序

    java排序算法(三)堆排序 堆积排序(HeapSort)是指利用堆积树这种结构所设计的排序算法,可以利用数组的特点快速定位指定索引的元素.堆排序是不稳定的排序方法.辅助空间为O(1).最坏时间复杂度 ...