用python爬取小说的总结_用python爬取笔趣阁小说

本文介绍了使用Python爬虫技术抓取笔趣阁网站小说的详细过程,包括获取书名、章节链接、章节内容,以及如何处理和存储这些数据。通过解析HTML并利用requests和lxml库,实现小说的自动化下载。
摘要由CSDN通过智能技术生成

import requests,os

from lxml import html#调用lxml模块和requests模块

url = 'http://www.xbiquge.la/7/7004/'

首先咱们调用模块然后解析这个网页

hl = requests.get(url) # 获取源码

hl = hl.content.decode("utf-8")

先将书名找到保存起来,

可以看到书名是在这个地方,我们可以写代码来获取它

selector = html.fromstring(hl)

list = selector.xpath('//div[@id = "info"]/h1/text()')

name_book = list[0]

htmls_list = []#创建一个空列表来存储所有章节链接

selector = html.fromstring(hl)

html_list = selector.xpath('//div[@id = "list"]/dl/dd/a/@href')#获得链接列表

#将链接与网页网址连接,形成每一章的网址

for i in html_list:

htmls_list.append(url + i)

name_list = selector.xpath('//div[@id = "list"]/dl/dd/a/text()')

打印这两个列表,得到结果如下

我只截取了一部分,可以看到两个列表,分别是章节链接和章节名称。

然后我们就可以通过章节链接到每一章里去获得内容。

通过遍历获取每个章节的链接,然后进入,我们需要在浏览器进入某个章节,找出章节内容的规律。如图

可以看到内容是在

id = "content"下,

所以我们可以写代码来获取这章的内容,这里的函数url传的是我们在上面取的章节链接,我们可以取一个链接来看看

import requests,os

import lxml,html

url = 'http://www.xbiquge.la/7/7004/3246381.html'

txt = ''

hl = requests.get(url) # 获取源码

hl = hl.content.decode("utf-8")

selector = html.fromstring(hl)

txt_list = selector.xpath('//div[@id = "content"]/text()')

for i in txt_list:

i = repr(i).replace(r'\r','').replace(r'\xa0','').replace("'",'')#这里将文章中多余的转义字符删掉,repr函数让字符串中的转义字符不起作用。类似于r

txt += i#将列表中的字符串粘贴在一起,就是我们的文章内容

print(txt)

上面代码的url我直接在浏览器上取了网址,但其实它已经存在于我们的列表中了。打印结果如下

可以看到我们获得了第一章的内容,这就是我们想要的小说内容。现在我们书名,每章链接,章名都有了,接下来就是存储了

存储代码如下

def creat(name_book,chapter,txt):

os.makedirs(name_book,exist_ok=True)

with open(name_book + r'/'+ chapter+'.txt',"w",encoding= "utf-8") as f:

f.write(txt)

我在这里定义了一个函数来存储数据。三个参数分别是书名,章名,还有小说内容。

我们将上面内容全部封装为函数,因为经常要将网址转换为源码,所以我先写转换函数

def zhuanhuan(url):

hl = requests.get(url) # 获取源码

hl = hl.content.decode("utf-8") # 源码变为字符串

return hl

请原谅我英语不太好,用拼音代替

然后就是获取书名的函数

def nbook(url):

hl = zhuanhuan(url)

selector = html.fromstring(hl)

list = selector.xpath('//div[@id = "info"]/h1/text()')

name_book = list[0]

return name_book

获取章节链接和章名

def list_fun(hl,url):

htmls_list = []#创建一个空列表来存储所有章节链接

selector = html.fromstring(hl)

html_list = selector.xpath('//div[@id = "list"]/dl/dd/a/@href')#获得链接列表

#将链接与网页网址连接,形成每一章的网址

for i in html_list:

htmls_list.append(url + i)

name_list = selector.xpath('//div[@id = "list"]/dl/dd/a/text()')

return htmls_list,name_list

获取章节内容

def article(url):

txt= ''

hl = zhuanhuan(url)

selector = html.fromstring(hl)

txt_list = selector.xpath('//div[@id = "content"]/text()')

for i in txt_list:

i = repr(i).replace(r'\r','').replace(r'\xa0','')

txt += i

最后再在一个主函数里将列表遍历,获得每一章的内容存储在本地

def main(url):

hl = zhuanhuan(url)

y = list_fun(hl,url)#接出两个列表

name_book = nbook(url)#书名

for i,j in zip(y[0],y[1]):

txt = article(i)#章节内容

name = j.replace("?",'').replace('*','').replace('/','')#章节名称

creat(name_book,name,txt)

章节名称里替换那些符号是因为windows系统里文件命名是不能有\ / : * ? " < > |

这九个符号的,这个问题曾经也困扰了我好几天,导致我每次爬到某一章就停下来,后来才知道是命名规则的问题,其实可以将这九个符号放在列表中,检查每个章名,然后替换。我这里是直接替换的

所以总的代码就如下图

import requests,os

from lxml import html,etree

#转换网址为源代码

def zhuanhuan(url):

hl = requests.get(url)

hl = hl.content.decode("utf-8")

return hl

#存储网址列表和名称列表(每一章)

def list_fun(hl,url):

htmls_list = []#创建一个空列表来存储所有章节链接

selector = html.fromstring(hl)

html_list = selector.xpath('//div[@id = "list"]/dl/dd/a/@href')#获得链接列表

#将链接与网页网址连接,形成每一章的网址

for i in html_list:

htmls_list.append(url + i)

name_list = selector.xpath('//div[@id = "list"]/dl/dd/a/text()')

return htmls_list,name_list

#获得章节内容

def article(url):

txt= ''

hl = zhuanhuan(url)

selector = html.fromstring(hl)

txt_list = selector.xpath('//div[@id = "content"]/text()')

for i in txt_list:

i = repr(i).replace(r'\r','').replace(r'\xa0','')

txt += i

return txt

#获取书名

def nbook(url):

hl = zhuanhuan(url)

selector = html.fromstring(hl)

list = selector.xpath('//div[@id = "info"]/h1/text()')

name_book = list[0]

return name_book

#创建文件

def creat(name_book,chapter,txt):

os.makedirs(name_book,exist_ok=True)#检查是否有这个文件夹存在,如果没有,则创建

with open(name_book + r'/'+ chapter+'.txt',"w",encoding= "utf-8") as f:

f.write(txt)

def main(url):

hl = zhuanhuan(url)

y = list_fun(hl,url)

name_book = nbook(url)

for i,j in zip(y[0],y[1]):

txt = article(i)

name = j.replace("?",'').replace('*','').replace('/','')

creat(name_book,name,txt)

if __name__ == "__main__":

url ='http://www.xbiquge.la/7/7004/'

main(url)

print("爬取完成!")

看我爬取到的内容,虽然速度有点慢

欢迎大家哦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值