Python分析并爬取起点中文网的章节数据,保存为txt文档
如题,分析起点中文网,并提取出来章节链接,保存为txt文档。
代码仅供交流使用,请勿用作商业用途,如有违规,请联系删除
一,分析
1.打开带有章节的链接,例如:(随便选的一篇文章)
2.打开浏览器的抓包工具f12(我用的是谷歌浏览器),点击页面的免费试读,因为页面是在一个页面跳转,不需要多开浏览器。
抓到包会发现很杂乱,通过筛选会出现所需要的一些链接,这些链接一个个点击查看返回详情,最后发现那条蓝色链接是包含所有这篇小说的目录的。
3.可以发现这个是一个get包,变化的参数有两个。
4.bookid可以发现是书的id,_csrfToken是一个可变的参数,这个得找到从哪获取的,先在所有链接里进行搜索这个内容,可以发现这个token是存在cookie中,查看了没有返回过cookie,就只能从refer来,找到最先出现这个token的链接,在这个链接里提取refer的,然后通过代码提取到这个token的值。
5.回到出现目录的链接那里(这个链接要在页面点击一下目录),分析返回的内容,返回的是属于json格式,提取也能用过key值提取出来,红色方框是主key,箭头是列表,小说包含的章节数多,圆圈的是代表目录的内容。具体的提取方式会在代码显示,公式是:返回内容[主key1][主key2][列表数][圆圈][具体提取的key]。其中提取的每章的链接需要自己补全。
二.代码
代码上面附上解释说明,详情请看:
def get_qidian(url):import requestsimport jsonimport refrom lxml import etree#设置全局变量some_ = ''#提取bookidbid = url.split("/")[-1]# print(bid)headers ={"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"}res = requests.get(url, headers=headers)#提取后面用到的refernew_url = 'https:' + re.search(re.compile(r'<a class="red-btn J-getJumpUrl " href="(.*?)"'), res.text).group(1)#提取小说名字title = re.search(re.compile('《(.*?)》'), res.text).group(1)#两种提取cookie成字典模式#第一种# print(res.cookies.list_domains())# print(res.cookies.list_paths())# print(res.cookies.get_dict(res.cookies.list_domains()[0],res.cookies.list_paths()[0]))#第二种cookie = requests.utils.dict_from_cookiejar(res.cookies)Token = cookie['_csrfToken']#更新字典的headersheaders.update({"x-requested-with": "XMLHttpRequest", "referer": new_url})headers.update(cookie)#解码返回的内容res = requests.get(f'https://read.qidian.com/ajax/book/category?_csrfToken={Token}&bookId={bid}',headers=headers).text.encode("raw_unicode_escape").decode()# 把返回的内容转为json格式res = json.loads(res)headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"}#提取列表for s in res['data']['vs']:#提取目录内容for i in s['cs']:#提取章节名字chapter = i['cN']#提取链接后半部分ch_url = 'https://read.qidian.com/chapter/' + i['cU']# print(chapter)# print(ch_url)#https://read.qidian.com/chapter/#<div class="read-content j_readContent">res = requests.get(ch_url, headers=headers).text# print(res)#通过etree提取每一章的内容selector = etree.HTML(res)txt_ = selector.xpath('//div[@class="read-content j_readContent"]/p/text()')# print(txt_)all_txt = ''for g in txt_:#对每一条内容进行处理g = str(g)g = g.replace('\u3000\u3000', '').replace('\n', '').strip() + '\n'all_txt = all_txt + g#把所有内容放在一个变量里,最后再保存all_txt = chapter + '\n\n' + all_txtsome_ = some_ + all_txt#把所有处理好了,进行写出保存with open(f'{title}.txt', 'w') as f:f.write(some_)f.close()if __name__ == '__main__':get_qidian('https://book.qidian.com/info/1018027842')
详细过程就没有细细道来了,因为都是比较简单的东西,通过代码应该都能看懂吧,看不懂就直接拿代码去用吧!
关于爬整个网站的教程我这边又完整的视频,点这里获取完整视频教程
Python分析并爬取起点中文网的章节数据,保存为txt文档相关推荐
- python爬虫之爬取起点中文网小说
python爬虫之爬取起点中文网小说 hello大家好,这篇文章带大家来制作一个python爬虫爬取阅文集团旗下产品起点中文网的程序,这篇文章的灵感来源于本人制作的一个项目:电脑助手 启帆助手 ⬆是项 ...
- Python爬虫之爬取网络小说并在本地保存为txt文件
Python爬虫之爬取网络小说并在本地保存为txt文件 注:本文使用软件为Sublime Text,浏览器为谷歌浏览器 (新手小白第一次写,写得不好请见谅) **1.**首先找到想要爬取的小说章节目录 ...
- Python爬虫之爬取起点中文网
python之爬取起点中文网 最近学了爬虫,想实战一下就选取了最近经常看小说的起点中文网来进行爬取 过程如下: 分析爬取信息: 爬取网址:https://www.qidian.com/rank?chn ...
- python request 爬虫爬取起点中文网小说
1.网页分析.进入https://www.qidian.com/,点击全部,进行翻页,你就会发现一个规律, url=https://www.qidian.com/all?orderId=&st ...
- 爬取豆瓣TOP250并将数据保存为txt文件和csv文件并存入MySQL数据库
项目源码 import requests # 发起请求的库 from fake_useragent import UserAgent # 构造user-Agent的库 import mysql.con ...
- Go爬取起点中文网 解决文字反爬
Go语言的爬虫库不如Python强大,却也五脏俱全. 今天我们分析如何爬取起点中文网数据,以及遇到反爬如何处理. 作品链接:http://www.365yg.com/i6678092837810078 ...
- python 爬虫抓取网页数据导出excel_Python爬虫|爬取起点中文网小说信息保存到Excel...
前言: 爬取起点中文网全部小说基本信息,小说名.作者.类别.连载\完结情况.简介,并将爬取的数据存储与EXCEL表中 环境:Python3.7 PyCharm Chrome浏览器 主要模块:xlwt ...
- scrapy爬取起点中文网24小时热销榜单(将数据存到数据库)
系列文章目录 第一章:scrapy爬取起点中文网24小时热销榜单 第二章:scrapy爬取苏州二手房交易信息 第三章:scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息 第四章:scrapy爬取起点中文网 ...
- Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)
Scrapy 爬取起点中文网 1. 创建项目 2. 创建爬虫实例 3. 创建一个启动文件 main.py 4. 项目的总体树结构 5. settings.py 6. items.py 7. qidia ...
最新文章
- Zookeeper 安装和配置
- IDEA一定要懂的32条快捷键
- ACM入门之【线段树习题】
- baidumap vue 判断范围_百度地图 vue-baidu-map
- 全球知名跨境电商,.Net软件工程师招聘,约么?
- Linux系统中解压缩指令汇总
- vscode debug c++与opencv程序
- ORM是什么?如何理解ORM?
- 29 PP配置-生产车间控制-工序-定义可用性检查控制
- Devexpress Chart series 点击时获取SeriesPoint的值
- git 创建webpack项目_从 0 开始构建 webpack 项目【Webpack Book 翻译】
- Oracle之自动收集统计信息
- 转:全栈工程师的知识栈列表
- android:layout_height、android:layout_width、android:height、android:width的关系与区别
- Win 10 清除恢复分区
- 雷达感应智能窗帘,雷达感应模组方案,家居智能化交互体验
- iOS GPUImage研究序一:内置滤镜
- Sql server日志
- Three.js--关于立体图像的设置
- adsafe净网大师不能拦截广告是什么情况?怎么处理?