Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from requests_html import HTMLSession, requests
- from typing import Union
- from pathlib import Path
- import concurrent.futures
- import logging
- class JitasheDownloader:
- BASE_URL = "https://www.jitashe.org"
- def __init__(self):
- self.session = HTMLSession()
- def _search(self, keyword) -> Union[str, None]:
- """查询页,如有查询结果返回第一个,否则返回 None"""
- search_req = self.session.get(f"{self.BASE_URL}/search/tab/{keyword}")
- search_first = search_req.html.find(
- "#threadlist > div > div.text > a", first=True
- )
- first_elem_url = (
- search_first and self.BASE_URL + search_first.element.attrib["href"]
- )
- return first_elem_url
- def _download(self, keyword, out_dir) -> None:
- """根据查询页返回结果下载乐谱"""
- search_url = self._search(keyword)
- if search_url:
- score_req = self.session.get(search_url)
- title = score_req.html.find("h1.gb-title", first=True).text
- scores_url = [
- url.split("!")[0]
- for url in score_req.html.xpath("//ignore_js_op/picture/img/@src")
- ]
- if scores_url:
- download_path = Path(out_dir) / title
- download_path.mkdir(parents=True, exist_ok=True)
- filename_width = len(str(len(scores_url)))
- for i, url in enumerate(scores_url, 1):
- file = download_path / f"{title}-{i:0{filename_width}}.jpg"
- logging.debug(f"下载中 - {file.name}")
- file.write_bytes(self.session.get(url).content)
- logging.info(f"完成下载:{title}")
- else:
- logging.info(f"无图片谱: {keyword}")
- else:
- logging.info(f"搜索词「{keyword}」下无对应结果")
- logging.debug("")
- def download(self, keyword, out_dir="./output", max_retry=3) -> None:
- """下载乐谱(支持重试)"""
- for i in range(max_retry):
- try:
- self._download(keyword, out_dir=out_dir)
- break
- except requests.RequestException:
- logging.error(f"重试第{i + 1}次下载 - {keyword}")
- continue
- else:
- logging.error(f"{max_retry}次尝试下载失败 - {keyword}")
- def run_instance(keyword):
- downloader = JitasheDownloader()
- downloader.download(keyword, out_dir="./output", max_retry=5)
- if __name__ == "__main__":
- logging.basicConfig(
- format="[%(asctime)s.%(msecs)03d] [%(levelname)-5s] %(message)s",
- level=logging.DEBUG,
- datefmt="%T",
- )
- logging.getLogger("urllib3.connectionpool").setLevel(logging.CRITICAL)
- song_list = [
- "七里香", "夜曲", "夜的第七章", "遇见", "十年", "黄昏", "富士山下", "血腥爱情故事", "江南", "晴天",
- "至少还有你", "千里之外", "你就不要想起我", "发如雪", "我怀念的", "唯一", "浮夸", "一路向北", "以父之名", "欧若拉",
- "水星记", "东风破", "一直很安静", "天黑黑", "爱在西元前", "青花瓷", "绅士", "三国恋", "爱情转移", "霍元甲",
- "小情歌", "开始懂了", "隐形的翅膀", "可惜没如果", "高尚", "止战之殇", "勇气", "搁浅", "我们的爱", "枫",
- "记事本", "花田错", "如果你也听说", "只是太爱你", "说好的幸福呢", "如愿", "轨迹", "西海情歌", "美人鱼", "双截棍",
- "稻香", "可", "开不了口", "那是你离开了北京的生活", "退后", "我好想你", "钟无艳", "七友", "蒲公英的约定", "逆光",
- "不能说的秘密", "小幸运", "珊瑚海", "我不配", "断点", "白色风车", "我好像在哪见过你", "不为谁而作的歌", "崇拜", "无赖",
- "红玫瑰", "动物世界", "青花", "花海", "修炼爱情", "最长的电影", "人质", "日落大道", "就是爱你", "一千年以后",
- "你还要我怎样", "背叛", "下雨天", "蜗牛", "大城小爱", "安静", "老街", "断了的弦", "Lydia", "我最亲爱的",
- "陪你去流浪", "寂寞沙洲冷", "月牙湾", "喜帖街", "听妈妈的话", "一半", "最佳损友", "亲爱的那不是爱情", "痴心绝对", "本草纲目",
- "布拉格广场", "父亲写的散文诗", "最后的战役", "在他乡", "春秋", "走马", "流年", "雨天", "你在终点等我", "明年今日",
- "意外", "山丘", "温柔", "失恋无罪", "寓言", "好久不见", "旅行的意义", "把你揉碎捏成苹果", "你瞒我瞒", "人来人往",
- "越来越不懂", "简单爱", "我要快乐", "想自由", "小半", "千年之恋", "杀破狼", "泡沫", "安和桥", "暧昧",
- "暧昧", "相依为命", "浪费", "龙卷风", "大风吹", "忽然", "Melody", "下一站天后", "倒带", "你的背包",
- "关键词", "年少有为", "模特", "小小", "旋木", "淘汰", "愚人的国度", "红色高跟鞋", "K歌之王", "龙战骑士",
- "暗号", "失落沙洲", "独角戏", "母系社会", "匆匆那年", "电灯胆", "玫瑰少年", "可惜不是你", "怪咖", "斑马斑马",
- "心中的日月", "你不是真正的快乐", "爱爱爱", "如果当时", "爱", "你要的爱", "李白", "画心", "多远都要在一起", "前所未见",
- "幻听", "爱在记忆中找你", "野孩子", "罗生门", "吴哥窟", "降温", "寂寞寂寞就好", "暗香", "尚好的青春", "宁夏",
- "Kiss Goodbye", "浪子回头", "分手快乐", "慢慢等", "勿忘心安", "生活因你而火热", "曹操", "说谎", "野蔷薇", "雅俗共赏",
- "心雨", "起风了", "不得不爱", "庐州月", "单身情歌", "何必在一起", "一荤一素", "生如夏花", "木偶人", "我的地盘",
- "三年二班", "四面楚歌", "会有那么一天", "我不难过", "现在我很幸福", "勇", "南方姑娘", "美丽世界的孤儿", "残酷月光", "分手总在下雨天",
- "这世界那么多人", "克卜勒", "披着羊皮的狼", "无赖", "魔鬼中的天使", "生生", "可惜我是水瓶座", "理想三旬", "绿洲", "新地球",
- "爱与诚", "手心的蔷薇", "流沙", "黑色幽默", "残酷游戏", "成都", "情非得已", "他一定很爱你", "贝加尔湖畔", "爸,我回来了",
- "黑色毛衣", "爱疯了", "左边", "风吹麦浪", "将军令", "吻得太逼真", "追光者", "最佳歌手", "旧街角", "耿耿于怀",
- "情歌", "大眠", "那些你很冒险的梦", "杀死那个石家庄人", "男孩", "丝路", "借口", "倔强", "清明雨上", "世界末日",
- "忍者", "没有理想的人不伤心", "精舞门", "天使", "反转地球", "扯", "手放开", "我会好好的", "不该", "下一个天亮",
- "像梦一样自由", "烂泥", "回到过去", "连名带姓", "喜剧之王", "偏爱", "一丝不挂", "落叶归根", "爱你", "烟火里的尘埃",
- "天真有邪", "毁人不倦", "方圆几里", "将故事写成我们", "好心分手", "涩", "无人知晓", "姗姗", "春泥", "反方向的钟",
- "舍不得", "我的光", "大哥", "心酸", "春风十里", "依兰爱情故事", "身骑白马", "思念是一种病", "你要的全拿走", "独家记忆",
- "爱得太迟", "第一次爱的人", "如果我变成回忆", "我很快乐", "爱不释手", "大舌头", "嘉宾", "想太多", "伤心1999", "半兽人",
- "骑士精神", "爸爸妈妈", "世界上不存在的歌", "你那么爱她", "再见", "怎样", "亲爱的", "野心", "不值得", "你听得到",
- "给我一个理由忘记", "国王与乞丐", "南山南", "一样的月光", "爱丫爱丫", "陌生人", "慕容雪", "我爱他", "拆东墙", "雨爱",
- "光年之外", "分裂", "异乡人", "麻雀", "曾经的你", "类似爱情", "情人", "蓝莲花", "必杀技", "干杯",
- "苦瓜", "夏天的风", "黑夜问白天", "半生出走", "不搭", "真实", "星晴", "表白", "梁山伯与茱丽叶", "词不达意",
- "别找我麻烦", "无名之辈", "十点半的地铁", "你给我听好", "望", "他不懂", "好朋友的祝福", "惊鸿一面", "千年泪", "米兰的小铁匠",
- "郭源潮", "Amen", "亲亲", "寂寞在唱歌", "天外来物", "会长大的幸福", "心墙", "我要你", "星空", "易燃易爆炸",
- "私奔", "夜空中最亮的心", "董小姐", "燕归巢", "天后", "我还想她", "Love Song", "理想", "匆匆", "当你",
- "宝贝", "达尔文", "如果有来生", "光明", "茉莉雨", "我们俩", "推开世界的门", "一个人", "猜不透", "呓语",
- "路过人间", "够钟", "烟花易冷", "你啊你啊", "离开地球表面", "幼稚完", "处处吻", "奔跑", "合久必婚", "眼泪成诗",
- "当爱在靠近", "我们说好的", "等我回家", "游乐场", "爱着爱着就永远", "街角的祝福", "你被写在我的歌里", "不将就", "乌鸦", "半岛铁盒",
- "乱舞春秋", "上海一九四三", "一眼万年", "你曾是少年", "算你狠", "暧昧", "我知道", "那么骄傲", "断桥残雪", "大鱼",
- "小永远", "蓝色土耳其", "缘分一道桥", "给十年后的我", "深呼吸", "错的人", "指望", "月亮之上", "鼓楼", "放生",
- "默", "步步", "作曲家", "来自天堂的魔鬼", "我的天空", "孤独患者", "谢谢你", "借", "会痛的石头", "天下",
- "对等关系", "心跳", "失忆的金鱼", "喜欢寂寞", "错过", "偷故事的人", "三人游", "像风一样自由", "被驯服的象", "皆可",
- "我是真的爱上你", "鱼", "彩虹", "蝴蝶泉边", "煎熬", "看我72变", "后来的我们", "信仰", "愿望", "外婆",
- "甜甜的", "需要人陪", "看月亮爬上来", "天亮了", "醉赤壁", "下个,路口,见", "听你说", "岁月神偷", "我很忙", "月光",
- "伤心的人别听慢歌", "好好说再见", "不醉不会", "遗失的心跳", "十万毫升泪水", "我们都被忘了", "戒烟", "香格里拉", "野子", "让",
- "异类", "Forever Young", "仰望", "七月上", "su san说", "上心", "爱久见人心", "你值得更好的", "怎么唱情歌", "你一定要幸福",
- "你不在", "毁人不倦", "我喜欢上你时的内心活动", "洛城", "逃亡", "笑忘书", "专属天使", "空白格", "七月七日晴", "一个人的行李",
- "龙的传人", "下沙", "寂寞的季节", "告诉我", "爱的主打歌", "阳光下的星星", "刚刚好", "沿海地带", "咕叽咕叽", "梯田",
- ]
- with concurrent.futures.ThreadPoolExecutor(max_workers=100) as executor:
- executor.map(run_instance, song_list)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement