准备工作

为什么费劲滴学Python呢?这......是个问题:

python是一门上手非常快的编程工具,菜鸟也能编出诸如打开多个搜索标签、批量修改文件名、批量下载多主题图片的程序......所以学起来灰常有成就感:

 

# 批量修改文本文件

import re

# 指定文件所在路径
# 源文件(原来的答案)
origFile = './originalAnswer.rtf'
# 目标文件(修改后的答案)
alteredFile = './alteredAnswer.rtf'

# 读取原来的答案
original = open(origFile, 'r')
text = original.read()

# 模式就是:数字 . 除了回车键的其他字符若干 回车符
pattern = r"(\d+\..*)\n"
# 将回车换成tab(第一个\t)
newText = re.sub(pattern, r'\1\t\t', text)

# 修改好的答案写到文件去
altered = open(alteredFile, 'w')
altered.write(newText)

# 关闭文件
original.close()
altered.close()
# Opens several Google search results.
import requests
import webbrowser
import bs4

# 指定关键字
keyword = "魔戒"
# 指定点开几个链接
num = 5

res = requests.get('http://google.com/search?q=' + keyword)
# res = requests.get('https://www.sogou.com/web?query=' + keyword)
# res = requests.get('http://zhihu.sogou.com/zhihu?query=' + keyword)
# res = requests.get('https://www.baidu.com/s?&wd=' + keyword)

res.raise_for_status()

# Retrieve top search result links.
soup = bs4.BeautifulSoup(res.text, "lxml")

# Open a browser tab for each result.
linkElems = soup.select('.r a')

numOpen = min(num, len(linkElems))
browser = webbrowser.get()
for i in range(numOpen):
    browser.open('http://google.com' + linkElems[i].get('href'))
#搜索引擎下载图片

# 引入下载图片的模块
from icrawler.builtin import BaiduImageCrawler

# 引入文件处理的模块
from pathlib import Path

# 指定图片存放位置(.指当前位置,就是程序文件所在的路径,可以修改为个性化路径
parentFolder = './image'
f = Path(parentFolder)

# 指定要搜索的关键字列表
keywords = ['林青霞', ‘张曼玉', ‘王祖贤’, "钟楚红"]

for keyword in keywords:
    
    # 创建以关键字命名的文件夹	
    destFolder = f.joinpath(keyword)
    try:
        f.mkdir(777, keyword)
    except FileExistsError:
        print("File existed already!”)

  # 调用模块,指定个性化参数(destFolder就是指定的图片存储位置),生成对象
    baidu_crawler = GoogleImageCrawler(storage={'root_dir': str(destFolder)})

    #   keyword参数指定在图片引擎上输入的搜索关键字,max_num指定每个图片关键字的下载数量
    baidu_crawler.crawl(keyword=keyword, offset=0, max_num=3, min_size=None, max_size=None)
# 整理文件(分级建立文件夹、批量修改文件名)

from pathlib import Path
import re

path = "./自然科学童话之旅"
p = Path(path)

for f in [x for x in p.iterdir() if x.is_file()]:
	name = f.name
	if name[0]!='.':
		nameRegex = re.compile(r'\d_(\w+)_(\w+-?\w*)_(.+)')  # 范式,为了提取二级目录名
		mo = nameRegex.search(name)
		q = p.joinpath(mo.group(1))
		if not q.exists():
			q.mkdir()	# 建立第二季目录

		q = q.joinpath(mo.group(2))
		if not q.exists():
			q.mkdir()	# 建立第三级目录

		q = q.joinpath(mo.group(3)) # 目标文件
		f.rename(q)	# 移动改名

看python程序如何控制计算机将简单重复耗时的工作接手过去,在这个视频中您将看到python程序将我们做好的播放列表中的歌曲链接提取出来,然后模拟人类打开浏览器输入网址点击搜索和下载,在没有人类干预的情况下自动自觉的完成我们交代的任务:

 

 

 

# 指挥keepvid自动批量下载youtube上的视频,这个是很久以前写的,估计运行不了了,只供参考哈

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
import requests, os
from bs4 import BeautifulSoup
import pyperclip


def youtube_spider(url):
	# 将youtube playlist保存的playlist的名称和里面的各个链接和视频名称取出来

	links = []  # 保存playlist中歌曲在youtube上的播放链接
	titles = [] # 保存plylist中歌的歌名
	source_code = requests.get(url)
	source_code.raise_for_status()
	plain_text = source_code.text
	soup = BeautifulSoup(plain_text, "html.parser")

	# 分析出播放列表的名字
	dirname = soup.findAll('h1')[1].string
	dirname = dirname.strip()

	# 把播放列表中的歌曲链接和歌曲名顺序分析出来,添加到列表中
	for link in soup.findAll("a", {'class':"pl-video-title-link yt-uix-tile-link yt-uix-sessionlink spf-link " }):
		href = "http://www.youtube.com" + link.get('href')
		href = href.strip()
		title = link.string
		title = title.strip()
		links.append(href)
		titles.append(title)
	#
	return links, titles, dirname

# 从keepvid函数获得video的下载地址,在这里把video下载到指定文件夹
def download_video(video_link, title):

	log_file.write( "Downloading " + title + " from " + video_link + " \n")
	videoFile = open(title, 'wb')

	res = requests.get(video_link)
	res.raise_for_status()

	for chunk in res.iter_content(100000):
		videoFile.write(chunk)
	videoFile.close()

	log_file.write("Succeed!!!\n")

# 从剪贴板上得到youtube playlist的地址,如果忘记拷贝地址到剪贴板就会出错
# address = pyperclip.paste()
address = 'https://www.youtube.com/playlist?list=PLhbhqgpAIh2mJr01xkPJeZplfPDUgnbCz'
print("Downling link and title of videoes from youtube...")
links, titles, listname = youtube_spider(address)

# youtube上playlist的名字用作目标文件夹的名字
print("Setup destination folder for videoes")
os.makedirs(listname, exist_ok=True)
os.chdir(listname)
log_file = open('download_log', 'w', encoding='utf-8')
log_file.write(listname + " downloading log: \n")

# 打开keepvid网页
print("Open keepvid webpage...")
driver = webdriver.Chrome()
driver.get("http://www.keepvid.com")

# 在搜索栏中输入视频链接,搜索视频文件的下载链接
print("Search video...")
for link,title in zip(links,titles):
	# 在keepvid的搜索框填入链接,提交,得到目标视频的下载网页
	elem = driver.find_element_by_name("url")
	elem.clear()
	elem.send_keys(link)
	elem.send_keys(Keys.RETURN)
	assert "Please check the URL and try again." not in driver.page_source

	# 提交后等待搜索页面完全载入(标志就是歌曲名称换新的了)
	wait = WebDriverWait(driver, 50)

	print(driver.current_url)
	# 通过CSS Selector
	dl_elem = driver.find_element_by_xpath("/html/body/div[3]/div/div[1]/div[2]/table[1]/tbody/tr[2]/td[4]/a")

	dl = dl_elem.get_attribute("href")
	# dl_title = dl_elem.get_attribute("download")

	title += '.mp4'
	download_video(dl, title)

driver.close()
log_file.close()

 

小伙伴们,跟我一起学习python吧!

1 1 1 1 1 1 1 1 1 1 Rating 3.95 (10 Votes)