python使用requests+xpath爬取小说并下载
这个爬虫只是选定热门小说,不支持自选搜索下载,日后会补充并改进。
选定小说网址:
- 笔趣阁
爬取:
- 需要导入的包
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爬取小说并下载相关推荐
- Python之requests+xpath爬取猫眼电影并写入数据库(图文教程)
文章目录 一.pyhton连接mysql数据库 二.用xpath抓取有用信息 说几个比较容易掉坑的地方 一 二 三 效果 一.pyhton连接mysql数据库 我是写了一个py文件来封装一下,然后在爬 ...
- python爬虫——requests+xpath 爬取8684公交查询网站
一.分析网站 url = 'http://xian.8684.cn/' 1.第二层路线xpath: # 查找以数字开头的所有链接number_href_list = tree.xpath('//div ...
- Requests+Xpath 爬取豆瓣读书TOP并生成txt,csv,json,excel文件
说明: ##来源:https://www.cnblogs.com/yizhiamumu/p/10270926.html 1 Requests+Xpath 爬取豆瓣读书TOP ''' Requests+ ...
- Python爬虫:Xpath爬取网页信息(附代码)
Python爬虫:Xpath爬取网页信息(附代码) 上一次分享了使用Python简单爬取网页信息的方法.但是仅仅对于单一网页的信息爬取一般无法满足我们的数据需求.对于一般的数据需求,我们通常需要从一个 ...
- 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP
爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...
- python爬虫下载小说_python 爬取小说并下载的示例
代码 import requests import time from tqdm import tqdm from bs4 import BeautifulSoup """ ...
- 还在苦于Kindle的epub格式吗?python爬虫,一键爬取小说加txt转换epub。
还在苦于Kindle的epub格式吗?python爬虫,一键爬取小说加txt转换epub. 项目地址: https://github.com/Fruiticecake/dubuNovel/blob/m ...
- 爬虫系列4:Requests+Xpath 爬取动态数据
爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...
- python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程
python爬虫 requests+bs4爬取猫眼电影 傻瓜版教程 前言 一丶整体思路 二丶遇到的问题 三丶分析URL 四丶解析页面 五丶写入文件 六丶完整代码 七丶最后 前言 大家好我是墨绿 头顶总 ...
最新文章
- unicode字符串 转 中文
- spring28: aspectJ--基于xml
- Spring Cloud Alibaba - 09 Ribbon 饥饿加载及其他配置参数解读
- MySQL STR_TO_DATE函数
- boost::mpl::greater相关的测试程序
- python公式_Python读取excel文件中带公式的值的实现
- oracle rman在线备份,Oracle之RMAN备份及还原
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之灯光介绍Lights...
- 浅析刚参加工作的大学生的心理态势
- AD9361常用配置概述
- moodle平台安装及环境配置(包括安装过程详细截图)
- win7系统电脑连接小米蓝牙音箱
- 移动互联网周刊第二期,不错,推荐给大家
- python语言实验——某年某月的天数 OJ1160
- 数据结构(C语言)二叉树的链式存储与操作 11月18日
- 前端对用户身份证号码进行验证以及模糊显示
- 使用win10自带功能,横屏、竖屏显示器分别设置壁纸
- 无人机3d可视化系统的应用是怎样实现的?
- springboot项目:订单生成和沙箱支付
- 阿里多个App已接入微信支付;Facebook年薪中位数170万元;恶意软件感染超1000万台安卓设备 | EA周报...