为什么费劲滴学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吧!