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


猜你喜欢
- 一、安装1、安装git Windows 客户端—GitHub Desktop具有git功能的Windows客户端软件有很
- 代码如下:--新增表字段 ALTER procedure [dbo].[sp_Web_TableFiled_Insert] (
- 摘要如何用beautifulsoup4解析各种情况的网页beautifulsoup4的使用关于beautifulsoup4,官网已经讲的很详
- 配置静态文件的两种方式:1 配置单独app下的静态文件,比如某个app下的单独的图片。2 配置整个project下的静态文件,适用于那些和单
- 使用触发器触发器发生什么事情之后或之前,会自动执行某条语句,这就是触发器创建触发器创建触发器要给出的4条关键信息:1.唯一的触发器名2.触发
- # -*- coding: utf-8 -*-import pymysqlimport xlrd# import codecs#连接数据库c
- 在web页面中,图片居左,内容居右排列,是非常常见的效果,它也就是媒体对象,它是一种抽象的样式,可以用来构建不同类型的组件,在bootstr
- 本文实例讲述了Python设计模式之命令模式原理与用法。分享给大家供大家参考,具体如下:命令模式(Command Pattern):将请求封
- 列表生成式语法:[x*x for x in range(0,10)] //列表生成式,这里是中括号//结果 [0, 1, 4, 9, 16,
- 本文主要介绍了webpack编译多页面vue项目的配置问题,分享给大家,具体如下:一般情况下,构建一个vue项目的步骤为: 1,
- 产生原因:先说一下Git和SVN的区别吧,有助于更好的理解这个问题。SVN从服务器上update文件时,如果文件有冲突,SVN会自动帮你me
- 问题1:如果日期中有千年以前的情况(没法用格式化函数),如('2010-11-23','1989-3-7',
- 当我们重装系统,或者是重装数据库之后,当附加数据库之后,发现数据库里面 有用户名,但是在sqlserver里面没有 登陆名例如 先看&nb
- 先上图片词云图需要模板pip install jiebapip install wordcloud还需要安装另外两个东西这两个我也不太懂借鉴
- 本教程为大家分享了mysql5.7.17安装配置方法,供大家参考,具体内容如下操作 全允许精彩专题分享:mysql不同版本安装教程 mysq
- 输入:[1.0000, -1.0000, 3.0000]课本中的标准差计算公式:按照上述公式计算:Numpy中的std计算:import n
- 如果值没有重复的情况,可以先用array_flip()来交换键和值,然后krsort(),最后再array_flip()交换回来,就可以比较
- 比如:Set Connobject=nothing nothing如同英文单词字面意思,没有,没有那个,没有这个,没有东西 Set Conn
- 基于jquery.jsPlumb编写拓扑图,供大家参考,具体内容如下要求:实现公司组织结构拓扑关系,可展开,可收拢;动态数据展示;叶子节点可
- 想不到大家都这么喜欢用python给女朋友挑钻石,所以我又写了个续。如果看过之前一篇用python挑钻石的文章,那么可以直接从箱线图开始读。