使用playwright爬取魔笔小说网站并下载轻小说资源

这篇具有很好参考价值的文章主要介绍了使用playwright爬取魔笔小说网站并下载轻小说资源。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、安装python

官网

下载python3.9及以上版本

二、安装playwright

playwright是微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium、Firefox、WebKit等主流浏览器自动化操作。

(1)安装Playwright依赖库

1 pip install playwright

 文章来源地址https://www.toymoban.com/news/detail-711675.html

(2)安装Chromium、Firefox、WebKit等浏览器的驱动文件(内置浏览器)

1 python -m playwright install

三、分析网站的HTML结构

魔笔小说网是一个轻小说下载网站,提供了mobi、epub等格式小说资源,美中不足的是,需要跳转城通网盘下载,无会员情况下被限速且同一时间只允许一个下载任务。

当使用chrome浏览器时点击键盘的F12进入开发者模式。

(一)小说目录

使用playwright爬取魔笔小说网站并下载轻小说资源

HTML内容

使用playwright爬取魔笔小说网站并下载轻小说资源

通过href标签可以获得每本小说的详细地址,随后打开该地址获取章节下载地址。

(二)章节下载目录

使用playwright爬取魔笔小说网站并下载轻小说资源

HTML内容

使用playwright爬取魔笔小说网站并下载轻小说资源

遍历每本小说的地址并保存到单独的txt文件中供后续下载。

(三)代码

 1 import time,re
 2 
 3 from playwright.sync_api import Playwright, sync_playwright, expect
 4 
 5 def cancel_request(route,request):
 6     route.abort()
 7 def run(playwright: Playwright) -> None:
 8     browser = playwright.chromium.launch(headless=False)
 9     context = browser.new_context()
10     page = context.new_page()
11     # 不加载图片
12     # page.route(re.compile(r"(\.png)|(\.jpg)"), cancel_request)
13     page.goto("https://mobinovels.com/")
14     # 由于魔笔小说首页是动态加载列表,因此在此处加30s延迟,需手动滑动页面至底部直至加载完全部内容
15     for i in range(30):
16         time.sleep(1)
17         print(i)
18     # 定位至列表元素
19     novel_list = page.locator('[class="post-title entry-title"]')
20     # 统计小说数量
21     total = novel_list.count()
22     # 遍历获取小说详情地址
23     for i in range(total):
24         novel = novel_list.nth(i).locator("a")
25         title = novel.inner_text()
26         title_url = novel.get_attribute("href")
27         page1 = context.new_page()
28         page1.goto(title_url,wait_until='domcontentloaded')
29         print(i+1,total,title)
30         try:
31             content_list = page1.locator("table>tbody>tr")
32             # 保存至单独txt文件中供后续下载
33             with open('./novelurl/'+title+'.txt', 'a') as f:
34                 for j in range(content_list.count()):
35                     if content_list.nth(j).locator("td").count() > 2:
36                         content_href = content_list.nth(j).locator("td").nth(3).locator("a").get_attribute("href")
37                         f.write(title+str(j+1)+'分割'+content_href + '\n')
38         except:
39             pass
40         page1.close()
41     # 程序结束后手动关闭程序
42     time.sleep(50000)
43     page.close()
44 
45     # ---------------------
46     context.close()
47     browser.close()
48 
49 
50 with sync_playwright() as playwright:
51     run(playwright)

(四)运行结果

使用playwright爬取魔笔小说网站并下载轻小说资源

使用playwright爬取魔笔小说网站并下载轻小说资源

四、开始下载

之所以先将下载地址保存到txt再下载而不是立即下载,是防止程序因网络等原因异常崩溃后记录进度,下次启动避免重复下载。

(一)获取cookies

城通网盘下载较大资源时需要登陆,有的轻小说文件较大时,页面会跳转到登陆页面导致程序卡住,因此需利用cookies保存登陆状态,或增加延迟手动在页面登陆。

chrome浏览器可以通过cookies editor插件获取cookies,导出后即可使用。

(二)分析下载地址

下载地址有三种类型,根据判断条件分别处理:

(1)文件的访问密码统一为6195,当域名为 https://url74.ctfile.com/ 地址后缀带有 ?p=6195 时,页面自动填入访问密码,我们需要在脚本中判断后缀是否为 ?p=6195 ,如不是则拼接字符串后访问;

(2)有后缀时无需处理;

(3)当域名为 https://t00y.com/ 时无需密码;

 1                         if "t00y.com" in new_url:
 2                             page.goto(new_url)
 3                         elif "?p=6195" not in new_url:
 4                             page.goto(new_url+"?p=6195")
 5                             page.get_by_placeholder("文件访问密码").click()
 6                             page.get_by_role("button", name="解密文件").click()
 7                         else:
 8                             page.goto(new_url)
 9                             page.get_by_placeholder("文件访问密码").click()
10                             page.get_by_role("button", name="解密文件").click()

(三)开始下载

playWright下载资源需利用 page.expect_download 函数。

下载完整代码如下:

 1 import time,os
 2 
 3 from playwright.sync_api import Playwright, sync_playwright, expect
 4 
 5 
 6 def run(playwright: Playwright) -> None:
 7     browser = playwright.chromium.launch(channel="chrome", headless=False) # 此处使用的是本地chrome浏览器
 8     context = browser.new_context()
 9     path = r'D:\PycharmProjects\wxauto\novelurl'
10     dir_list = os.listdir(path)
11     # 使用cookies
12     # cookies = []
13     # context.add_cookies(cookies)
14     page = context.new_page()
15     for i in range(len(dir_list)):
16         try:
17             novel_url = os.path.join(path, dir_list[i])
18             print(novel_url)
19             with open(novel_url) as f:
20                     for j in f.readlines():
21                         new_name,new_url = j.strip().split("分割")
22                         if "t00y.com" in new_url:
23                             page.goto(new_url)
24                         elif "?p=6195" not in new_url:
25                             page.goto(new_url+"?p=6195")
26                             page.get_by_placeholder("文件访问密码").click()
27                             page.get_by_role("button", name="解密文件").click()
28                         else:
29                             page.goto(new_url)
30                             page.get_by_placeholder("文件访问密码").click()
31                             page.get_by_role("button", name="解密文件").click()
32 
33                         with page.expect_download(timeout=100000) as download_info:
34                             page.get_by_role("button", name="立即下载").first.click()
35                             print(new_name,"开始下载")
36                         download_file = download_info.value
37                         download_file.save_as("./novel/"+dir_list[i][:-4]+"/"+download_file.suggested_filename)
38                         time.sleep(3)
39             os.remove(novel_url)
40             print(i+1,dir_list[i],"下载结束")
41         except:
42             print(novel_url,"出错")
43     time.sleep(60)
44     page.close()
45 
46     # ---------------------
47     context.close()
48     browser.close()
49 
50 
51 with sync_playwright() as playwright:
52     run(playwright)

(四)运行结果

使用playwright爬取魔笔小说网站并下载轻小说资源

 

TRANSLATE with x
English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
 
TRANSLATE with
COPY THE URL BELOW
Back
EMBED THE SNIPPET BELOW IN YOUR SITE
Enable collaborative features and customize widget: Bing Webmaster Portal
Back

到了这里,关于使用playwright爬取魔笔小说网站并下载轻小说资源的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 爬虫之牛刀小试(九):爬取小说

    今天爬取的是一本小说 代码如下: 接着写一个网页来表示出文本内容(此段代码由陈同学提供,不方便展示),效果如下: 最近新开了公众号,请大家关注一下。

    2024年01月25日
    浏览(45)
  • 带自动采集小说网站源码 小说听书网站源码 小说网站源码 带教程

    PTCMS可听书可下载的小说站源码 带自动采集和搭建视频教程 必装环境:Nginx(apache.iis也可),mysql,php5.6,memcached php5.6安装扩展memcache新建站点,注意新建时,PHP版本必须选择PHP5.6 安装教程 1.上传网站文件到网站目录,新建网站伪静态选择thinkphp 2.新建数据库。导入数据库文件PT

    2024年02月07日
    浏览(53)
  • 如何使用JS逆向爬取网站数据

    引言: JS逆向是指利用编程技术对网站上的JavaScript代码进行逆向分析,从而实现对网站数据的抓取和分析。这种技术在网络数据采集和分析中具有重要的应用价值,能够帮助程序员获取网站上的有用信息,并进行进一步的处理和分析。 基础知识: JavaScript解析引擎是爬虫JS逆

    2024年01月19日
    浏览(58)
  • Python爬虫:如何使用Python爬取网站数据

    更新:2023-08-13 15:30 想要获取网站的数据?使用Python爬虫是一个绝佳的选择。Python爬虫是通过自动化程序来提取互联网上的信息。本文章将会详细介绍Python爬虫的相关技术。 在使用Python爬虫之前,我们需要理解网络协议和请求。HTTP是网络传输的重要协议,它是在Web浏览器和

    2024年02月13日
    浏览(48)
  • python:爬取网络小说,看这一篇就够了

    说明:         本教程仅供于学习研究使用,请勿用于其他用途。 软件安装: 官网下载visual studio Visual Studio: 面向软件开发人员和 Teams 的 IDE 和代码编辑器 (microsoft.com) 点进网页后下拉找到个人免费版本。点击下载即可。 1:找到浏览器下载位置,2:选择打开下载文件位置

    2024年02月04日
    浏览(58)
  • Python网页爬虫爬取起点小说——re解析网页数据

    !!注意:我们获取到的网页响应数据,可能会与网页源代码中呈现的格式不同。因为有些网页文件是用JavaScript加载的,浏览器会自动将其解析成html文档格式,而我们获取到的内容是JavaScript格式的文档。所以获取到响应数据之后先要查看内容是否与网页源码中的一致,不一

    2024年02月04日
    浏览(65)
  • Python爬虫入门:使用selenium库,webdriver库模拟浏览器爬虫,模拟用户爬虫,爬取网站内文章数据,循环爬取网站全部数据。

    *严正声明:本文仅限于技术讨论与分享,严禁用于非法途径。 目录 准备工具: 思路: 具体操作: 调用需要的库: 启动浏览器驱动: 代码主体:  完整代码(解析注释): Python环境; 安装selenium库; Python编辑器; 待爬取的网站; 安装好的浏览器; 与浏览器版本相对应的

    2023年04月24日
    浏览(58)
  • 20230908_python练习_selenium模块爬取网页小说练习

    霍比特人小说爬取,使用 selenium 模块调用谷歌浏览器,无界面模式爬取小说网站信息,将数据按照每次2000字符在mysql中保存。

    2024年02月07日
    浏览(58)
  • 使用PyCharm编写Scrapy爬虫程序,爬取古诗词网站

    本次测试案例参考厦门大学数据库实验室 链接: https://dblab.xmu.edu.cn/blog/3937/ 在PyCharm中新建一个名称为“scrapyProject”的工程,如下图所示,Python解释器就选择我们之前已经安装好的 本次测试环境为 Python3.7.6 在“scrapyProject”工程底部打开Terminal窗口(如下图所示),在命令提示

    2024年02月11日
    浏览(46)
  • Python学习:使用selenium爬取某个网站时出现的问题

    最近,学习Python爬虫兴奋之时,突发奇想想去爬取网易云音乐的评论,根据所学,先找到评论定位的CSS选择器,然后什么也没有输出,又仔细检查了一下没有任何问题,后来一遍一遍查询资料发现,原来网页中有frame或者iframe时,需要在定位器的前面加这么一句: 这样再接着

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包