用Python爬取小说

mac2022-06-30  170

朋友们大家好欢迎来到‘和小凌一起学习’公众号来和小凌一起学习。不知道大家有没有这样的困扰。自己爱看的小说很想把它下载到本地,好永远的拥有它。但是我们就是不能把它拥入怀中。今天我向大家介绍一个方法,用这个方法可以将自己的所爱揽入怀中。书说简短,我们直奔主题吧!

大家有没有听说过python网络爬虫啊。它可以将网上的资料用python把它保存到本地。用爬虫下载东西速动快,量大。他最神奇的是可以下载一些我们用普通手法无法下载的一些东西。比如说喜马拉雅。这些我们会在后面讲的。今天我向大家介绍一下如何用爬虫爬取一整本小说。

今天我们就使用python爬取一部小说(http://www.136book.com)。大家听说过大名鼎鼎的三体吗?今天我就带着大家爬取一下三体。进入这个网页之后首先要找到三体这本书,然后点开。 然后右击鼠标点击查看然后点击Network(新页面)然后点击第一个文件再点Headers将request url复制下来并保存。(一会要用)(说明我用的是Chrome游览器)

接下来我们正式讲一下代码的设计:

这里我们一共需要三个函数除去最后的调用的函数这个程序主要的就是前两个函数。

1、第一个函数我们用它来爬取三体这本小说的一个章节

2、第二个函数我们用它来爬取三体这本书的每一个章节的链接(url),然后把这些章节的url传给第一个函数,然后我们就可以爬取整本书了。

思路是不是很简单呢?好了话不多说了,直接上代码,首先看第一个函数:

import requests from pyquery import PyQuery as pq def get_firstpage(base_url): r = requests.get(url = base_url) doc = pq(r.text) p = doc('p') word = p.text() hi = doc("h1") name = hi.text() with open(name+".txt",'a+',encoding = "utf-8") as f: f.write(name+"\n\n"+word)

首先们用import导入两个模块(如果还没有下载的话请打开命令行输入pip in install request/pyquery进行下载)as是一种重命名在这里也就是将PyQuery命名为pq这样我们可以方便我们在后面调用PyQuery方法。 然后我们开始定义函数def为python的关键字他的作用就是定义函数。我们定义一个名字为get_firstpage的函数并传入一个参数。这个参数就是每一章对应的链接(url)

1、我们用requests.get获取每一章节对应的HTML

2、然后我们把每一章节对应的HTML通过pq(PyQuery)方法传给doc

3、然后找p标签及其对应的文字

4、然后用p.text()方法将p标签下的文本选出来

1、用同样的方法我们得到li标签下的章节标题

2、然后用with open的方式打开文件名为章节名的文件注意一定要加上.txt

3、‘a’的意思是原文件如果不存在则创建,如果有则在文件末尾追加。+是在此基础上赋予读写的功能。指定编码方式为“utf-8”重命名为f

4、将章节标题和章节内容写入文件。章节内容和章节标题空两格

这就是第一个函数是不是很简单啊!趁热打铁我们继续看第二个函数:

def get_morepage(genery_url): response = requests.get(genery_url) html = response.text doc1 = pq(html) everyurl = doc1('#book_detail.box1 a') for item in everyurl.items(): base_urls = item.attr.href base_url = ''+base_urls get_firstpage(base_url)

第二个函数和第一个函数方法上基本一样,仍然是使用requests.get得到所有章节的url所在的那个页面。然后通过pq方法将它传给doc1,然后调用doc1方法找到每一个章节对应的url.然后我们用for…in循环输出每一个a标签及其对应的链接。我们用item.attr.href选出每一个链接(url)。接下来这一步十分的重要,它是将每一个url变成字符串类型(我在这可是没少吃苦头啊。)最后直接将每一个url传入第一个函数。

def main(): genery_url = 'http://www.136book.com/santiheji/' base_url = get_morepage(genery_url) main()

调用主函数,运行程序。我们就会得到所有的章节的文本。(genery_url就是我们一开始保存的那个。) 这就是今天我要分享的,如果有错还请你指教。只供学习。如果造成不便请联系我删除

最新回复(0)