Python实现的爬取小说爬虫功能示例
作者:阳光Cherry梦 发布时间:2022-07-14 20:36:16
标签:Python,爬取小说,爬虫
本文实例讲述了Python实现的爬取小说爬虫功能。分享给大家供大家参考,具体如下:
想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单的爬虫,可以爬取爬取各个章节的内容,保存到txt文档中,支持持续更新保存。需要配置一些信息,设置文档保存路径,书名等。写着玩,可能不大规范。
# coding=utf-8
import requests
from lxml import etree
from urllib.parse import urljoin
import re
import os
# 获取页面,并返回解析整理好的文本
def get_page(url):
response = requests.get(url, headers=header)
set_encoding(response)
text = parse_page(response.text)
return text
# 解析页面,将当前页面中的文字筛选出来
def parse_page(html):
title = re.findall('<div class="bookname">\s+<h1>(.+?)</h1>', html)[0]
content = re.findall('div id="content">(.*?)</div>', html, re.S)[0]
content = content.replace('<br />', '').replace(' ', ' ').replace('\r\n\r\n', '\r\n')
content = title + '\r\n' + content + '\r\n\r\n'
return content
# 将文本追加到file_path对应的txt中
def save_page(path, text):
with open(path, 'a', encoding='utf-8') as f:
f.write(text)
# 设置对response得到文本的解析编码为'gbk'
def set_encoding(response):
response.encoding = 'gbk'
# 从配置文件中获取当前保存的链接总数
def get_current_chapters_count(path):
# (1)第一次读配置文件可能没有创建,所以要支持没有文件创建文件的功能(2)如果文件存在,则不能清空,参考https://www.jb51.net/article/158740.htm
with open(path, 'a+') as f:
f.seek(0)
res = f.read()
if res == '':
return 0
else:
return int(res)
# 将保存的链接总数保存到配置文件中
def set_current_chapters_count(path, count):
with open(path, 'w') as f:
f.write(str(count))
# 需要配置的字典
config_dic = dict(start_url='http://www.booktxt.net/2_2220/', # 待下载小说的章节首页
latest_item=9, # 列出的所有章节链接中,前面几个链接为最新章节,一般为9个,爬取时避免与最后部分重复,所以前面9个链接不爬取
bookname='赘婿', # 待下载的小说名
folder_path='D:\\') #保存位置
domain = 'http://www.booktxt.net' # 顶点网域名
if __name__ == '__main__':
chapter_url_list = []
response = requests.get(config_dic['start_url'], headers=header)
set_encoding(response)
html = etree.HTML(response.text)
chapters = html.xpath('//dd')
print('所有链接' + str(len(chapters)))
chapters = chapters[config_dic['latest_item']:] # 前9章为最新章节,后面还会重复,这里去掉
print('不重复有效章节链接' + str(len(chapters)))
folder_path = config_dic['folder_path'] + config_dic['bookname']
if not os.path.exists(folder_path):
os.mkdir(folder_path)
file_path = folder_path + '\\' + config_dic['bookname'] + '.txt'
config_file_path = folder_path + '\\' + 'config.txt'
print('小说存储路径为:' + file_path)
print('配置文件存储路径为:' + config_file_path)
saved_count = get_current_chapters_count(config_file_path) # 获取目前保存的小说中已经包含的章节数
print('当前' + file_path + '中已经保存的章节总数' + str(saved_count))
if saved_count < len(chapters): # 说明有更新
set_current_chapters_count(config_file_path, len(chapters))
print('共更新 ' + str(len(chapters) - saved_count) + ' 章')
for c in chapters[saved_count:]: # 从上次保存的位置开始继续保存
url = c.xpath('a/@href')[0]
url = urljoin(domain, url)
txt = c.xpath('a/text()')[0]
chapter_url_list.append(url)
print(url)
print(txt)
save_page(file_path, get_page(url))
else:
print('小说还没有更新哦')
希望本文所述对大家Python程序设计有所帮助。
来源:https://blog.csdn.net/SunCherryDream/article/details/79070687
0
投稿
猜你喜欢
- 一、前言:Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 T
- 一、前言Python语言近年来人气爆棚。它广泛应用于数据科学,人工智能,以及网络安全问题中,由于代码可读性较强,学习效率较高,吸引了许多非科
- PHP PDO预定义常量以下常量由本扩展模块定义,因此只有在本扩展的模块被编译到PHP中,或者在运行时被动态加载后才有效。注意:PDO使用类
- # 从X和Y中取出相应步长对应的数组并保存至x_data和y_data中x_data = []y_data = []for i in ran
- 1.索引是什么1.1 认识索引先创建一个简单的DataFrame。myList = [['a', 10, 1.1], &nb
- 带参数的二维码对于渠道营销推广来说是很有用的,可以获得多个带不同场景值的二维码,用户扫描后,公众号可以接收到事件推送,可喜的是微信开通了这个
- 阅读目录什么是设计模式单体模式:工厂模式:单例模式观察者模式(发布订阅模式)策略模式模板模式代理模式外观模式设计模式太多了,貌似有23种,其
- 目录一、字符串:二、使用:(1)空字符串和 len( ) 函数(2)转译字符( \ )(3)字符串拼接(4)字符串复制(
- AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数
- 1、Python 条件语句Python 条件语句是通过一条或多条语句的执行结果来决定执行的代码块。Python 编程中 if 语句用于控制程
- python web.py启动https端口 web.py启动https端口需要ssl
- 下载资源hadoop3.0.0spark-2.4.4-bin-without-hadoopwinutils下载(对应hadoop3.0.1的
- 前面使用TensorFlow实现一个完整的Softmax Regression,并在MNIST数据及上取得了约92%的正确率。前文传送门:
- spyder快捷键与python符号化输出spyder快捷键1、F5执行当前文件2、F9执行选中的部分3、Tab预加载以该字母为首的变量名例
- 本文实例讲述了Python实现的排列组合、破解密码算法。分享给大家供大家参考,具体如下:排列组合(破解密码)1.排列itertools.pe
- 对于每个程序开发者来说,调试几乎是必备技能。代码写到一半卡住了,不知道这个函数执行完的返回结果是怎样的?调试一下看看代码运行到一半报错了,什
- 前言随着深度学习的不断发展,从开山之作Alexnet到VGG,网络结构不断优化,但是在VGG网络研究过程中,人们发现随着网络深度的不断提高,
- 时间序列是指在一段时间内发生的任何可量化的度量或事件。尽管这听起来微不足道,但几乎任何东西都可以被认为是时间序列。一个月里你每小时的平均心率
- hello,我是李华同学,最近开始学习爬虫,下面是我实现的一个得到弹幕的代码找一个的URL想要得到一个网站的内容,首先要找到你想要内容的具体
- 前言利用Python的ffmpy库提取视频中的音频。本文提供工具类代码。环境依赖需要安装ffmpy,安装指令:pip install ffm