当前位置: 首页 > news >正文

五、RPA案例:起点中文网强推小说自动化保存

目录

1、了解网站流程

2、xpath分析

第一章页面

第二章页面

第三章页面

总结

3、获取一本小说

4、获取强推的10本小说


需求:获取起点中文网中的某一个分区(案例以玄幻为例)的本周强推的十本小说的已经更新的章节并且保存下来(小说名为文件名,每一个章节存一个txt文件(章节名为文件名))。

目标网站:https://www.qidian.com/(起点中文网)

1、了解网站流程

首先我们先对网站进行初步的了解,方便我们使用RPA。

在该网站的首页,我们需要先点击玄幻分区。

我们点击玄幻这一个分区,进入了一个新页面(玄幻分区页面),网站首页还存在。

OK,以上就是一本小说的相关流程,先尝试写一下吧

2、xpath分析

(提醒如果鼠标不能右键继续操作,就按F12进入开发者模式)

在下面只需要重复操作的部分的代码

第一章页面

章节名xpath:

//*[@id="reader-content"]/div/div/div[2]/div/h1

小说内容:

//*[@id="c-863726078"]

下一章按钮:

//*[@id="reader-content"]/div/div/div[5]/div/a[2]

第二章页面

章节名xpath

//*[@id="reader-content"]/div/div/div[2]/div/h1

小说内容xpath

//*[@id="c-863726042"]

下一章按钮xpath

//*[@id="reader-content"]/div/div/div[5]/div/a[3]

第三章页面

下一章按钮xpath

//*[@id="reader-content"]/div/div/div[5]/div/a[3]

总结

章节名:

//*[@id="reader-content"]/div/div/div[2]/div/h1

//*[@id="reader-content"]/div/div/div[2]/div/h1

小说内容:

//*[@id="c-863726078"]

//*[@id="c-863726042"]

下一章按钮:

//*[@id="reader-content"]/div/div/div[5]/div/a[2]

//*[@id="reader-content"]/div/div/div[5]/div/a[3]

//*[@id="reader-content"]/div/div/div[5]/div/a[3]

章节名没变化可以直接使用,按钮第一页和其它页不同,其它页相同。

因为小说内容的xpath不同(前端结构相同),我们可以采取获取当前元素的完整xpath的方法解决。(动态页面也可以用这种方法)

小说内容完整xpath

第一页:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main

第二页:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main

......

3、获取一本小说

 代码如下:

# 导入相关包
from DrissionPage import Chromium
import os# 创建小说文件夹
os.makedirs('小说',exist_ok=True)
page = Chromium()
tab = page.get_tab()
tab.get('https://www.qidian.com/',timeout=10)# 作品分类(玄幻按钮xpath)
xuanhuan_btn = tab.ele('xpath://*[@id="classify-list"]/dl/dd[1]/a')
# 点击
xuanhuan_btn.click()
# 获取新页面(玄幻小说分区页面)
tab1 = page.latest_tab
# 因为强推小说的xpath结构类似,可以采用字符串拼接的方法用循环便利
s = 'xpath:/html/body/div[1]/div[4]/div[2]/div[1]/div/ul/li[1]/em/h2/a'
# xpath定位当前的强推小说
tuaijian_btn = tab1.ele(s)
# 点击当前的强推小说
tuaijian_btn.click()
# 获取小说页面
tab2 = page.latest_tab
# 获取小说的连载章节数,用字符串replace方法进行替换只保留章节数
a = tab2.ele('xpath://*[@id="bookCatalogSection"]/div[1]/p/span[1]').text.replace('连载共', '').replace('章', '')
# 将章节数转换为int类型
a = int(a)
# 点击阅读小说
tab2.ele('xpath://*[@id="readBtn"]').click()
# 定义空字符变量,用来保存小说名,用来后面的保存路径中
xiaoshuo_name = ''
# 获取小说页面
tab3 = page.latest_tab
# 通过循环来获取每一章的小说内容
for i in range(a):# 小说第一章if i == 0:# 小说名字name = tab3.ele('xpath://*[@id="r-titlePage"]/div/h1')xiaoshuo_name = name.text# 创建小说目录os.makedirs(f'小说/{name.text}', exist_ok=True)# xpath定位小说章节名zhangjie = tab3.ele('xpath://*[@id="reader-content"]/div/div/div[2]/div/h1')# xpath定位小说章节内容t = tab3.ele('xpath:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main')# 保存该章节的小说open(f'小说/{name.text}/{zhangjie.text}.txt', 'w', encoding='utf-8').write(t.text)# xpath定位下一章按钮并点击tab3.ele('xpath://*[@id="reader-content"]/div/div/div[5]/div/a[2]').click()# 小说其余章else:# 小说章节名zhangjie = tab3.ele('xpath://*[@id="reader-content"]/div/div/div[2]/div/h1')# 小说章节内容t = tab3.ele('xpath:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main')# 小说章节名中可能重新"/"这样会影响txt文件的保存# 根据小说章节名中是否会出现"/"来进行不同的保存操作if zhangjie.text.find('/') == -1:open(f'小说/{xiaoshuo_name}/{zhangjie.text}.txt', 'w', encoding='utf-8').write(t.text)else:# 将"/"替换为“/”p = zhangjie.text.replace('/','')open(f'小说/{xiaoshuo_name}/{p}.txt', 'w', encoding='utf-8').write(t.text)# 点击下一章按钮tab3.ele('xpath://*[@id="reader-content"]/div/div/div[5]/div/a[3]').click()page.quit()

4、获取强推的10本小说

 在之前的博客中有相关方法的介绍在这了不详细讲解,完整代码如下:

# 导入相关包
from DrissionPage import Chromium
import os# 创建小说文件夹
os.makedirs('小说',exist_ok=True)
page = Chromium()
tab = page.get_tab()
tab.get('https://www.qidian.com/',timeout=10)# 作品分类(玄幻按钮xpath)
xuanhuan_btn = tab.ele('xpath://*[@id="classify-list"]/dl/dd[1]/a')
# 点击
xuanhuan_btn.click()
# 获取新页面(玄幻小说分区页面)
tab1 = page.latest_tab
for i in range(1,11):# 因为强推小说的xpath结构类似,可以采用字符串拼接的方法用循环便利s = 'xpath:/html/body/div[1]/div[4]/div[2]/div[1]/div/ul/li[' + str(i) + ']/em/h2/a'# xpath定位当前的强推小说tuaijian_btn = tab1.ele(s)# 点击当前的强推小说tuaijian_btn.click()# 获取小说页面tab2 = page.latest_tab# 获取小说的连载章节数,用字符串replace方法进行替换只保留章节数a = tab2.ele('xpath://*[@id="bookCatalogSection"]/div[1]/p/span[1]').text.replace('连载共', '').replace('章', '')# 将章节数转换为int类型a = int(a)# 点击阅读小说tab2.ele('xpath://*[@id="readBtn"]').click()# 定义空字符变量,用来保存小说名,用来后面的保存路径中xiaoshuo_name = ''# 获取小说页面tab3 = page.latest_tab# 通过循环来获取每一章的小说内容for i in range(a):# 小说第一章if i == 0:# 小说名字name = tab3.ele('xpath://*[@id="r-titlePage"]/div/h1')xiaoshuo_name = name.text# 创建小说目录os.makedirs(f'小说/{name.text}', exist_ok=True)# xpath定位小说章节名zhangjie = tab3.ele('xpath://*[@id="reader-content"]/div/div/div[2]/div/h1')# xpath定位小说章节内容t = tab3.ele('xpath:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main')# 保存该章节的小说open(f'小说/{name.text}/{zhangjie.text}.txt', 'w', encoding='utf-8').write(t.text)# xpath定位下一章按钮并点击tab3.ele('xpath://*[@id="reader-content"]/div/div/div[5]/div/a[2]').click()# 小说其余章else:# 小说章节名zhangjie = tab3.ele('xpath://*[@id="reader-content"]/div/div/div[2]/div/h1')# 小说章节内容t = tab3.ele('xpath:/html/body/div[1]/div/div[2]/div/div/div[2]/div/main')# 小说章节名中可能重新"/"这样会影响txt文件的保存# 根据小说章节名中是否会出现"/"来进行不同的保存操作if zhangjie.text.find('/') == -1:open(f'小说/{xiaoshuo_name}/{zhangjie.text}.txt', 'w', encoding='utf-8').write(t.text)else:# 将"/"替换为“/”p = zhangjie.text.replace('/','')open(f'小说/{xiaoshuo_name}/{p}.txt', 'w', encoding='utf-8').write(t.text)# 点击下一章按钮tab3.ele('xpath://*[@id="reader-content"]/div/div/div[5]/div/a[3]').click()tab3.close()tab2.close()
page.quit()

http://www.dtcms.com/a/573298.html

相关文章:

  • 【2025最新】04 Spring Boot 构建 RESTful Web 服务
  • ComfyUI资源网: 一站式 ComfyUI 工具与学习社区
  • 泉州网站建设网络推广网站超市系统 源码
  • IOT——STM32F031K6U6+RS485+BMP280
  • 怎么才能实现网站HTTPS访问?
  • 供应链安全:数字时代的关键防线
  • 冰雹气候特征
  • 云服务器安装jdk——超详细
  • 【Linux】进程间通信(一)匿名管道原理剖析与进程池手动实现全流程
  • 【Qt开发】布局管理器(三)-> QGridLayout 网格布局
  • *绿色新华-生态金融*系统程序方案
  • 新乡百度关键词优化外包seo网站关键词优化排名
  • wordpress搭建商城百度关键词优化手段
  • Stirling-PDF合并拆分加密样样行:cpolar内网穿透实验室第563个成功挑战
  • vue 后端nodejsexpress-generator 脚手架环境搭建
  • 市政二级总承包资质承包范围seo软件排行榜前十名
  • 网站设计奖wordpress媒体库搜索
  • 代码随想录训练营打卡Day37| 动态规划part05
  • 实战代码解析:拼多多 item_search API 使用教程
  • 基于栅格地图的遗传算法路径规划MATLAB实现
  • 公司网站二维码生成器网络营销ppt讲解
  • Java中Stream使用示例-对实体List分组且保留原数据顺序并对分组后的每组内的数据进行部分业务逻辑修改操作
  • 大型购物网站建设方案wordpress登录页面模板下载
  • CSS 选择器详解
  • MySQL的DATE_ADD函数详解
  • 请求头是什么
  • 【EMNLP2025】阿里云人工智能平台PAI多篇论文入选EMNLP2025
  • 南宁网站推广工具wordpress动图
  • 这么建设一个网站钦州市建设局网站
  • SmartX 联合万博智云发布云原生异构容灾解决方案白皮书(附下载)