python 小说爬虫_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('

\s+(.+?)', html)[0]

content = re.findall('div id="content">(.*?)', html, re.S)[0]

content = content.replace('

', '').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程序设计有所帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/573897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维green公式_Green、Gauss、Stokes公式

Green公式的引子设 为平面上的一个区域&#xff0c;如果 内的任意一条封闭曲线都可以不经过 外的点连续地收缩到 中的一点&#xff0c;那么 称为单连通区域&#xff0c;否则为复连通区域。简单地说就是若区域 中没有“洞”&#xff0c;则为单连通区域&#xff0c;否则为复连通区…

关于计算机软件技术基础知识,计算机软件技术基础知识要点.doc

《计算机软件技术基础》知识要点ww心整理 收到的记得粉我哦~~~信息与计算机信息是经过加工的数据。数据是现实世界客观存在的实体或事物的属性值&#xff0c;即指人们听到的事实和看到的景象。信息与数据的关系信息是有一定含义的数据信息是经过加工(处理)后的数据信息是对决策…

java根据pdf模板生成pdf_PDF文件如何生成链接

本文介绍如何将PDF文件在线分享。首先我们打开maipdf的网站&#xff0c;因为市场上做pdf安全分享的网站非常少&#xff0c;所以建议使用maipdf打开网站之后&#xff0c;选择您需要分享的pdf文件进行上传生成后的链接您可以打开看到您的pdf文件&#xff0c;并且在改页面下&#…

在Linux服务器上配置phpMyAdmin

使用php和mysql开发网站的话&#xff0c;phpmyadmin是一个非常友好的mysql管理工具&#xff0c;并且免费开源&#xff0c;国内很多虚拟主机都自带这样的管理工具&#xff0c;配置很简单&#xff0c;接下来在linux服务器上配置phpmyadmin来管理MySQL数据库 首先访问phpmyadmin官…

java 换行分割_用Java开发自己的Kubernetes控制器,想试试吗?

简洁清爽的代码风格应该是大多数工程师所期待的。在工作中笔者常常因为起名字而纠结&#xff0c;夸张点可以说是编程 5 分钟&#xff0c;命名两小时&#xff01;究竟为什么命名成为了工作中的拦路虎。每个公司都有不同的标准&#xff0c;目的是为了保持统一&#xff0c;减少沟通…

检测网络是否稳定的计算机命令,如何查看自己的网络是否稳定

每当我们的网络慢的时候&#xff0c;我们总想知道自己的网速是否稳定&#xff0c;那么怎么查看自己的网络稳定不稳定呢?下面小编就给大家讲解一下操作步骤!查看自己的网络是否稳定的方法首先我们点击电脑左下角的开始图标&#xff0c;然后在弹出的选项中&#xff0c;我们点击“…

python大神的成长之路_我的Python成长之路

Linux命令-文件、磁盘管理—01 1.文件管理 <1>查看文件信息&#xff1a;ls ls是英文单词list的简写&#xff0c;其功能为列出目录的内容&#xff0c;是用户最常用的命令之一&#xff0c;它类似于DOS下的dir命令。 Linux文件或者目录名称最长可以有265个字符&#xff0c;“…

KMP算法(快速模式匹配)

详细理解看这里&#xff1a;http://kb.cnblogs.com/page/176818/ 或者这里&#xff1a;http://blog.csdn.net/yutianzuijin/article/details/11954939 next[]数组的意义是“除自身外的最大重复子串”。 next数组计算&#xff1a; 理解了kmp算法的基本原理&#xff0c;下一步就是…

发言稿开场白范文_万能演讲开场白范文

ban the banalities that bog down most speech openings. defer the customary “nice-to-be-here” platitudes. direct your audience more into fawning than yawning over your speech opening. how?大部分演讲的开头都总是被那些陈词滥调拖入冷场&#xff0c;这是你应该…

计算机应用专业特色建设情况,【计算机应用论文】计算机应用类专业建设和革新探索(共3022字)...

1.高职高专计算机应用类专业现状剖析1.1专业定位欠准确&#xff0c;职业方向不明确计算机应用类专业相关的职业岗位多&#xff0c;每个职业岗位在知识水平和能力结构上各有侧重&#xff0c;计算机知识、技能体系较庞大&#xff0c;学生在三年时间内不太可能面面俱到、样样精通。…

mac pycharm安装设置_Mac系统Python、PyCharm安装及使用方法详解

一、下载安装Python3解释器使用Python3Python之父Guido van Rossum在邮件列表上宣布 Python 2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python 2.7有关的支持&#xff0c;则需要付费给商业供应商。12**Guido van Rossum 表示&#xff1a;**Lets not p…

《JAVA课程设计》实训第四天——《猜猜看》游戏

第四天&#xff0c;本来想进一步去改进《猜猜看》游戏的。可是非常多问题都不理解。也不熟悉怎么去弄到连接数据库。统计猜对次数&#xff0c;所以并没有进行再多的改动。 基本上就是这种执行结果了 import java.awt.EventQueue; import javax.imageio.ImageIO; import jav…

小凯机器人软件_Cruzr-Cruzr(机器人控制软件)下载 v1.5.20190706.48官方版--pc6下载站...

Cruzr客户端是这款智能云平台商用服务机器人Cruzr的配套软件&#xff0c;多台设备&#xff0c;一键多控&#xff0c;配套远程多机集控系统软件可以进行脚本、地图、视频等批量管理&#xff0c;可实现多台设备异地集中控制、全方位广告投放和同时支持自主巡逻以及指令控制巡逻。…

游戏笔记本计算机购买,2021大学生买电脑,容易犯的七种错误!游戏本和轻薄本买哪个?...

要买电脑的小伙伴们&#xff0c;难道你们指望电脑很好买&#xff1f;怎么买都不会亏&#xff1f;然后只要想买&#xff0c;它就有货&#xff1f;然后怎么买都够用&#xff1f;然后只要喜欢的女孩&#xff0c;一追求就ok&#xff1f;所以今天这期视频&#xff0c;我就随便聊聊大…

gradle安装与配置_gradle相关安装

前言之前一直接触maven&#xff0c;因为换了工作的原因偶然接触了gradle。因为对gradle不太了解&#xff0c;所以在安装与使用的时候出现了这样那样的问题。gradle在Windows系统的安装与配置1、gradle的下载与安装下载链接&#xff1a;https://gradle.org/releases/。(可以根据…

android tag 快捷_Android Studio快捷键使用

logt 生成 TAG标签private static final String TAG "MainActivity";logm 打印方法具体日志Log.d(TAG, "onCreate() called with: " "savedInstanceState [" savedInstanceState "]");logd 打印Log.d()日志 loge logi logw......…

java selenium (二) 环境搭建方法一

webdriver 就是selenium 2。 webdriver 是一款优秀的&#xff0c;开源的&#xff0c;自动化测试框架。 支持很多语言。 本文描述的是用java Eclipse 如何搭建环境 阅读目录首先下载好Eclipse 和配置好Java 环境变量 步骤省略&#xff0c; 请百度方法一 添加jar包 官方下载地…

python拆分excel的sheet为单文件_pandas处理excel一个sheet拆分为多个sheet

指定某一列作为拆分依据,pandas如何把一个excel的一个sheet拆分为多个sheet呢&#xff1f;具体思路如下&#xff1a; 1、读取excel文件获取DataFrame对象df。 2、获取指定列的Series对象&#xff0c;去重该指定列得到分类。 3、循环分类对df做布尔判断写入新的excel。 具体实现…

jquery 树形框 横_利用jQuery设计横/纵向菜单

在网页中&#xff0c;菜单扮演着“指路者”的角色。如何设计一个人性化的菜单呢&#xff0c;下面小编带着大家一起做。效果图&#xff1a;设计历程&#xff1a;1.首先利用html中的和标签进行嵌套&#xff0c;搭起一个整体的框架。如下图所示&#xff1a;Html代码&#xff1a;横…

word和html互换,word与html互转(2) -- html转word

使用忠告使用该方式进行xhtml到word的转换, 简单转换是可以, 但是可能并没有想象中那么满意, 转换出来的word格式并不完美, 比如目录和标题都会丢失, 标题显示看起来一样, 但是是用正文加粗和加大字号来显示的. 毕竟word是一种文档格式, 而html是一种标记性语言, 要想实现完美兼…