文章目录

  • 这只爬虫的由来
  • 先看效果
    • 文件结构:
    • MarkDown模板
    • 生成的MarkDown文件
  • 大致思路
  • 上代码之前
    • 我的Python环境:
    • 主要用到的知识
  • 上代码
    • 爬虫代码
    • MarkDown模板
  • 最后:

这只爬虫的由来

学英语,备战CET6。

想学点好玩的、有意思的英语文章。

而且,想用博客记录一下TED学习笔记。

但又不想做一些机械操作——比如:

  1. 复制粘贴视频英语/中文脚本(transcript)。
  2. 给博客设置一级标题、二级标题等

我拍一拍脖子之上:
“要不就写个爬虫,生成MarkDown文件,直接用代码完成一些机械的博客内容!”

说干就干!


先看效果

文件结构:

MarkDown模板

生成的MarkDown文件

大致思路

思路很简单:

#mermaid-svg-yYfLeGiYHMkfFGTp .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .label text{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .node rect,#mermaid-svg-yYfLeGiYHMkfFGTp .node circle,#mermaid-svg-yYfLeGiYHMkfFGTp .node ellipse,#mermaid-svg-yYfLeGiYHMkfFGTp .node polygon,#mermaid-svg-yYfLeGiYHMkfFGTp .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yYfLeGiYHMkfFGTp .node .label{text-align:center;fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .node.clickable{cursor:pointer}#mermaid-svg-yYfLeGiYHMkfFGTp .arrowheadPath{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-yYfLeGiYHMkfFGTp .flowchart-link{stroke:#333;fill:none}#mermaid-svg-yYfLeGiYHMkfFGTp .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-yYfLeGiYHMkfFGTp .edgeLabel rect{opacity:0.9}#mermaid-svg-yYfLeGiYHMkfFGTp .edgeLabel span{color:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-yYfLeGiYHMkfFGTp .cluster text{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-yYfLeGiYHMkfFGTp .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yYfLeGiYHMkfFGTp text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-yYfLeGiYHMkfFGTp .actor-line{stroke:grey}#mermaid-svg-yYfLeGiYHMkfFGTp .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-yYfLeGiYHMkfFGTp #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .sequenceNumber{fill:#fff}#mermaid-svg-yYfLeGiYHMkfFGTp #sequencenumber{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp #crosshead path{fill:#333;stroke:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .messageText{fill:#333;stroke:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-yYfLeGiYHMkfFGTp .labelText,#mermaid-svg-yYfLeGiYHMkfFGTp .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-yYfLeGiYHMkfFGTp .loopText,#mermaid-svg-yYfLeGiYHMkfFGTp .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-yYfLeGiYHMkfFGTp .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-yYfLeGiYHMkfFGTp .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yYfLeGiYHMkfFGTp .noteText,#mermaid-svg-yYfLeGiYHMkfFGTp .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-yYfLeGiYHMkfFGTp .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-yYfLeGiYHMkfFGTp .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-yYfLeGiYHMkfFGTp .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-yYfLeGiYHMkfFGTp .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .section{stroke:none;opacity:0.2}#mermaid-svg-yYfLeGiYHMkfFGTp .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-yYfLeGiYHMkfFGTp .section2{fill:#fff400}#mermaid-svg-yYfLeGiYHMkfFGTp .section1,#mermaid-svg-yYfLeGiYHMkfFGTp .section3{fill:#fff;opacity:0.2}#mermaid-svg-yYfLeGiYHMkfFGTp .sectionTitle0{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .sectionTitle1{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .sectionTitle2{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .sectionTitle3{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-yYfLeGiYHMkfFGTp .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .grid path{stroke-width:0}#mermaid-svg-yYfLeGiYHMkfFGTp .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-yYfLeGiYHMkfFGTp .task{stroke-width:2}#mermaid-svg-yYfLeGiYHMkfFGTp .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .taskText:not([font-size]){font-size:11px}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-yYfLeGiYHMkfFGTp .task.clickable{cursor:pointer}#mermaid-svg-yYfLeGiYHMkfFGTp .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-yYfLeGiYHMkfFGTp .taskText0,#mermaid-svg-yYfLeGiYHMkfFGTp .taskText1,#mermaid-svg-yYfLeGiYHMkfFGTp .taskText2,#mermaid-svg-yYfLeGiYHMkfFGTp .taskText3{fill:#fff}#mermaid-svg-yYfLeGiYHMkfFGTp .task0,#mermaid-svg-yYfLeGiYHMkfFGTp .task1,#mermaid-svg-yYfLeGiYHMkfFGTp .task2,#mermaid-svg-yYfLeGiYHMkfFGTp .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutside0,#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutside2{fill:#000}#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutside1,#mermaid-svg-yYfLeGiYHMkfFGTp .taskTextOutside3{fill:#000}#mermaid-svg-yYfLeGiYHMkfFGTp .active0,#mermaid-svg-yYfLeGiYHMkfFGTp .active1,#mermaid-svg-yYfLeGiYHMkfFGTp .active2,#mermaid-svg-yYfLeGiYHMkfFGTp .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-yYfLeGiYHMkfFGTp .activeText0,#mermaid-svg-yYfLeGiYHMkfFGTp .activeText1,#mermaid-svg-yYfLeGiYHMkfFGTp .activeText2,#mermaid-svg-yYfLeGiYHMkfFGTp .activeText3{fill:#000 !important}#mermaid-svg-yYfLeGiYHMkfFGTp .done0,#mermaid-svg-yYfLeGiYHMkfFGTp .done1,#mermaid-svg-yYfLeGiYHMkfFGTp .done2,#mermaid-svg-yYfLeGiYHMkfFGTp .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-yYfLeGiYHMkfFGTp .doneText0,#mermaid-svg-yYfLeGiYHMkfFGTp .doneText1,#mermaid-svg-yYfLeGiYHMkfFGTp .doneText2,#mermaid-svg-yYfLeGiYHMkfFGTp .doneText3{fill:#000 !important}#mermaid-svg-yYfLeGiYHMkfFGTp .crit0,#mermaid-svg-yYfLeGiYHMkfFGTp .crit1,#mermaid-svg-yYfLeGiYHMkfFGTp .crit2,#mermaid-svg-yYfLeGiYHMkfFGTp .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-yYfLeGiYHMkfFGTp .activeCrit0,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCrit1,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCrit2,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-yYfLeGiYHMkfFGTp .doneCrit0,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCrit1,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCrit2,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-yYfLeGiYHMkfFGTp .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-yYfLeGiYHMkfFGTp .milestoneText{font-style:italic}#mermaid-svg-yYfLeGiYHMkfFGTp .doneCritText0,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCritText1,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCritText2,#mermaid-svg-yYfLeGiYHMkfFGTp .doneCritText3{fill:#000 !important}#mermaid-svg-yYfLeGiYHMkfFGTp .activeCritText0,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCritText1,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCritText2,#mermaid-svg-yYfLeGiYHMkfFGTp .activeCritText3{fill:#000 !important}#mermaid-svg-yYfLeGiYHMkfFGTp .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-yYfLeGiYHMkfFGTp g.classGroup text .title{font-weight:bolder}#mermaid-svg-yYfLeGiYHMkfFGTp g.clickable{cursor:pointer}#mermaid-svg-yYfLeGiYHMkfFGTp g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yYfLeGiYHMkfFGTp g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-yYfLeGiYHMkfFGTp .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-yYfLeGiYHMkfFGTp .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yYfLeGiYHMkfFGTp .dashed-line{stroke-dasharray:3}#mermaid-svg-yYfLeGiYHMkfFGTp #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp .commit-id,#mermaid-svg-yYfLeGiYHMkfFGTp .commit-msg,#mermaid-svg-yYfLeGiYHMkfFGTp .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-yYfLeGiYHMkfFGTp g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-yYfLeGiYHMkfFGTp g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-yYfLeGiYHMkfFGTp g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-yYfLeGiYHMkfFGTp .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-yYfLeGiYHMkfFGTp .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-yYfLeGiYHMkfFGTp .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-yYfLeGiYHMkfFGTp .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-yYfLeGiYHMkfFGTp .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-yYfLeGiYHMkfFGTp .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-yYfLeGiYHMkfFGTp .edgeLabel text{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-yYfLeGiYHMkfFGTp .node circle.state-start{fill:black;stroke:black}#mermaid-svg-yYfLeGiYHMkfFGTp .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-yYfLeGiYHMkfFGTp #statediagram-barbEnd{fill:#9370db}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-state .divider{stroke:#9370db}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-yYfLeGiYHMkfFGTp .note-edge{stroke-dasharray:5}#mermaid-svg-yYfLeGiYHMkfFGTp .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-yYfLeGiYHMkfFGTp .error-icon{fill:#522}#mermaid-svg-yYfLeGiYHMkfFGTp .error-text{fill:#522;stroke:#522}#mermaid-svg-yYfLeGiYHMkfFGTp .edge-thickness-normal{stroke-width:2px}#mermaid-svg-yYfLeGiYHMkfFGTp .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-yYfLeGiYHMkfFGTp .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-yYfLeGiYHMkfFGTp .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-yYfLeGiYHMkfFGTp .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-yYfLeGiYHMkfFGTp .marker{fill:#333}#mermaid-svg-yYfLeGiYHMkfFGTp .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-yYfLeGiYHMkfFGTp {color: rgba(0, 0, 0, 0.75);font: ;}

入口视频URL
爬虫
获取视频id
抓取保存Json文件
导出MarkDown文件

口水话讲一下吧:

  1. 抓入口视频URL,提取视频id,
  2. 用视频id和语言参数,生成新的url,获取json文件,
  3. 然后解析json文件,导出markdown文件。

上代码之前

我的Python环境:

Python 解释器版本: 3.9.1
Python IDE: Pycharm
用到的第三方库:jsonostimerequestsBeautifulSouploggingre

主要用到的知识

  1. python 面向对象
  2. python 生成器 (yield)
  3. 模块化编程
  4. 字符串填充
  5. 用到的库的知识

算了,反正很好学


上代码

这里的入口URL:

https://www.ted.com/talks/bill_gates_the_next_outbreak_we_re_not_ready

爬虫代码

# encoding: utf-8
# @time :  2021-08-26 12:28:00
# @file : ted_spider.py
# @software : {# @author : m0_46156900
# blog : https://blog.csdn.net/m0_46156900# 导入库
import json
import os
import timeimport requests
from bs4 import BeautifulSoup
import logging as log
import re
from MD_TEMPlATE import md_templateclass WriteMD:ua = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}languages = {'English': 'en','Chinese_simplified': 'zh-cn','Chinese_cantonese': 'zh','Chinese_tradition': 'zh-tw'}transript_api = 'https://www.ted.com/talks/{0}/transcript.json?language={1}'     # ted talk transcript apidef __init__(self, entry_url):log.basicConfig(level=log.INFO)if not os.path.isdir('./TranscriptJsonFile'):os.mkdir(path='./TranscriptJsonFile')if not os.path.isdir('./MarkdownFile'):os.mkdir(path='./MarkdownFile')self.title = Noneself.JsonFile = Noneself.entry_url = entry_urlself.entry_resp = self.request(url=self.entry_url)self.talkID = Nonedef request(self, url):retry = 5while retry:log.info('进行第%d次访问:%s' % (6-retry,url))try:resp = requests.get(url=url, headers=self.ua,timeout=30)  # 设置超时,这个TED网站可能需要多访问几次resp.raise_for_status()log.info('页面抓取成功!')return resp.textexcept Exception as e:log.error("访问网页失败!,错误:\n %s" %(e))retry -= 1def getTranscriptJson(self, language='en'):  # 默认用英文soup = BeautifulSoup(self.entry_resp, 'html.parser')self.title = soup.select_one('title').text  # 形如:Bill Gates: The next outbreak? We're not ready | TED Talkself.JsonFile = '_'.join(re.findall("[a-z,A-Z]+", self.title))+language.replace('-','_')+'.json'  # '_'.join(re.split("['" "|:?!*-]",title))talkID=re.findall("'set', 'dimension2', '\d+'",self.entry_resp)[0]self.talkID=re.findall('\d+', talkID)[-1]json_url=WriteMD.transript_api.format(self.talkID, language)with open(f'./TranscriptJsonFile/{self.JsonFile}', 'w', encoding='utf-8') as f:f.write(self.request(url=json_url))f.close()log.info('文件保存成功!: %s' % self.JsonFile)def writeMarkDown(self):js_eng = json.loads(open(f'./TranscriptJsonFile/{self.JsonFile}').read())engScript='### '.join(self.parseCuesTime(js_eng))self.getTranscriptJson(language=WriteMD.languages['Chinese_simplified'])js_zh_cn = json.loads(open(f'./TranscriptJsonFile/{self.JsonFile}',encoding='utf-8').read())zh_cnScript = '### '.join(self.parseCuesTime(js_zh_cn))extListening = 'generated by python script'abstract='generated by python script'md = md_template.format(self.title,self.entry_url,extListening,engScript,zh_cnScript,abstract)mdFile = self.JsonFile.replace(".json",".md")with open(f'./MarkdownFile/{mdFile}', 'w',encoding='utf-8') as f:f.write(md)f.close()log.info('文件保存成功!: %s' % mdFile)@staticmethoddef parseCuesTime(jsonFile):for parph in jsonFile['paragraphs']:parph_cues_sec = parph['cues'][-1]['time']/1000parph_text = ''for cues_text in parph['cues']:parph_text+=cues_text['text']+' 'parph_text+='\n'item = time.strftime("%M:%S", time.localtime(parph_cues_sec))+'\n'+parph_textyield itemdef main():Wmd = WriteMD(entry_url='https://www.ted.com/talks/bill_gates_the_next_outbreak_we_re_not_ready')Wmd.getTranscriptJson()Wmd.writeMarkDown()if __name__ == '__main__':main()

MarkDown模板

# encoding: utf-8
# @time :  2021-08-26 14:17:00
# @file : md_template.py
# @software : {# @author : m0_46156900
# blog : https://blog.csdn.net/m0_46156900
md_template='''
@[toc](目录有点长)
# TED Talk URL for This Video:
[{0}]({1})
# Extensive Listening
{2}
## English Script
{3}
## Chinese script
{4}
___
# My Abstract
{5}
# Footnote'''

想再进一步封装代码, 做一个python脚本,用cmd命令就能执行的那种。

最后:


文明爬虫,好自为之。

不想复制粘贴了,爬取TED视频的语言脚本相关推荐

  1. python爬取TED演讲视频(代码)

    环境: windows+python3.6+pycharm(非必须) 引用的python库/模块:requests, bs4, os, random,you-get 准备知识:requests的应用, ...

  2. python 爬视频下载_Python爬虫进阶之爬取某视频并下载的实现

    这篇文章我们来讲一下在网站建设中,Python爬虫进阶之爬取某视频并下载的实现.本文对大家进行网站开发设计工作或者学习都有一定帮助,下面让我们进入正文. 这几天在家闲得无聊,意外的挖掘到了一个资源网站 ...

  3. 爬取bilibili视频

    几句命令行轻松实现爬取bilibili视频,辅助工具:you-get(爬取视频).ffmpeg(合并音视频). 爬取完整的bilibili视频 you-get使用 you-get安装 you-get使 ...

  4. 爬取网站视频命令行工具you-get的安装及使用方法

    爬取网站视频命令行工具you-get安装及使用方法 软件简介 下载方法 Step.01 Step.02 使用方法 报错提示 软件简介 you-get 是一个跨平台命令行视频.音频与图像下载工具,支持国 ...

  5. 用Python爬取Bilibili视频,难吗?

    作者:Mike_Shine 来源:https://urlify.cn/2qyMBb 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很 ...

  6. python网络爬虫爬取视频_Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!...

    学习前提1.了解python基础语法 2.了解re.selenium.BeautifulSoup.os.requests等python第三方库 1.引入库 爬取网站视频需要引入的第三方库: impor ...

  7. 爬取某视频网站电影,仅参考学习

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.爬取思路 爬取使用到的第三方库和技术知识: 将对应步骤进行分析 1. 找到网页首页,输入相关的关键字进行搜索 为了 ...

  8. 利用协程爬取m3u8视频

    利用协程爬取m3u8视频 ​ 在进行了爬虫的相关学习之后,自己尝试爬取了一些视频,但动辄ts文件就几百个,单线程伤不起那时间,一个一个等实在太慢了,想利用多线程,查看相关资料,又说python是假的多 ...

  9. 爬取网络视频和小说资源

    一.视频部分的爬取 1.如果对视频有关注的同学就会发现网络上的视频一般有第三方小站的视频,采集站现成的资源,一些解析接口(解析官网的链接,包括免费和收费的接口),还有就是大站的官网视频.所以我们有几个 ...

最新文章

  1. 十年JAVA架构经验总结:这几点尤为关键!
  2. 订书机是怎样发明的?
  3. 51单片机的配p10端口c语言,stc12c5a16s2的单片机的p5口做普通端口怎么定义?
  4. VC操作MySQL数据库
  5. Objective-C组合模式(Composite)
  6. 纪中B组模拟赛总结(2019.12.21)
  7. Android 仪表盘
  8. php html区别_php与html区别
  9. go语言实战_字节跳动年薪50W抢Go开发人才,你还在问该不该学?
  10. Unity实现物体生命值跟踪的方法
  11. 沈向洋离开微软,曾是华人在美科技圈最高级高管,畅谈职业生涯的 7 堂课!...
  12. Atitti. 语法树AST、后缀表达式、DAG、三地址代码
  13. 人脸识别之特征脸方法(Eigenface)PCA方法
  14. w3cschool菜鸟教程php,JS实例学习笔记——w3cschool+菜鸟教程
  15. MySQL 5.7 参考手册(官方中文版) | 2.2 安装和升级MySQL
  16. 低代码开发平台的行业前景
  17. Matlab画图线型、符号及颜色设置
  18. 关于爱情和婚姻的经典故事
  19. 小程序与php 实现微信支付
  20. ckeditor5 vue 字体大小配置,字体颜色,段落对齐API设置

热门文章

  1. Linux 关闭交换内存
  2. 联通雁飞格物云平台,单片机连接MQTT服务器
  3. Beginning Auto Layout Tutorial in iOS 7: Part 1
  4. 获取系统时间戳的方法(使用c,c++,ros)
  5. 系统级程序设计第二次作业
  6. 按键精灵/触控精灵 多点找怪,多点找色算法思路,附带动态分析图,以及算法代码
  7. GOM传奇引擎登录器商业版与免费版的区别
  8. 宝塔wordpress安装及使用(宝塔wordpress建站教程)
  9. 全文检索(一) -- Lucene
  10. arXiv每日推荐-5.5:计算机视觉/图像处理每日论文速递