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

这只爬虫的由来

学英语,备战CET6。

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

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

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

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

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

说干就干!


先看效果

文件结构:

在这里插入图片描述

MarkDown模板

在这里插入图片描述

生成的MarkDown文件

在这里插入图片描述

大致思路

思路很简单:

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

口水话讲一下吧:

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

上代码之前

我的Python环境:

Python 解释器版本: 3.9.1
Python IDE: Pycharm
用到的第三方库:
	json
	os
	time
	requests
	BeautifulSoup
	logging
	re

主要用到的知识

  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 time

import requests
from bs4 import BeautifulSoup
import logging as log
import re
from MD_TEMPlATE import md_template


class 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 api

    def __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 = None
        self.JsonFile = None
        self.entry_url = entry_url
        self.entry_resp = self.request(url=self.entry_url)
        self.talkID = None

    def request(self, url):
        retry = 5
        while 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.text
            except Exception as e:
                log.error("访问网页失败!,错误:\n %s" %(e))
                retry -= 1

    def 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 Talk
        self.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)

    @staticmethod
    def parseCuesTime(jsonFile):
        for parph in jsonFile['paragraphs']:
            parph_cues_sec = parph['cues'][-1]['time']/1000
            parph_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_text
            yield item

def 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命令就能执行的那种。

最后:

在这里插入图片描述
文明爬虫,好自为之。

闲得无聊,尝试用OD脚本做一个金盾2019的提取 详细分析不多介绍 008AD04D . E8 8299B5FF call 金盾19播.004069D4 008AD052 . 8BC7 mov eax,edi 008AD054 . 99 cdq 008AD055 . 034424 08 add eax,dword ptr ss:[esp+0x8] 008AD059 . 135424 0C adc edx,dword ptr ss:[esp+0xC] 008AD05D . 52 push edx 008AD05E . 50 push eax 008AD05F . 8BC3 mov eax,ebx 008AD061 . E8 9A75BBFF call 金盾19播.00464600 008AD066 . 8B4424 18 mov eax,dword ptr ss:[esp+0x18] 008AD06A . 50 push eax 008AD06B . E8 D00EB6FF call 金盾19播.0040DF40 008AD070 . 59 pop ecx 008AD071 . 8BC7 mov eax,edi //下个硬件断点,视频提取的关键位置 008AD073 . 83C4 28 add esp,0x28 008AD076 . 5D pop ebp 008AD077 . 5F pop edi 008AD078 . 5E pop esi 008AD079 . 5B pop ebx 008AD07A . C3 retn 堆栈: 0012EF6C 04A5B820 buffer 0012EF70 00008000 0012EF74 00000000 2019.zip (294 Bytes, 下载次数: 832) 本主题由 Sound 于 2016-4-20 15:32 移动 免费评分 参与人数 8 吾爱币 +7 热心值 +6 收起理由 fhangong + 1 我很赞同! 无极166 + 1 + 1 谢谢@Thanks! felixwu311 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩! ddddddao + 1 + 1 谢谢@Thanks! 逍遥枷锁 + 1 谢谢@Thanks! 那天晚上 + 1 + 1 用心讨论,共获提升! haifeng0220 + 1 + 1 不懂啊。。。。。 slk + 1 我很赞同! 查看全部评分 收藏收藏24 免费评分免费评分 分享淘帖 送鲜花送鲜花 扔鸡蛋扔鸡蛋 发送到手机穿越 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 论坛附件只能通过单线程下载,迅雷等多线程工具不能正常下载! 回复 举报 jj8426 0 主题 206 帖子 103 积分 锋芒初露 Rank: 1 UID472379精华0 威望0 点 吾爱币866 CB 热心值0 点 听众0 贡献值0 点 违规0 次 在线时间354 小时 注册时间2016-1-19 最后登录2017-1-9 收听TA 沙发 发表于 2016-4-16 21:23 | 只看该作者 视频是什么类型的 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 【吾爱破解论坛导航帖】 - [让你快速融入吾爱破解大家庭] 回复 支持 反对 免费评分 举报 xiawan 65 主题 2219 帖子 1153 积分 凤毛麟角 Rank: 5Rank: 5 UID381546精华0 威望3 点 吾爱币2692 CB 热心值46 点 听众18 贡献值0 点 违规0 次 在线时间862 小时 注册时间2015-2-15 最后登录2017-1-10 收听TA 藤椅 发表于 2016-4-16 21:23 | 只看该作者 违规了,进了小黑屋,不能发帖怎么办? 膜拜神贴,后面的请保持队形~ 别把自己太当人,也别把别人不当人! 论坛账号被盗严重,教你如何保障社区帐号的安全! 回复 支持 反对 免费评分 举报 孙忠山 22 主题 242 帖子 149 积分 锋芒初露 Rank: 1 UID243745精华0 威望0 点 吾爱币346 CB 热心值34 点 听众43 贡献值0 点 违规0 次 在线时间438 小时 注册时间2013-3-13 最后登录2017-1-8 收听TA 板凳 楼主| 发表于 2016-4-16 21:25 | 只看该作者 |楼主 《站点帮助文档》有什么问题来这里看看吧,这里有你想知道的内容! jj8426 发表于 2016-4-16 21:23 视频是什么类型的 脚本仅用于能在本机播放的跳加密视频提取。 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 关于如何获得论坛C币和威望! 回复 支持 反对 免费评分 举报 Lewtq 0 主题 178 帖子 89 积分 锋芒初露 Rank: 1 UID451320精华0 威望0 点 吾爱币390 CB 热心值0 点 听众0 贡献值0 点 违规0 次 在线时间96 小时 注册时间2015-11-11 最后登录2016-12-28 收听TA 报纸 发表于 2016-4-16 21:29 | 只看该作者 无论什么加密的视频都可以提取吗? 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 如何快速判断一个文件是否为病毒! 回复 支持 反对 免费评分 举报 chinasmu 14 主题 458 帖子 247 积分 前途无量 Rank: 3Rank: 3 UID115088精华0 威望0 点 吾爱币594 CB 热心值22 点 听众8 贡献值0 点 违规0 次 在线时间262 小时 注册时间2010-5-2 最后登录2017-1-10 收听TA 地板 发表于 2016-4-16 21:42 | 只看该作者 前排招租 呼吁大家发布原创作品添加吾爱破解论坛标示! 回复 支持 反对 免费评分 举报 851365960 11 主题 1212 帖子 622 积分 出类拔萃 Rank: 4 UID169181精华0 威望0 点 吾爱币62 CB 热心值18 点 听众8 贡献值0 点 违规0 次 在线时间1111 小时 注册时间2012-2-5 最后登录2016-12-23 活跃会员奖 收听TA 7# 发表于 2016-4-16 22:39 | 只看该作者 谢谢分享。 如何快速赚到 CB,而且不会被关进小黑屋! 回复 支持 反对 免费评分 举报 水立方 10 主题 1665 帖子 864 积分 凤毛麟角 Rank: 5Rank: 5 UID424168精华0 威望0 点 吾爱币2877 CB 热心值38 点 听众7 贡献值0 点 违规0 次 在线时间636 小时 注册时间2015-7-21 最后登录2017-1-10 收听TA 8# 发表于 2016-4-16 23:19 | 只看该作者 谢谢分享。 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 回复 支持 反对 免费评分 举报 84852153 2 主题 541 帖子 273 积分 前途无量 Rank: 3Rank: 3 UID485729精华0 威望0 点 吾爱币688 CB 热心值2 点 听众21 贡献值0 点 违规0 次 在线时间407 小时 注册时间2016-3-13 最后登录2017-1-10 收听TA 9# 发表于 2016-4-17 00:14 | 只看该作者 还以为是软件 谢谢分享。 V ha84852513 回复 支持 反对 免费评分 举报 破解粉丝 2 主题 156 帖子 78 积分 锋芒初露 Rank: 1 UID408460精华0 威望0 点 吾爱币1215 CB 热心值0 点 听众0 贡献值0 点 违规0 次 在线时间310 小时 注册时间2015-6-3 最后登录2017-1-10 收听TA 10# 发表于 2016-4-17 06:23 | 只看该作者 只 有一个osc文件,如何操作提取?完全不懂! 发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案; 如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】; 如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】和【CB】,加分不会扣除自己的积分,做一个热心并受欢迎的人! 回复 支持 反对 免费评分 举报 下一页 » 12345678 1 / 8 页下一页返回列表发新帖回复 高级模式 BColorImageLinkQuoteCodeSmilies@朋友| 本版积分规则发表回复 将此回复同步到 腾讯微博 | 回帖并转播 回帖后跳转到最后一页 免责声明: 吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。 Mail To:Service@52PoJie.Cn RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 ) GMT+8, 2017-1-10 17:41 Powered by Discuz! © 2001-2017 Comsenz Inc.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

adingable

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值