如题,分析起点中文网,并提取出来章节链接,保存为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文档相关推荐

  1. python爬虫之爬取起点中文网小说

    python爬虫之爬取起点中文网小说 hello大家好,这篇文章带大家来制作一个python爬虫爬取阅文集团旗下产品起点中文网的程序,这篇文章的灵感来源于本人制作的一个项目:电脑助手 启帆助手 ⬆是项 ...

  2. Python爬虫之爬取网络小说并在本地保存为txt文件

    Python爬虫之爬取网络小说并在本地保存为txt文件 注:本文使用软件为Sublime Text,浏览器为谷歌浏览器 (新手小白第一次写,写得不好请见谅) **1.**首先找到想要爬取的小说章节目录 ...

  3. Python爬虫之爬取起点中文网

    python之爬取起点中文网 最近学了爬虫,想实战一下就选取了最近经常看小说的起点中文网来进行爬取 过程如下: 分析爬取信息: 爬取网址:https://www.qidian.com/rank?chn ...

  4. python request 爬虫爬取起点中文网小说

    1.网页分析.进入https://www.qidian.com/,点击全部,进行翻页,你就会发现一个规律, url=https://www.qidian.com/all?orderId=&st ...

  5. 爬取豆瓣TOP250并将数据保存为txt文件和csv文件并存入MySQL数据库

    项目源码 import requests # 发起请求的库 from fake_useragent import UserAgent # 构造user-Agent的库 import mysql.con ...

  6. Go爬取起点中文网 解决文字反爬

    Go语言的爬虫库不如Python强大,却也五脏俱全. 今天我们分析如何爬取起点中文网数据,以及遇到反爬如何处理. 作品链接:http://www.365yg.com/i6678092837810078 ...

  7. python 爬虫抓取网页数据导出excel_Python爬虫|爬取起点中文网小说信息保存到Excel...

    前言: 爬取起点中文网全部小说基本信息,小说名.作者.类别.连载\完结情况.简介,并将爬取的数据存储与EXCEL表中 环境:Python3.7 PyCharm Chrome浏览器 主要模块:xlwt ...

  8. scrapy爬取起点中文网24小时热销榜单(将数据存到数据库)

    系列文章目录 第一章:scrapy爬取起点中文网24小时热销榜单 第二章:scrapy爬取苏州二手房交易信息 第三章:scrapy爬取QQ音乐榜单歌曲及豆瓣电影信息 第四章:scrapy爬取起点中文网 ...

  9. Scrapy 爬取起点中文网存储到 MySQL 数据库(自定义 middleware)

    Scrapy 爬取起点中文网 1. 创建项目 2. 创建爬虫实例 3. 创建一个启动文件 main.py 4. 项目的总体树结构 5. settings.py 6. items.py 7. qidia ...

最新文章

  1. Zookeeper 安装和配置
  2. IDEA一定要懂的32条快捷键
  3. ACM入门之【线段树习题】
  4. baidumap vue 判断范围_百度地图 vue-baidu-map
  5. 全球知名跨境电商,.Net软件工程师招聘,约么?
  6. Linux系统中解压缩指令汇总
  7. vscode debug c++与opencv程序
  8. ORM是什么?如何理解ORM?
  9. 29 PP配置-生产车间控制-工序-定义可用性检查控制
  10. Devexpress Chart series 点击时获取SeriesPoint的值
  11. git 创建webpack项目_从 0 开始构建 webpack 项目【Webpack Book 翻译】
  12. Oracle之自动收集统计信息
  13. 转:全栈工程师的知识栈列表
  14. android:layout_height、android:layout_width、android:height、android:width的关系与区别
  15. Win 10 清除恢复分区
  16. 雷达感应智能窗帘,雷达感应模组方案,家居智能化交互体验
  17. iOS GPUImage研究序一:内置滤镜
  18. Sql server日志
  19. Three.js--关于立体图像的设置
  20. adsafe净网大师不能拦截广告是什么情况?怎么处理?

热门文章

  1. 58同城python_Python实战计划爬虫作业第一周作业:爬58同城
  2. “真香”是什么意思?
  3. chart.js使用学习——散点图
  4. 魔方还原算法(二) 科先巴的二阶段算法
  5. 一文全懂,Android程序员最新职业规划
  6. yocto(二)——bitbake工作流程
  7. c语言高校信息查询系统,高校人员信息管理系统c语言.doc
  8. 使用Arthas排查问题
  9. 【CHATGPT-3.5】如何使用ChatGPT的同时并学习记忆
  10. 虚拟机的防火墙设置指令