欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

selenium爬取某网站音频

程序员文章站 2022-05-04 17:16:43
...

最近老妈迷上了喜马拉雅的有声小说,被vip制裁,于是就想搞搞爬虫,喜马搞不了(QAQ),就去制裁盗版网站了(✔),这里记录一下。

盗版网站不稳定,代码需要根据网站的特性写
from selenium import webdriver
import requests
import time
import re

# 这里就是ua伪装头
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,"
                  " like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
# 正则的查找通配符
regax =r'controlslist="nodownload" οncοntextmenu="return false" id="player" src="(.*?)"'
# 定义使用Chrome浏览器
driver = webdriver.Chrome()
# 隐式时间,就是给它下面的页面定义一个超时时间,如果加载超过这个时间才会报错
driver.implicitly_wait(10)
# 定义鼠标滚轮的下滑js,就是当前页下滑的js,下面对界面操作的时候会用到
jsD = "scrollTo(0,500)"
# 定义鼠标滚轮的上滑js
jsU = "scrollTo(0,-400)"
# 制裁的网站地址,这里是总集界面的网址
url = "https://XXXXX.com/book/xxxx"
# 打开网址
driver.get(url=url)
# 定义要下载的章节,65集到367集
for i in range(65, 367):
	# 打印当前网址
    print(driver.current_url)
    # 这里是目标章节的element的Xpath路径,这里目的是模拟鼠标点击进入目标章节的事件
    driver.find_element_by_xpath(f'/html/body/div[1]/section/div[4]/div/a[{i}]').click()
    # 强制延时事件1秒
    time.sleep(1)
    # 转换窗口句柄,这里是进入了点击后的窗口
    driver.switch_to.window(driver.window_handles[-1])
    # 这里是设置第一次进入的时候要刷新一下
    if i == 65:
        time.sleep(1)
        driver.refresh()
    # 打印进入后的地址
    print(driver.current_url)
    # 这里没办法(菜),这个网站不能太快访问下一集,否侧会让你1小时后再访问,所以让它停在这儿两分钟。
    time.sleep(120)
    # 获取当前页面的全部的element源码
    res = driver.page_source
    # 利用正则匹配处生成的音频源文件的url,这个不好找!
    url_list = re.findall(regax, res)
    url = url_list[0]
    print(url)
    # 这里是如果存在音频url,则下载到当前录
    if url:
        respose = requests.get(url=url, headers=headers)
        with open(f"{i}.mp3", mode="wb") as f:
            f.write(respose.content)
    # 返回上一页
    driver.back()
    # 换为当前窗口的句柄
    driver.switch_to.window(driver.window_handles[-1])
    driver.refresh()
    # 上下滚动一下界面
    time.sleep(1)
    driver.execute_script(jsD)
    time.sleep(1)
    driver.execute_script(jsU)
    time.sleep(1)
    driver.execute_script(jsD)
    time.sleep(1)
# 完成关闭
driver.quit()
相关标签: 小项目 脚本