python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...
原标题:对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力
以前挺爱在笔趣阁看小说的(老白嫖怪了)
现在学了一点爬虫技术,就自然而然的想到了爬取笔趣阁的小说
也算锻炼一下自己的技术,就以新笔趣阁开始
分析
对每一个小说目录界面的url还是很容易得到的
如圣墟:http://www.xbiquge.la/13/13959/可以知道,遍历从1到13,从00001到13959,也可以访问到部分书的目录界面,但这还是很浪费时间和麻烦
我呢就以下载一本小说为例:
为了有一定的广泛性,我用selenium先进行操作,
然后在这里输入小说名字,点击搜索,然后获得新页面的源码
再用xpath解析,找到搜到第一个小说的名字和url
再对url进行requests.get请求得到小说目录页码的源码
再进行解析,得到每一章的url以及名字
把每一章的url和名字以字典的方法存到一个列表里面
再逐步请求每个url,再解析源码,得到文字保存到电脑里面
代码实现
import os
import time
import requests
from selenium import webdriver
from concurrent.futures import ThreadPoolExecutor
from lxml import etree
#selenium路径
path='C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe'
head={
"user-agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36"
}
novel_name=input("输入想要下载的小说名字")
#进行自动化操作对笔趣阁进行访问
bro=webdriver.Chrome(executable_path=path)
bro.get('http://www.xbiquge.la/')
search_off=bro.find_element_by_id('wd')
search_off.send_keys(novel_name)#输入小说名字
click_search=bro.find_element_by_id('sss')#找到搜索的位置
click_search.click()#点击搜索
time.sleep(5)
page_text=bro.page_source
bro.quit()
#得到访问页面的源码
tree=etree.HTML(page_text)
novel_name=tree.xpath('//*[@id="checkform"]/table/tbody/tr[2]/td[1]/a/text()')[0]#小说名
url=tree.xpath('//*[@id="checkform"]/table/tbody/tr[2]/td[1]/a/@href')[0]
#访问小说目录页面
response=requests.get(url=url,headers=head)
#因为会存在中文乱码的情况,所以进行下面操作
response.raise_for_status()
response.encoding=response.apparent_encoding
#再进行xpath解析
tree=response.text
tree=etree.HTML(tree)
actor=tree.xpath('//*[@id="info"]/p[1]/text()')[0]#作者名
#创建文件夹
if not os.path.exists('./小说'):
os.mkdir('./小说')
if not os.path.exists('./小说/'+str(novel_name)):
os.mkdir('./小说/'+str(novel_name))
urls=[]
zhangjies=tree.xpath('//*[@id="list"]/dl/dd')#获得存放章节信息的列表
for i in zhangjies:
#把每个章节的url和名字以字典型存放
zhangjie_name=i.xpath('./a/text()')[0]+'.txt'
zhangjie_url='http://www.xbiquge.la'+i.xpath('./a/@href')[0]
dic={
'name':zhangjie_name,
'url' :zhangjie_url
}
urls.append(dic)
def data_get_write(dic):
url=dic['url']
for i in range(20):#因为网站容易崩而出现503页面,故要多次请求
try:
data_get=requests.get(url=url,headers=head)
data_get.raise_for_status()
data_get.encoding=data_get.apparent_encoding
data_tree=data_get.text
break
except:
print("请求出错,从新请求")
data_tree=etree.HTML(data_tree)
data_writr=data_tree.xpath('//*[@id="content"]/text()')
with open('./小说/'+str(novel_name)+'/'+dic['name'],'w',encoding='utf-8') as fp:#对小说章节进行持久化存储
for name in data_writr:
fp.write(name)
print(dic['name'],'下载成功!!!')
#time.sleep(1)
#with ThreadPoolExecutor() as pool:#用进程池访问,因为网站容易崩,所以效率很低
#pool.map(data_get_write,urls)
for dic in urls:#对每个章节单独访问
data_get_write(dic)
time.sleep(1)
到此,算是完成了,中间也有很多问题,比如这个网页太容易崩了,一不小心就503,也可能是因为没有反爬虫的机制,服务器顶不住了,在此要感谢郭大佬的帮助,用多次循环try来解决了这个问题
也能很好的保存下来。
感觉还是很需要多练习,熟能生巧,出现问题也就能很快解决,当然算法也很重要的,能够培养思维,会练习的返回搜狐,查看更多
责任编辑:
python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...相关推荐
- Python爬虫练习(一) 爬取新笔趣阁小说(搜索+爬取)
爬取笔趣阁小说(搜索+爬取) 首先看看最终效果(gif): 实现步骤: 1.探查网站"http://www.xbiquge.la/",看看网站的实现原理. 2.编写搜索功能(获取每 ...
- 【爬虫】对新笔趣阁小说进行爬取,保存和下载
以前挺爱在笔趣阁看小说的(老白嫖怪了) 现在学了一点爬虫技术,就自然而然的想到了爬取笔趣阁的小说 也算锻炼一下自己的技术,就以新笔趣阁开始 分析 对每一个小说目录界面的url还是很容易得到的 如圣墟: ...
- Python爬虫笔记(1)--对新笔趣阁进行爬取
前期准备: (1) 安装 requests(获取整个网页的HTML信息) 在cmd中,使用如下指令安装requests: pip install requests (2)安装 beautifulsou ...
- Python爬虫--笔趣阁小说爬取
Python爬虫–笔趣阁小说爬取 爬虫用到的插件 import requests from lxml import etree 小说目录页 以小说"我有百万技能点"为例,在笔趣阁搜 ...
- Python爬虫:笔趣阁小说搜索和爬取
目录 0x00 写在前面 0x01 搜索页面 0x02 章节获取 0x03 章节内容获取 0x04 完整代码 0x00 写在前面 最近开始学习Python的爬虫,就试着写了写笔趣阁小说的爬虫,由于是初 ...
- python爬取笔趣阁小说(附源码)
python爬取笔趣阁小说 文章目录 python爬取笔趣阁小说 前言 一.获取小说目录结构 获取目录连接 请求代码 解析目录 XPath tqdm 解析 二.获取小说章节结构 请求代码 解析章节 代 ...
- python爬取小说爬取_用python爬取笔趣阁小说
原标题:用python爬取笔趣阁小说 首先打开笔趣阁网址,链接,搜索自己想要的小说. 在网站内单击右键,点击检查,会出现如下界面! 我们需要的章节信息就在我划的这块, 可以将每个标签点一下,它对应的内 ...
- Python爬虫之爬取笔趣阁小说下载到本地文件并且存储到数据库
学习了python之后,接触到了爬虫,加上我又喜欢看小说,所以就做了一个爬虫的小程序,爬取笔趣阁小说. 程序中一共引入了以下几个库: import requests import mysql.conn ...
- 爬虫初学(一):爬取笔趣阁小说(萌新用-详细讲解)
不识有话说 作为一个爬虫萌新,第一个小项目当然是爬一爬我们的萌新之友-<新笔趣阁> 虽然没什么难度, 不过还是分享一下自己的代码历程, 希望能给予大家一些思路或帮助, 当然,如果有大佬能够 ...
最新文章
- 按覆盖地理范围的不同计算机网络可分为,按网络覆盖的地理范围进行分类,计算机网络可以分为:...
- [k8s]elk架构设计-k8s集群里搭建
- luogu P3241 [HNOI2015]开店
- idea会不定时闪屏_显示器闪屏什么原因
- sqlMapConfig.xml配置文件详解
- FairyGUI1:FairyGUI 编辑器
- 并行算法:如何利用并行处理提高算法的执行效率?
- python如何表示正整数_python中正整数
- 【软件篇】~ 为什么打开谷歌浏览器就是360导航页面呢?
- 如何在CTEX上对论文进行排版
- MATLAB线性回归实例 平炉炼钢
- to_csv ()出现中文乱码
- 输入阻抗 输出阻抗
- 【C语言】指针终结者-初阶
- python依据出生日期判断星座(少量代码)
- Hastelloy C-276 (UNS N10276) 含钨的镍-铬-钼合金
- Python-(生成由0到9组成的n位数字)
- 手把手教你使用HarmonyOS本地模拟器
- Redis--变慢原因及排查方法
- 同个一个工作簿下多个工作表相同格式
热门文章
- 创建采购申请---BAPI_REQUISITION_CREATE
- ALV分类合计功能实现
- ABAP 用户选择屏幕 搜索帮助 实现代码
- ABAP:List中回写CheckBox的值到内表
- ABAP:判断是否汉字
- 爱优腾芒“跑马圈地”,AI广告营销能拯救“盈利难”的视频平台吗?
- 服务器操作系统2008安装图解,IBM服务器windows2008操作系统安装步骤图文(13页)-原创力文档...
- numpy 图片填充_numpy/python中的洪水填充分割图像
- 二进制转16进制转文本[BJDCTF 2nd]cat_flag
- linux 拆分文件 多个,linux把一个文件拆分