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相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python正则表达式用法总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

本文标题: Python实现的爬取小说爬虫功能示例

本文地址: http://www.cppcns.com/jiaoben/python/255645.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值