楼主: heartlocker
1415 0

五分钟学会Python自动化和爬虫 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0.0161
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
65 点
帖子
7
精华
0
在线时间
6 小时
注册时间
2015-12-6
最后登录
2022-9-26

楼主
heartlocker 发表于 2022-8-10 10:39:40 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
用Markdown发布解析有问题。 重新发吧。 。。
看完Al Sweigart的《Automate the Boring Stuff with Python》,附上网页原版https://automatetheboringstuff.com/喜欢实体书的可以豆瓣中文版。 这里不介绍统计、画图、机器学习了。 讲一下另一个更加有趣和实用的功能,自动化。 当然你也可能把它用来当做爬虫。

下面的例子教大家如何自动下载YouTube视频。 同样你也可以修改一下用来下B站视频,[参考]

简单介绍一下 Clicknium是2022年最新的Python自动化库,可以用来自动化操作网页和Windows App. 采用可视化操作和代码结合的方式实现自动化。
pytube是一个用来下载youtube视频的Python库。 只要用视屏的link就可以下载(当然网首先得通)

确保你有:
- 一个Python3.7+的环境
- VS Code
- 梯子

配置Clicknium


1. 在VS Code的插件市场中搜索并安装Clicknium


在VS Code右侧点击Clicknium的图标进入Welcome页面, 跟着welcome 点击按钮安装module, chrome的插件和注册账号。  




### Code

用VS Code 创建一个Python文件,比如 `youtube.py`
可以通过F5运行。 这行代码Clicknium会自动打开Chrome浏览器,并且进入油管的首页。
  1. from clicknium import clicknium as cc, locator

  2. def main():
  3.     tab = cc.chrome.open("https://www.youtube.com")

  4. if __name__ == "__main__":
  5.     main()
复制代码

抓取

这个时候,我们要下载霉霉的视频, 那就得先打开霉霉视频页,类似把大象塞进冰箱:

步骤:

1.  在搜索框输入Taylor Swift
2.  点击搜索按钮
3.  点击进入霉霉首页
4.  点击进入霉霉视频页

这里一个涉及到四个元素:搜索框, 搜索按钮,搜索结果中的艺人名字,视频页切换按钮

Clicknium中使用Locator来定位UI元素, 并且提供了Recorder来生成Locator。
我们使用上面的代码打开油管页面然后打开VS Code调用Recorder。


调用Recorder

点击上图VS Code中Locator tab上这个小小的capture按钮启用Recorder。这个按钮比较隐蔽。如果没看到LOCATORS 这个tab,点击右上角的三个点勾选Locator。 将鼠标移动到搜索栏上,会自动高亮显示input。按住Ctrl+Click(鼠标右键单击)即可抓取 搜索框。 同样的方法 抓取**搜索按钮**,和下图右上角**Taylor Swift的链接**。
)

Youtube页



Recorder

每次抓取都会在Recorder中生成一个UI元素对应的locator,可以对其进行重命名。完成后点击Complete。

然后回到VS Code
  1. from clicknium import clicknium as cc, locator
  2. from clicknium.common.enums import *

  3. def main():
  4.     urlArrary = []
  5.     tab = cc.chrome.open("https://www.youtube.com")
  6.     tab.find_element(locator.chrome.youtube.searchBar).set_text(
  7.         "Taylor Swift", by='sendkey-after-click')
  8.     tab.find_element(locator.chrome.youtube.button_search_icon_legacy).click()
  9.     tab.find_element(locator.chrome.youtube.TS).click()

  10. if __name__ == "__main__":
  11.     main()
复制代码

通过find_element函数传入对应locator定位到某个UI元素然后利用set_text方法将“Taylor Swift”写入搜索框。

下一行是相同的方法定位到搜索按钮,然后用click函数表示鼠标点击。TS表示搜索结果中taylor Swift的连接。

运行上面的code,进入霉霉的主页,我们采用相同的方法进入视频列表。



视频列表

在上图的列表中我们需要拿到每个视频的地址。 这个地址可以通过locator取得。 我们不可能给每个视频都抓取一个Locator,这里使用Clicknium Recorder一个非常强大的功能 Similar elements。点击下图的按钮后, 同样采用Ctrl+Click的方式,Clicknium就能自动识别的到类型的元素,生成一个locator。




因为视频列表是异步加载的, 我们需要使用wait_appear等待locator出现。因为使用similar elements抓取了多个视频,这个locator指向了多个视频所以使用find_elements方法。这个方法会返回一个UiElement的List。我们可以href从中获取到视频的相对路径,拼接上油管的地址就能得到完整的URL。

有了完整url,就可以使用Pytube下载视频了。 Pytube可以根据指定的参数下载不同分辨率的视频,需要注意高画质是video codec 和audio codec分开的。 具体可以参考Working with Streams and StreamQuery。 这里我们下载1080p的版本,下载路径可以修改SAVE_PATH。可是使用相同的方法实现视频上传。 反响好我就再写一篇。

下面是完整的代码:
  1. from pytube import YouTube
  2. from clicknium import clicknium as cc, locator
  3. from clicknium.common.enums import *


  4. def downloadVideo(url):
  5.     SAVE_PATH = "C:\\Users\\zrt\\Downloads\\Youtube"
  6.     try:
  7.         # object creation using YouTube
  8.         # which was imported in the beginning
  9.         print("download url" + url)  # to handle exception

  10.         yt = YouTube(url)
  11.         yt.streams.filter(res="1080p").first().download(output_path=SAVE_PATH)
  12.         # yt.streams.get_by_itag(401).download(output_path=SAVE_PATH)
  13.     except:
  14.         print("Connection Error")  # to handle exception

  15.     # filters out all the files with "mp4" extension
  16.     print('Task Completed!')


  17. def main():
  18.     urlArrary = []
  19.     tab = cc.chrome.open("https://www.youtube.com")
  20.     tab.find_element(locator.chrome.youtube.searchBar).set_text(
  21.         "Taylor Swift", by='sendkey-after-click')
  22.     tab.find_element(locator.chrome.youtube.button_search_icon_legacy).click()
  23.     tab.find_element(locator.chrome.youtube.TS).click()
  24.     tab.find_element(locator.chrome.youtube.div_video).click()
  25.     tab.wait_appear(locator.chrome.youtube.a_video_title)
  26.     vidioTitles = tab.find_elements(locator.chrome.youtube.a_video_title)
  27.     for locat in vidioTitles:
  28.         url = "https://www.youtube.com" + locat.get_property("href")
  29.         urlArrary.append(url)
  30.     tab.close()

  31.     for v in urlArrary:
  32.         downloadVideo(v)


  33. if __name__ == "__main__":
  34.     main()
复制代码

参考:

[Clicknium]

[Pytube]



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:python 自动化 五分钟 connection exception Python 自动化 爬虫

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-4 02:22