这个爬虫只是选定热门小说,不支持自选搜索下载,日后会补充并改进。

选定小说网址:

  • 笔趣阁

爬取:

  • 需要导入的包

import requests
from lxml import etree
import os
import re
import time
import datetime
  • 获取主页面上的小说分类地址及名称
def main_html(url,headers):    # 获取首页小说分类地址nav_name_href = "//*[@id='wrapper']/div[2]/ul/li/a//@href"response = requests.get(url,headers=headers).texthtml = etree.HTML(response)nav_name  = html.xpath(nav_name_href)[2:-1]return nav_name   #返回首页小说分类地址
  • 获取主页面下的热门小说列表。
def next_html(url,headers):                           # 该分类下的热门小说xpath_book = '//*[@id="newscontent"]/div[2]/ul/li/span/a/text()'  # 书名称xpath_url = '//*[@id="newscontent"]/div[2]/ul/li/span/a/@href'  # 书的urlxpath_id = '//*[@id="newscontent"]/div[2]/ul/li/span/text()'  # 小说作者name_url = []            # 用来存放小说的名称与地址rep = requests.get(url=url,headers=headers).texthtml = etree.HTML(rep)r_book = html.xpath(xpath_book)r_url = html.xpath(xpath_url)BookAndUrl = dict(zip(r_book,r_url))print(r_book)try:s_book = input("============请输入你想要看的小说全称============"+"\n")s_url = BookAndUrl[s_book]name_url.append(s_book)name_url.append(s_url)return name_url  # 获取想要的书名与地址,用列表返回except:KeyError(print("输入有误"))return False
  • 小说本说的章节与连接
def story_html(url, headers):   # 小说章节与urlxpath_text = '//*[@id="list"]/dl/dd//text()'xpath_url = '//*[@id="list"]/dl/dd//a/@href'rep = requests.get(url=url,headers=headers).texthtml = etree.HTML(rep)x_text = html.xpath(xpath_text)x_url = html.xpath(xpath_url)text_dict = dict(zip(x_text[9:-1],x_url[9:-1])) # 去除掉章节前的话语导语之类的。return text_dict
  • 下载小说本说(只获取有效章节)
def download_html(bookname,url_name_dict):num_d = 0   # 用来给下载文件编号排序。title_Re = r"[\u7b2c](.|\n)*[\u7ae0]"  # 匹配正确的章节名称。以第开头,章结尾key_count = len(url_name_dict.keys())    # 文章总数for key,values in url_name_dict.items():time.sleep(0.5)       # 设置休眠时间,防止下载过快内容为空,下载时候看着舒服一点。rep = requests.get(url=values,headers=headers).texthtml = etree.HTML(rep)xpath2 ='//*[@id="content"]//text()'the_end = html.xpath(xpath2)res = str(the_end)r = re.findall(u'[\u4e00-\u9fa5].+?', res) # 匹配中文,去除掉下载时候的其他转义字符,原生字符the_fi = "".join(r)the_final = list(the_fi)if not os.path.exists(os.getcwd() + "\\" + bookname): # 以小说名创建文件夹os.makedirs(os.getcwd() + "\\" + bookname)if (re.match(title_Re,key)):  # 获取所有有效章节num_d += 1try:with open(os.getcwd() + "\\" + bookname + "\\" + str(num_d)+key + ".txt", "w+", encoding="utf-8") as fp:for num in range(len(the_final)):   # 每50个字换行一次,随自己调if(num%50==0 and num!=0):fp.write("\n" + the_final[num])else:fp.write(the_final[num])print("{:10}{:>15}{:>20}".format(key,"下载成功","已完成:"+str(num_d)+"/"+str(key_count)))except (TimeoutError,IndexError):passelse:key_count = key_count -1print("{:10}{:>15}".format(key,"无效章节","已完成"))
  • 写一个判断函数;只你呢个获取固定的小说分类;
def is_num(num):  # 用来判断输入是否合格try:new_num = float(num)-1if(float(new_num)):try:if(float(num)>7):return Falseelif(float(new_num)<=0):return Falseexcept IndexError:passexcept (ValueError,IndexError):passtry:import unicodedataunicodedata.numeric(num)return Trueexcept (TypeError, ValueError,IndexError):passreturn False
  • 程序运行开始显示
def main_menu():num = input("""========================按数字输入想看的小说类型========================1.玄幻小说    2.修真小说    3.都市小说    4.穿越小说    5.网游小说    6.科幻小说    7.言情小说""")return num
  • 主函数
if __name__ == '__main__':start_time = datetime.datetime.now()main_url ="http://www.b520.cc/"headers = {"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36"}num = main_menu() # 拿到想看的小说类型main_text_url = main_html(url=main_url,headers=headers)  # 地址。if(is_num(num)): # 判断输入数字合不合格。num =int(num)num = num-1text_2_url = main_text_url[num]text_2_url = "http://"+ text_2_url[2:-1]+"/"next_url = next_html(text_2_url, headers=headers)next_3 =story_html(next_url[1],headers=headers)download_html(next_url[0], next_3)end_time = datetime.datetime.now()print("############################共耗时%ss############################" % (end_time-start_time))

这个程序可以直接复制运行。

python使用requests+xpath爬取小说并下载相关推荐

  1. Python之requests+xpath爬取猫眼电影并写入数据库(图文教程)

    文章目录 一.pyhton连接mysql数据库 二.用xpath抓取有用信息 说几个比较容易掉坑的地方 一 二 三 效果 一.pyhton连接mysql数据库 我是写了一个py文件来封装一下,然后在爬 ...

  2. python爬虫——requests+xpath 爬取8684公交查询网站

    一.分析网站 url = 'http://xian.8684.cn/' 1.第二层路线xpath: # 查找以数字开头的所有链接number_href_list = tree.xpath('//div ...

  3. Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件

    说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...

  4. Python爬虫:Xpath爬取网页信息(附代码)

    Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...

  5. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  6. python爬虫下载小说_python 爬取小说并下载的示例

    代码 import requests import time from tqdm import tqdm from bs4 import BeautifulSoup """ ...

  7. 还在苦于Kindle的epub格式吗?python爬虫,一键爬取小说加txt转换epub。

    还在苦于Kindle的epub格式吗?python爬虫,一键爬取小说加txt转换epub. 项目地址: https://github.com/Fruiticecake/dubuNovel/blob/m ...

  8. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  9. python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程

    python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...

最新文章

  1. unicode字符串 转 中文
  2. spring28: aspectJ--基于xml
  3. Spring Cloud Alibaba - 09 Ribbon 饥饿加载及其他配置参数解读
  4. MySQL STR_TO_DATE函数
  5. boost::mpl::greater相关的测试程序
  6. python公式_Python读取excel文件中带公式的值的实现
  7. oracle rman在线备份,Oracle之RMAN备份及还原
  8. [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights...
  9. 浅析刚参加工作的大学生的心理态势
  10. AD9361常用配置概述
  11. moodle平台安装及环境配置(包括安装过程详细截图)
  12. win7系统电脑连接小米蓝牙音箱
  13. 移动互联网周刊第二期,不错,推荐给大家
  14. python语言实验——某年某月的天数 OJ1160
  15. 数据结构(C语言)二叉树的链式存储与操作 11月18日
  16. 前端对用户身份证号码进行验证以及模糊显示
  17. 使用win10自带功能,横屏、竖屏显示器分别设置壁纸
  18. 无人机3d可视化系统的应用是怎样实现的?
  19. springboot项目:订单生成和沙箱支付
  20. 阿里多个App已接入微信支付;Facebook年薪中位数170万元;恶意软件感染超1000万台安卓设备 | EA周报...

热门文章

  1. SQL游标原理和使用方法
  2. 推荐系列:2008年第03期 总5期
  3. MySql级联删除和更新
  4. MainWindow 简介
  5. Hadoop1.2.1伪分布模式安装指南
  6. Google JAVA编程风格
  7. echo服务器(回显服务器)
  8. s3c6140 UART驱动设计
  9. java:BIO, NIO
  10. java:UDP通信