单章小说的爬取模板

接上章,上章写了如何解决爬取到的内容乱码的问题,本章主要是写一个爬取单章小说的模板

完整代码如下:

# 导入requests 包
import requests

# 导入解析模块
import parsel


'''
爬取网页内容
'''
# 发送请求
x = requests.get('https://www.513gp.org/book/5105/235222.html')
x.encoding = 'gbk'

# 返回网页内容
print(x.text)


'''
解析数据
'''
# 用parsel的Selector这个类来声明一个selector对象,传入了网页爬到的内容
selector = parsel.Selector(x.text)
# 使用css方法提取特定的内容,提取方法为:选中网页中要提取的文本,复制对应的selector,提取文本需要再加上::text
# 提取标题
# get方法:获取第一个Selector对象里的内容
title = selector.css('body > div.chaptertitle.clearfix > h1::text').get()
# 提取内容
# getall方法:依次获取每个Selector对象对应的结果
content_list =selector.css('#BookText::text').getall()
'''
join()方法
描述:用于将序列中的元素以指定的字符连接生成一个新的字符串
语法:str.join(sequence)
参数:sequence--要连接的元素序列
返回值:返回通过指定字符连接序列中元素生成的新字符串
'''
# 转成字符串
content = ''.join(content_list)
# 打印文本内容
print(content)


'''
保存数据
1、路径前的 fr 的含义:
r:把字符串转变为非转义的原始字符串
f:在字符串前加 f 是把字符串格式化,使可以在字符串中直接使用变量。
例:
a = 'python'
print(f'hello {a})
结果:hello python

2、mode=:保存方式 
w 写入数据(会覆盖) a 追加保存(不会覆盖)

3、encoding=:文件的编码格式
'''
with open(fr'D:\2\python\pycharm\PycharmProjects\爬虫\结果\{title}.txt', mode='w', encoding='utf-8') as f:
    # 写入文件的标题
    f.write(title)
    f.write('\n')
    # 写入内容
    f.write(content)
    f.write('\n')

主要分为了3个部分

1、爬取网页内容

使用上一章学习到的requests模块爬取网页的内容,url地址为想爬取的网页的网址;编码格式为 gbk ;然后打印从这个网页上爬取到的内容

# 发送请求
x = requests.get('https://www.513gp.org/book/5105/235222.html')
x.encoding = 'gbk'

# 返回网页内容
print(x.text)

2、数据解析

从网页上爬取的的内容其实看不太懂,这个时候就需要使用 parsel 模块对网页内容进行解析

首先,用parsel的Selector这个类来声明一个selector对象,传入了网页爬到的内容

然后提取标题,使用css方法

提取内容,使用css方法。注意要使用getall方法,否则提取到的就只有一个段落而不是全篇了

提取到的内容连在一起,分不清段落,使用join()方法重新生成字符串

打印文本

# 用parsel的Selector这个类来声明一个selector对象,传入了网页爬到的内容
selector = parsel.Selector(x.text)
# 使用css方法提取特定的内容,提取方法为:选中网页中要提取的文本,复制对应的selector,提取文本需要再加上::text
# 提取标题
# get方法:获取第一个Selector对象里的内容
title = selector.css('body > div.chaptertitle.clearfix > h1::text').get()
# 提取内容
# getall方法:依次获取每个Selector对象对应的结果
content_list =selector.css('#BookText::text').getall()
'''
join()方法
描述:用于将序列中的元素以指定的字符连接生成一个新的字符串
语法:str.join(sequence)
参数:sequence--要连接的元素序列
返回值:返回通过指定字符连接序列中元素生成的新字符串
'''
# 转成字符串
content = ''.join(content_list)
# 打印文本内容
print(content)

3、保存数据

将文本保存在指定的路径下。

路径可分为相对路径和绝对路径

相对路径:代码在哪就保存在哪

with open(title + '.txt', mode='w', encoding='utf-8') as f:
# with open(fr'D:\2\python\pycharm\PycharmProjects\爬虫\结果\{title}.txt', mode='w', encoding='utf-8') as f:
    # 写入文件的标题
    f.write(title)
    f.write('\n')
    # 写入内容
    f.write(content)
    f.write('\n')

绝对路径:指定哪个盘 哪个文件夹

# with open(title + '.txt', mode='w', encoding='utf-8') as f:
with open(fr'D:\2\python\pycharm\PycharmProjects\爬虫\结果\{title}.txt', mode='w', encoding='utf-8') as f:
    # 写入文件的标题
    f.write(title)
    f.write('\n')
    # 写入内容
    f.write(content)
    f.write('\n')

 

'''
保存数据
1、路径前的 fr 的含义:
r:把字符串转变为非转义的原始字符串
f:在字符串前加 f 是把字符串格式化,使可以在字符串中直接使用变量。
例:
a = 'python'
print(f'hello {a})
结果:hello python

2、mode=:保存方式 
w 写入数据(会覆盖) a 追加保存(不会覆盖)

3、encoding=:文件的编码格式
'''
with open(fr'D:\2\python\pycharm\PycharmProjects\爬虫\结果\{title}.txt', mode='w', encoding='utf-8') as f:
    # 写入文件的标题
    f.write(title)
    f.write('\n')
    # 写入内容
    f.write(content)
    f.write('\n')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值