中文编程,用python编写小说网站爬虫

news/2024/5/15 12:10:54/文章来源:https://codeinchinese.blog.csdn.net/article/details/89630352

中文编程,用python编写小说网站爬虫 - 乘风龙王的文章 - 知乎 https://zhuanlan.zhihu.com/p/51309019

我比较喜欢看小说,在网络上看小说一般有2种选择,正版或盗版。正版要钱,盗版要么只能在线阅读,要么下载下来一堆广告。既然学了python就应该写点爬虫练练手,把网络小说爬下来。

本文章需要的python第三方库:

  • requests(获取网页内容)
  • BeautifulSoup4(解析网页内容)

本文章需要读者具备python基础知识,并且我不会对文章中所出现的标准库、第三方库的每个类/函数的作用进行解释,请大家自行查阅资料。我不会对代码中的中文命名进行解释。

寻找目标

由于那些著名的小说网站具有很强的版权意识,防盗版措施做得很好,要把小说内容爬下来不是很容易。所以我选择一个盗版小说网站作为爬虫目标。

嗯,全是盗版。

首先编写代码获取文档内容。

from bs4 import BeautifulSoup   #beautifulsoup4
import requests #requestsdef f创建解析器(a文本):return BeautifulSoup(a文本, "html.parser")
def f获取文档(a地址):v请求 = requests.get(url = a地址)v页面 = v请求.textreturn v页面

打开其中一本小说目录页,记住地址,然后调用 f获取文档 测试代码是否可以运行。

看起来只输出了一半内容,实际上 v文档 已经包含了所有内容,只不过是字符串太长了被print截断而已。

框架

浏览一下小说网站结构,每个小说页面可以分为目录页、正文页。

设计2个接口,分别取名 I小说 和 I章节,I小说 用来提取小说信息和目录,I章节 用来提取章节信息和小说正文。同时定义 I文档,负责从网站上获取文档

class I文档:def __init__(self):self.m文档 = Nonedef f重新载入(self):self.m文档 = f创建解析器(f获取文档(self.fg地址()))def f载入(self):if not self.m文档:self.f重新载入()def fg地址(self):raise NotImplementedError()
class I小说:def __init__(self):I文档.__init__(self)def fe目录(self):"返回(章节名, I章节 对象)"raise NotImplementedError()
class I章节:def __init__(self):I文档.__init__(self)def fg正文(self):"返回字符串"raise NotImplementedError()

提取目录

先查看一下目录页的内容

从图中可以看到,目录最前面有最新章节,目录最后还有重复章节,这些都是需要去除掉的,保留从正文卷开始的章节。

检查网页元素后可知道,目录包含在<div class="listmain">元素中,章节链接藏在<dd>元素里。然后开始写代码:

c地址前缀 = "https://www.xxxx.com"
class C小说(I文档, I小说):c章节列表类名 = "listmain"def __init__(self, a地址):I文档.__init__(self)I小说.__init__(self)self.m地址 = a地址def fg地址(self):return self.m地址def fe目录(self):self.f载入()v目录元素 = self.m文档.find(name = "div", class_ = C小说.c章节列表类名)va章节列表 = v目录元素.find_all(name = "dd")#去除前面的最新章节和最后的重复章节va章节列表 = va章节列表[12:]for v in va章节列表:v链接 = v.a.get("href")   #章节链接v文本 = v.a.string    #章节名if "xxxx" in v文本:    #去除最后的重复章节continueyield v文本, C章节(c地址前缀 + v链接)
class C章节(I文档, I章节):def __init__(self, a地址):I文档.__init__(self)I章节.__init__(self)self.m地址 = a地址def fg地址(self):return self.m地址

提取目录的代码很简单,把上面提到的<div>找出来,再遍历<dd>元素,去除重复项。注意<a>元素的href属性不包含域名,所以创建章节对象时要把地址前面部分加上。

修改一下主函数,运行代码

似乎还有重复章节。我点开一些重复章节看了一下,地址不一样但是内容是一样的,应该是网站录入时出了问题。这个我就不管了。

提取正文

提取完目录后,再看一下正文页。

发现正文最底下有广告链接,这个也要去掉。

分析网页元素,可以知道正文全部包含在<div id="content" class="showtext">这个元素中,只要把这个元素找出来,取字符串,过滤广告就行了。

class C章节(I文档, I章节):c正文标识名 = "content"def __init__(self, a地址):I文档.__init__(self)I章节.__init__(self)self.m地址 = a地址def fg地址(self):return self.m地址def fg正文(self):self.f载入()v正文元素 = self.m文档.find("div", id = C章节.c正文标识名)v正文文本 = ""for v行 in v正文元素.strings:if "xxxx" in v行: #去除广告continuev正文文本 += v行 + "\n"return v正文文本

修改主函数测试代码是否可用

c章节地址 = "https://www.xxxx.com/xxxx/xxxx.html"
def main():v章节 = C章节(c章节地址)print(v章节.fg正文())

从运行结果看,爬到的正文有空行有缩进。虽然没有问题,但是小说最终是要放进阅读器里慢慢看的,并不是所有的阅读器都能正确处理空行和缩进,所以还要在代码里对正文进一步处理。

写一个函数叫 f处理正文,负责处理乱七八糟的空行和缩进

import re
c开头缩进正则 = re.compile(r"^\s")
def f处理正文(a文本):v正文文本 = a文本v正文文本 = c开头缩进正则.sub("\n", v正文文本)  #清除缩进v正文文本 = v正文文本.replace("\xa0", "")   #清除缩进v正文文本 = v正文文本.replace("\u3000", "") #清除缩进v正文文本 = v正文文本.replace("\r", "\n")   #v正文文本 = v正文文本.replace("\n \n", "\n")    #清除多余换行while "\n\n" in v正文文本:v正文文本 = v正文文本.replace("\n\n", "\n") #清除多余换行return v正文文本

然后修改 C章节.fg正文,在返回字符串时做一些处理

return f处理正文(v正文文本)

这样看起来好多了。

保存

确认可以爬到目录和正文之后,接下来就是把正文保存到电脑上。

def f一键下载(a小说, a保存路径):v小说名 = a小说.fg小说名()#路径v路径 = pathlib.Path(a保存路径)v路径 /= v小说名 + ".txt"v文件名 = str(v路径)print("保存到: " + v文件名)v文件 = open(v文件名, "w", encoding = "utf-8")#循环for v章节名, v章节 in v小说.fe目录():v正文 = v章节.fg正文()v文件.write(v章节名 + "\n" + v正文 + "\n")time.sleep(1) #访问太频繁会被服务器阻止访问,所以加个等待print("下载完成")

在实际测试中,网站经常返回503。如果在代码里增加错误重试功能会导致代码变得又臭又长,这里我就不写了。

打开下载下来的文本文件看看。因为网站经常503,只爬了前几章就断掉了,所以没爬完。

结尾

上面的代码可以从一个特定的小说网站下载小说。但是这个网站是盗版小说网站,容易被封掉。或者有各式各样的理由需要从另外一个网站下载小说呢?

由于上面已经写过一些代码了,只需要照葫芦画瓢,重新写个 C小说 和 C章节 就行了。其他什么都不用动。

文章里的代码省略了很多细节,比如HTTP请求头、文档编码处理、异常处理,只保留最重要的爬虫代码。完整代码我发到了github上,见:https://github.com/cflw/cflw_py。

最后请大家以学习研究为目的写爬虫,毕竟爬别人的劳动成果是不好的,请大家多多支持正版。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_821011.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一章:web网站服务(一)

防伪码&#xff1a;拼一个春夏秋冬&#xff0c;赢一个无悔人生第一章&#xff1a;web网站服务&#xff08;一&#xff09; 实验报告1、卸载原来已经存在的httpd注&#xff1a;编译安装针对专业服务器&#xff0c;&#xff0c;避免端口冲突、程序冲突&#xff0c;--nodeps表忽略…

为什么您可能不应该将您的企业网站运出家门

Hosting a website out of your home is generally a bad idea. You certainly can, and if you’re just having fun learning to build a site, you won’t run into many issues. But if you’re serious about starting a business, it’s best to look for online hosting…

chrome浏览器 快捷键_在Google Chrome浏览器中搜索网站的关键字快捷键的完整指南...

chrome浏览器 快捷键Want to make your browsing more efficient in Chrome? Here’s how you can use keyword shortcuts to quickly find info on any site you want. 是否想在Chrome中提高浏览效率&#xff1f; 您可以通过以下方法使用关键字快捷方式在所需的任何网站上快…

百度 添加浏览器url_现在在现代浏览器中是否真的需要在网站URL中添加“ www”?...

百度 添加浏览器urlWhen we visit a website using our favorite browser, we usually just type in the basic part of the URL and ‘arrive’ at the desired location without any problems. But have we reached a point where we can start omitting ‘www’ from the UR…

chrome浏览器拦截广告_如何禁用Chrome的新广告拦截器(在某些网站或所有网站上)...

chrome浏览器拦截广告Google Chrome now has a built-in ad blocker, designed to get rid of the ads that are intrusive or otherwise annoying, but allow ads from sites that follow specific guidelines. If you’re not into the idea of letting your browser control…

asp租用和saas租用_最佳下载,租用和购买有声读物的网站

asp租用和saas租用We recently published a list of websites where you can download free eBooks, or purchase, borrow, or rent eBooks. However, if you would rather listen to your favorite books, here are some websites offering audiobooks you can download, rent…

如何下载在线玩的游戏_在线下载游戏和玩游戏的最佳网站

如何下载在线玩的游戏This week we have a list of fun websites for you. Playing games can help relieve stress and provide a break from work. The following are some websites we found offering free online games, freeware games for download, or games you can pu…

谷歌搜索设置只在某网站搜索_Google助理可以在某一天为您打电话

谷歌搜索设置只在某网站搜索Last week Google demoed Duplex, an AI intended to make phone calls on users’ behalf. Depending on who you ask it’s either mind blowing or dystopic. 上周Google演示了Duplex&#xff0c;这是一种AI&#xff0c;旨在代表用户拨打电话。 根…

如何在Google Chrome浏览器中举报网络钓鱼和恶意网站

Google now makes it much easier to report “suspicious websites” in Chrome. Websites you might want to report include phishing websites, sites hosting malware, and similar bad things. Google will use these reports to block websites for everyone. Google现在…

如何在iPhone和iPad上的Safari中阻止网站

If you’re an iPhone or iPad owner (especially one whose children use your device), you might occasionally want to block access to a specific website. Whether that website is one of adult nature or just something, you don’t want your children to be able t…

编程爱好者网站_读书爱好者的最佳免费网站

编程爱好者网站For many people, reading is less of a hobby and more of a passion. Here are some of the best websites for the book lover in all of us. 对于许多人来说&#xff0c;阅读不再是一种爱好&#xff0c;而是一种激情。 这是我们所有人中对于书迷的最佳网站。…

python爬虫捕鱼网站_古法捕鱼,千年绝技

文&#xff1a;魔力 图&#xff1a;来自网络先民在进入农耕文化之前&#xff0c;打渔狩猎才是他们的谋生手段。经过了千百年&#xff0c;先辈们用经验和智慧创造许多捕鱼的方法。原来先辈创造的捕鱼方法&#xff0c;人们现在已经不再使用。我们现在看到的都是炸鱼、毒鱼、电鱼……

草根站长心酸路:你的网站后来怎么样了?

作为一个站长&#xff0c;下面这些你一定都懂&#xff1a;1、没有资金&#xff0c;连空间都用免费的2、没有技术&#xff0c;连域名都不知道怎样解析3、没有人缘&#xff0c;碰到问题没有人能够帮助4、受人鄙视&#xff0c;有时请教一些所谓的高手&#xff0c;等了48小时后都得…

针对单个网站的渗透思路(精)

本人Web安全初学者&#xff0c;从老师那里获得了一套很完整的针对单一网站的渗透思路今天起的早&#xff0c;就自己试着总结一份&#xff0c;记下来。分享给大家。首先&#xff0c;当我们拿到一个网站的域名或者IP的时候。最先要做的是信息收集。下面着重介绍一下信息收集模块一…

关于为什么同一网站下返回的404页面不一样

今天在上班的时候偶然发现访问同一个网站&#xff0c;不同目录时返回的404页面不同。具体效果如下&#xff1a;情况1&#xff1a;情况2&#xff1a;因为是公司签了保密协议的东西&#xff0c;漏洞还未修复&#xff0c;所以我把IP盖住了&#xff0c;不过这俩确实是同意网站不同路…

ipad和iphone适配_如何在iPhone和iPad上通过搜索打开应用程序,网站和快捷方式

ipad和iphone适配Khamosh PathakKhamosh Pathak If you’re not using the Search feature on your iPhone or iPad, you’re missing out. Instead of using the home screen to launch apps or Safari to open web pages, try using the universal search feature for a much…

sharepoint 2010 网站集定期备份

SharePoint 2010 是为企业用户提供基于微软SharePoint平台的工作流扩展。用户无需编写代码就可以快速、便捷地设计任务表单和业务流程&#xff0c;从而帮助企业用户进一步拓展SharePoint平台的内容管理&#xff0c;内外部协同和企业业务流程管理能力&#xff0c;并可将SharePoi…

响应式网站与自适应网站比较

Adaptive website&#xff08;自适应网站&#xff09; 应对在浏览器的宽度变化不调整网页元素的位置&#xff0c;缩放网页元素&#xff0c;以适应在可用空间。 Responsive website &#xff08;响应式网站&#xff09; 应对在浏览器的宽度变化通过调整网页元…

网站重定向次数过多怎么解决_面试官:CPU飙高及Full GC次数过多怎么排查?

处理过线上问题的同学基本上都会遇到系统突然运行缓慢&#xff0c;CPU 100%&#xff0c;以及Full GC次数过多的问题。当然&#xff0c;这些问题的最终导致的直观现象就是系统运行缓慢&#xff0c;并且有大量的报警。本文主要针对系统运行缓慢这一问题&#xff0c;提供该问题的排…

网站服务器无法打开ie,internet explorer无法打开站点怎么办

Internet explorer无法打开站点原因与解决办法&#xff1a;1.由于网站本身的原因或网站服务器原因可能导致Internet Explorer无法打开解决办法&#xff1a;我们可以尝试多打开几个网页试试。最好打开一些指名网站&#xff0c;如百度、163等门户网站试试。这里需要注意的是&…