前言:经过大量的收集资料,发现因为seleuninm的更新,所有的教程都各不相同,因此自己花了半天时间学习了完整的一个爬取过程,并分享一个用Chrome爬取的示例。

一、环境准备

python>=3.6都没有问题,我使用的是python3.9

官方下载:Download Python | Python.org

二、库安装

1、安装selenium

pip install selenium

2、安装浏览器模拟webdriver(谷歌插件需要科学上网)

Firefox:https://github.com/mozilla/geckodriver/releases/
Chrome:https://sites.google.com/a/chromium.org/chromedriver/

三、运行模拟浏览器部分

1、启动浏览器

# 实例化一款浏览器
from selenium import webdriver
driver = webdriver.Chrome()

2、向某地址发送请求

这里例如获取原神宵宫的语音

# 对指定的url发起请求
driver.get('https://www.voistock.com/ja/playlist/detail.php?pk=BZUFGBJNR')

到这一步,我们已经可以模拟登录浏览器的操作,下一步就是寻找文件获取

四、获取文件

1、获取文件名称

(1)在浏览器中打开页面,按f12或者右击-检查,审查元素。

(2)点击左上角的小图标,再单击文件名,就可以定位名字的位置

(3)在元素中右击-复制-复制Xpath路径,可以得到该名字的Xpath路径

/html/body/div[1]/div/div[4]/div/div[2]/ul/li[1]/article/div[2]/div[1]/p

(4)模拟浏览器中,通过Xpath获取文件名

# 获取元素,带.text获取纯文本
name =driver.find_element(By.XPATH,'/html/body/div[1]/div/div[4]/div/div[2]/ul/li[1]/article/div[2]/div[1]/p').text

注:如果这里报错 DeprecationWarning: find_element_by_* commands are deprecated. Please use find_element() instead

那么因为你用了如下旧的写法,这种写法在新版本已经启用,如果使用这个方法请退selenium的版本

# 旧方法
name =driver.find_element_by_xpath,'/html/body/div[1]/div/div[4]/div/div[2]/ul/li[1]/article/div[2]/div[1]/p').text

如果报错 NameError: name 'By' is not defined

那记得导入by

from selenium.webdriver.common.by import By

(5)多名字的获取

我们不可能一个一个获取全部的xpath(那还不如手动保存),这里写一个for函数就可以

# 这里为音频的数量,建议取个很大的值,以便全覆盖
for n in range(1,223):# .format来替换str的内容name =driver.find_element(By.XPATH,'/html/body/div[1]/div/div[4]/div/div[2]/ul/li[{}]/article/div[2]/div[1]/p'.format(n)).text

这样每一次循环里,都能获取一次对应的名字,接下来就该获取文件了

2、获取音频

此前我尝试过使用requests.get或post来获取,但都返回了一个错误的json,检查发现adiuo元素里有preload="none",音频文件必须要点击后才能加载,这样就没办法直接获取音频,因此我选择了使用selenium库来模拟点击来获取文件。

同上定位语音点击按钮的xpath(默认在循环里了),定位到链接位置,因为是该元素的src元素,我们使用.get_attribute('src')来获取,这里如果在xpath中是没办法获取的,需要注意。

由于获取到url,我们便可以通过requests.get请求下载文件了

import requests
# 点击按钮driver.find_element(By.XPATH,r'/html/body/div[1]/div/div[4]/div/div[2]/ul/li[{}]/article/div[2]/div[1]/div'.format(n)).click()
# 获取音频urlurl = driver.find_element(By.XPATH,"/html/body/div[1]/div/div[4]/div/div[2]/ul/li[{}]/article/div[2]/div[1]/div/span/audio".format(n)).get_attribute("src")
# 下载音频并命名data = requests.get(url).contentwith open(file,'wb') as fp:fp.write(data)print(name,'下载成功')

五、模拟其他的帮助操作

爬取总是会遇到各种问题或者需要优化的地方

1、名字出现空值

原因:要不然就是xpath路径错误,重新检查一下是否每一个路径都是如此,要不然就是网络过慢,还没有获取成功就开始下载命名,我们可以通过隐性等待来解决,下示例效果是如果没有加载完成,最多等待10秒

    driver.implicitly_wait(10)

2、出现404 not fount

原因:具体不太清楚,但是我在get请求后面加了个头就解决了

hearders={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36 Edg/108.0.1462.54'
}
data = requests.get(url,headers=hearders).content

3、下载位置和名字?

原因:这个非常基础,如果不会建议找其他教程....下面给个我自己的示例

# 我用的绝对路径,确保路径存在
file_name_old = 'E:\音乐\原神\宵宫' # 文件下载路径
file_path_old = os.path.dirname(file_name_old)
file = os.path.join(file_path_old,'宵宫',name+'.mp3')

4、如何跳过已经下载的文件?

原因:使用os判断即可

 # file为路径+名字,在for循环里if os.path.exists(file)==True:print(name+'已存在')continue 

六、写个启动脚本

不双击启动怎么是好脚本呢()

假设py文件名为test.py,新建一个txt文件,双击写入

python test.py

保存退出,重命名后缀为.bat(名字随便)

双击启动

参考文章:

1、Python+Selenium基础入门及实践 - 简书

2、Xpath简明教程(十分钟入门)

3、find_element_by_xpath()被弃用解决方案_异想实验室的博客-CSDN博客_find_element_by_xpath

4、Selenium等待时间——隐性等待(implicitly_wait())_@林夕的博客-CSDN博客_implicitly_wait()

5、Python continue 语句 | 菜鸟教程

win爬取网址获取宵宫语音,使用python的selenium库来模拟点击相关推荐

  1. python爬取视频自动播放_介绍一个python视频处理库:moviepy

    处理视频是一个常见的需求.那么在python中如何用代码处理视频呢?最近我无意间发现了一个很好用的python视频处理库moviepy,其使用起来简单易用,而且功能比较强大,这里记录一下分享给大家. ...

  2. java怎样模拟点击网页,笔者操作Java+selenium实现网站模拟点击和页面数据爬取

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到Java+selenium实现网站模拟点击和页面数据爬取的问题,如果我们遇到了Java+selenium实现网站模拟点击 ...

  3. 通过python 爬取网址url 自动提交百度

    通过python 爬取网址url 自动提交百度 昨天同事说,可以手动提交百度这样索引量会上去. 然后想了下.是不是应该弄一个py 然后自动提交呢?想了下.还是弄一个把 python 代码如下: imp ...

  4. Python爬取王者荣耀全英雄台词语音及对应的文本

    文章目录 写在前面 环境 网页分析 爬虫代码实现及说明 写在前面 很久之前就萌生了想爬取王者荣耀英雄台词语音,因为语音资源不是很好找,从官网获得的话,也比较麻烦.最近刚好有朋友需要语音素材,于是我就顺 ...

  5. 使用进程池模拟多进程爬取url获取数据,使用进程绑定的回调函数去处理数据...

    1 # 使用requests请求网页,爬取网页的内容 2 3 # 模拟使用进程池模拟多进程爬取网页获取数据,使用进程绑定的回调函数去处理数据 4 5 import requests 6 from mu ...

  6. python爬虫实战1:批量爬取网址图片

    1.爬虫基础知识 目前,爬虫的相关知识了解了以下这么多. 2.爬取图片的步骤 学习了很多视频教程,基本介绍爬虫都是主要分3步: 1.请求网页 2.解析网页 3.保存图片 3.爬虫实战 唯有实战,才能提 ...

  7. [pythonjava爬虫实战]-爬取学院老师信息之-java版本python版本

    文章目录 Java 版本 思路: 预备工作: 简述 代码 python版本 代码 这个实战文章仅作为自己学习笔记记录:使用java和python爬取相同的内容,由于爬取内容涉及个人信息,去除了敏感信息 ...

  8. python爬取小说写入txt_对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力...

    原标题:对新笔趣阁小说进行爬取,保存和下载!这就是Python的魅力 以前挺爱在笔趣阁看小说的(老白嫖怪了) 现在学了一点爬虫技术,就自然而然的想到了爬取笔趣阁的小说 也算锻炼一下自己的技术,就以新笔 ...

  9. 以爬取知乎为例,进行python 多进程爬虫性能分析

    以爬取知乎为例,进行python 多进程爬虫性能分析 如果对多进程multiproessing模块不熟悉,请先浏览 python 使用multiprocessing模块进行多进程爬虫 问题背景: 爬取 ...

最新文章

  1. LeetCode Linked List Cycle II
  2. concurrent(六)同步辅助器CyclicBarrier 源码分析
  3. 低效能人士的七个习惯
  4. linux 下 upx 脱壳笔记
  5. 爬虫---Beautiful Soup 通过添加不同的IP请求
  6. BZOJ-1951 古代猪文 (组合数取模Lucas+中国剩余定理+拓展欧几里得+快速幂)...
  7. linux查看cpu占用率_Linux 性能查看
  8. docker容器之RabbitMQ
  9. 多个线程交替打印ABC,打印10次
  10. 支付那些事儿III---一个BD汪眼中的产品II
  11. 白帽子讲Web安全学习之XSS
  12. 算法—青蛙跳台阶问题汇总
  13. DOS下Debug工具使用
  14. 超级计算机预测2月有雪寒潮,寒潮连续南下,冷冬毋庸置疑?权威专家:到明年二月底最终确定...
  15. 如何通过RSS来订阅天气预报
  16. KeyTool与OpenSSL生成证书
  17. 使用Outlook Mail App滑动操作快速处理邮件
  18. 使用 HBuilder X 将微信 小程序 项目 打包
  19. vue 高德地图 定位插件 地图实例插件 获取点击的地方的经纬度和具体地址
  20. GLFore动平衡仪的可选软件ADS SOFTWARE

热门文章

  1. 深天马A第一季度净利润为2.89亿元 同比减少35.4%
  2. 用c语言计算3个数的和与积
  3. 用它!用它!轻松实现线上线下门店一体化运营!
  4. em算法怎么对应原有分类_EM算法
  5. python爬虫成长之路(一):抓取证券之星的股票数据
  6. Linux常用系统工作命令、管理输入输出以及vim、管道的相关用法
  7. php+vue 南天在线求助系统
  8. 【原创】Xilinx:K7 DDR3 IP核配置教程
  9. 项目经理之如何做好项目经理
  10. 微信授权登录(H5为例)