精华内容
下载资源
问答
  • 周教你做微信新闻类小程序

    千次阅读 2018-07-13 04:55:13
    自从微信小程序面世以来,涌现出了越来越多出色微信小程序来方便大家工作生活学习。... 什么?不懂前端知识?...您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    自从微信小程序面世以来,涌现出了越来越多出色微信小程序来方便大家工作生活学习。小程序开发所用的技术基于我们熟知的 JavaScrip、CSS、HTML 前端知识开发,但是又有些不同。

    什么?不懂前端知识?不要紧,本场Chat会带领大家零基础入门小程序的开发,即使没有一点基础也不要紧。预计包含的内容如下:

    1. 了解微信小程序,包括开发工具、账号注册、文档如何查阅等。
    2. 创建单页小程序列表,并能跳转打开详细页面。
    3. 将单页列表小程序转换为 TAB 类。
    4. 后台服务器交互简介,通过 PHP 搭建后台 Json 数据源,方便下一讲供小程序调用。
    5. 小程序调用上一讲的 Json 数据源。
    6. 小程序常用组件介绍。
    7. 小程序发布上线。

    常言道,授人以鱼不如授人以渔,通过本 Chat 学习将会入门小程序的开发,欢迎大家加入和课后讨论。

    阅读全文: http://gitbook.cn/gitchat/activity/5b40d951e7f75340bd64ebf8

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • 斯坦福I2V:一个用于以图搜视频的新闻视频数据集 看论文的小记,留作备用 论文引用(GB/T 7714) Araujo A, Chaves J, Chen D, et al. Stanford I2V: a news video dataset for query-by-image experiments[C]//...

    Stanford I2V: A News Video Dataset for Query-by-Image Experiments

    看论文的小记,留作备用
    论文引用(GB/T 7714)
    Araujo A, Chaves J, Chen D, et al. Stanford I2V: a news video dataset for query-by-image experiments[C]//Proceedings of the 6th ACM Multimedia Systems Conference. ACM, 2015: 237-242.

    • 斯坦福I2V数据集中有3800个小时的新闻视频,分割成了84000多个视频片段,平均长度为2.7分钟,标注了229个ground-truth搜索结果,下载地址http://purl.stanford.edu/zx935qw7203.
      数据集参数

    • 视觉搜索的四种类型:
      I2I:以图搜图,可用于移动设备的产品图片的搜索
      V2V:以视频搜视频,通常用于在线视频分享网站的版权执法(copyright enforcement)
      V2I:使用头戴相机时实现增强现实?
      I2V:可用于广告监播,使用幻灯片搜索课程视频,组织和搜索个人视频集合或者是视频档案,将相关视频和特定事件做内容关联。

    • 两种搜索场景:
      1.使用一个视频中的完整一帧去搜索其他视频中的帧,找到位置。
      2.使用一帧中的感兴趣区域去搜索其他帧中的感兴趣物体。

    • 数据集的组织形式
      数据集的组织形式
      3800多个小时的视频分割成84000多个视频片段(video clip),平均时长2.7分钟,每个clip都有数十个shot,一个clip对应于一个简单的新闻故事,相当于视频检索领域中的scene场景。

    • 搜索过程

    搜索过程

    • Scene Retrieval 场景检索
      将最可能包含搜索图片的clip排序生成一个列表
      使用了基于SCFV的模式,对于数据集中的每一个关键帧(一秒提取一帧)都生成一个全局的signature。在场景检索的过程中,得到一个关键帧的排序列表,从列表中得到前100个场景(场景的相似性分值:组成这个场景的所有关键帧的最高分值)。
    • Temporal Refinement 时间细化
      如果用户对某一个搜索出的clip感兴趣,系统会返回这个clip中包含搜索图片的特定segments。对于每一个ground-truth clip,根据SCFV的signatures找到50个最相近的帧,然后使用特征匹配和RANSAC的方法找到待搜索图像之间的几何模型。

    • 使用了the Internet Archive’s Wayback Machine来获取候选的待搜索图片,网址http://archive.org/web. 选出了两种类型的图片:第一种是标志性的图像?(iconic images),新闻中报导的事件的图片;第二种是《经济学人》和《时代》杂志的封面图片。

    • 数据标注的方法
      这里写图片描述
      蓝色:自动 橙色:人工
      对于数据集中的视频,每秒取一帧,计算SIFT特征和SCFV特征(SCFV:可伸缩的压缩费舍尔向量)
      Feature-based Matching + RANSAC:使用SIFT论文(Lowe大神2004年那篇)中的特征匹配方法,随后用RANSAC的方法对特征匹配对做几何校验。
      Approve matches manually:人工检验匹配结果。
      SCFV-based search:虽然待搜索图片更可能出现在一个特定时间段的新闻视频中,但仍需保证它不会出现在数据集的其他视频中。使用了SCFV全局描述子(SCFV是北大提出的方法,采纳进了MPEG-7 CDVS标准中)。
      Select matches manually:人工选择匹配结果。
      Annotation of video sequences:略。
      Post-processing:后处理,略。
    展开全文
  • 下面是《Android Studio开发实战 从零基础到App上线(第2版)》书用到的工具和代码资源: 1、本书使用的Android Studio版本为3.2,最新的安装包可前往Android官网页面下载。 2、本书使用的Android NDK版本为r17,...

    资源下载

    下面是《Android Studio开发实战 从零基础到App上线(第2版)》一书用到的工具和代码资源:
    1、本书使用的Android Studio版本为3.2,最新的安装包可前往Android官网页面下载
    2、本书使用的Android NDK版本为r17,最新的安装包可前往Android官网页面下载
    3、本书提供所有示例源码的demo工程下载,源码(适配Android4.1到9.0和Android Studio 3.2到3.4)的下载页面为https://pan.baidu.com/s/14NE2DD-frXxuDXUAlTfRaw。最新的源码也可访问我的github获取,github地址是https://github.com/aqi00/android2,服务端的github地址是https://github.com/aqi00/net_server。(部分地区如新疆既访问不了百度网盘也访问不了github,此时可访问csdn的下载页面获取源码https://download.csdn.net/download/aqi00/11223223)。另外,AS3.4之后默认开了androidx,如需获取适配了androidx的本书源码,可访问这个github页面https://github.com/aqi00/androidx
    有的读者反映从github下载本书源码很慢,或者下载不完整,这是国外服务器连接不稳定造成的。建议访问这个代下载网站https://d.serctl.com/,按照网站左上角的“如何下载教程”,找到本书源码的github下载地址并提交,等待几秒后就能在该网站下载完整的源码了。
    源码与各章的对应关系表见下图:

    4、本书提供配套的ppt课件下载,第二版课件的下载页面为https://www.jianguoyun.com/p/DX7Y1J4QlP6kCBiUoIkD
    5、本书第8章使用了一些反编译和重签名工具,这些工具的下载页面是https://pan.baidu.com/s/1EzDMLNdTdh2pDO7NBMiiww (提取码93i5)


    参考资料

    1、学习本书需要具备Java基础,所谓“零基础”指的是安卓零基础,如果您没学过Java的话,可学习以下系列的Java教程《Java开发笔记》
    2、由于篇幅所限,本书只覆盖了较为常见的Android开发技术,其余的Android开发技术可参考以下的Android笔记《Android开发笔记》
    3、本书的技术实现采用的是Java编码,若您想进一步了解App开发中的Kotlin编程技术,可阅读以下系列的Kotlin教程《Kotlin入门教程》
    4、更多有关本书内容的常见问题参见博文《Android Studio开发实战 从零基础到App上线(第2版)》常见问题解答
    5、有关Android8、Android9、Android10的更多代码适配参见博文《Android8.0、9.0、10.0的新特性兼容适配代码修改》。
     

    勘误记录

    下面对书中的笔误之处进行更正说明:

    一、第一批勘误记录(以下的勘误记录在2019年1月的第二次印刷时均已修正):

    1、第1页“1.1  Android Studio简介”
    该小节第三段第三行“本书使用的Android Studio为2018年4月发布的3.1.2版本”,这里的“4月”改为“9月”,“3.1.2版本”改为“3.2版本”。

    2、第428页“10.2.4 HTTP接口访问”
    倒数第四行的connect方法,该行后面的“该方法在getOutputStream后调用,在getInputStream前调用。”整个删掉。因为connect方法和getOutputStream方法没有先后调用关系,getOutputStream方法内部会自动调用connect方法。

    3、第430页“1. URL串中对汉字的转义处理”
    在“具体的转义代码参见本书下载资源的URLtoUTF8.java”这句后面补充“,也可使用系统自带的java.net.URLEncoder和java.net.URLDecoder”。

    4、第451页“10.5.1 设计思路”下面的第三行
    “于是在打开系统自带的应用宝”,这句前半部分的“”字删掉。

    5、第675页“2. 蓝牙设备BluetoothDevice”
    表14-6出现了两个BOND_BONDING,要把后面的“BOND_BONDING”改为“BOND_BONDED”。

    二、第二批勘误记录(以下的勘误记录在2019年6月的第四次印刷时均已修正):

    1、第46页“2.4.1  图形Drawable”
    该页中间“开发者拿到一张图片”这段的第二行中“Android Postfix Completion”要改为“Android Drawable Importer”。

    2、第447页的“10.4.2  Socket通信”
    在“1. Socket”该段下面的方法说明中,“getOutputStream:获取输入流”,这里的“输入流”要改为“输出流”。

    3、第650页“14.1.2  网页视图WebView”
    该页代码的倒数第七行,把“http://”改为“https://”,也就是添加字母s

    4、第654页“14.1.3  简单浏览器”
    该页代码的倒数第八行,把“http://”改为“https://”,也就是添加字母s

    三、第三批勘误记录(以下的勘误记录在2019年11月的第六次印刷时均已修正):

    1、第94页的图3-31,最后一行“2012年07月06日 五年期商贷利率”的数值改为 “6.55%”,原来的6.15%跟2014年的商贷利率重复了。

    2、第271页的“7.4.1  循环视图RecyclerView”
    该小节第二段第一行的“为了兼容以前的Adnroid版本”,这里的Adnroid拼错了,要改为Android

    3、第409页的“10.1.1  消息传递Message”
    第6行的注释“// 从布局文件中获取名叫tv_control的文本视图”,这里的“tv_control”改为“tv_message

    4、第410页的“10.1.1  消息传递Message”
    代码倒数第10行的“下面播放新闻”,这里的“下面”改为“开始”。

    四、第四批勘误记录(以下的勘误记录在2020年4月的第八次印刷时均已修正):

    1、第225页的“6.5.1  Service的生命周期”
        该节第一段第三行在“App也可以有自己的服务。”后面补充以下红字部分:
    App也可以有自己的服务。此时需要在AndroidManifest.xml中添加新服务的Service节点配置,比如:
            <service android:name=".service.NormalService" />

    2、第353页的表9-6
        该表最后两行的说明都是“高效率的高级编码”,需要把最后一行AAC_ELD的说明改为“增强型低延时的高级编码”。
    3、第430页的“10.2.4  HTTP接口调用”
        该页中间在“下面用一个阶段性的实战小项目练练手”这句前面补充以下红字部分:
    除此之外,从Android9开始默认只能访问以https打头的安全地址,不能直接访问http打头的网络地址。如果应用仍想访问以http开头的普通地址,就得修改AndroidManifest.xml,给application节点添加如下属性,表示继续使用HTTP明文地址:
            android:usesCleartextTraffic="true"

    下面用一个阶段性的实战小项目练练手

    五、第五批勘误记录(以下的勘误记录在2020年9月的第九次印刷时均已修正):

    1、第21页的“1.5.5  新建一个Activity页面”
    该页第一段在“在res\layout下面生成页面布局activity_main2.xml”后面补充以下红字部分:
    在res\layout下面生成页面布局activity_main2.xml,还会在AndroidManifest.xml的application节点增加下面一行配置:
            <activity android:name=".Main2Activity"></activity>

    新页面创建之后的工程结构如图1-37所示。

    2、第52页的“2.4.4  九宫格图片”
    图2-26下面说明文字的第二行,“未拉伸预览”改为“两方向同时拉伸预览

    3、第66页的“3.2.2  开关按钮Switch”
    表3-2,倒数第二行thumb的说明列改为“设置开关标识的图标”,倒数第一行track的说明列改为“设置开关轨道的背景”,也就是倒数两行的说明文字互换

    4、第72页的“3.4.1  文本编辑框EditText”
    表3-3,第三行textPassword和第七行numberPassword两行右边的说明列,“星号“*””改为“圆点“•”

    5、第83页的“3.5.2  使用Intent传递消息”
    表3-5的第六行第三列的“数据类型,用于指定Data类型的定义”,这里的表达比较拗口不易理解,要把“Data类型的定义”改为“消息的数据类型

    6、第88页的“3.5.4  向上一个Activity返回参数”
    第一段第三行的“如果还要处理一下个页面的应答数据”,这里的“一下个页面”改为“下一个页面

    7、第171页的“5.4.2  动态注册/碎片适配器FragmentStatePagerAdapter”
    该页第一行“然后在Fragment的onCreateView函数中调用getArguments方获得请求数据”,这里的“getArguments方”改为“getArguments方法”,也就是添加“法”字。

    8、第214页的“6.4.1  通知推送Notification”
    参数构建方法的第三个方法setUsesChronometer,把“设置是否显示计数器”里面的“计数器”改为“计时器”。

    9、第237页的“7.1.1  标签按钮”
    该页第二行的“读者还记得第2章”,这里的“第2章”改为“第3章

    10、第663页的“14.2.2  创建JNI接口”
    “具体的编译配置修改说明如下”这句后面的代码有若干处需要修改,修改之处见下面的红字:
    android {
        compileSdkVersion 28
        buildToolsVersion "28.0.3"

        defaultConfig {
            applicationId "com.example.mixture"
            minSdkVersion 16
            targetSdkVersion 28
            versionCode 1
            versionName "1.0"

            // 此处说明mk文件未能指定的编译参数
            externalNativeBuild {
                ndkBuild {
                    // 说明需要生成哪些处理器的so文件
                    // NDK的r17版本开始不再支持ARM5(armeabi)、MIPS、MIPS64这几种类型
                    abiFilters "arm64-v8a", "armeabi-v7a"
                    // 指定C++编译器的版本,比如下面这行用的是C++11
                    //cppFlags "-std=c++11"
                }
            }
        }

        // 下面指定拾取的第一个so库路径,编译时才不会重复链接
        packagingOptions {
            pickFirst 'lib/arm64-v8a/libjni_mix.so'
            pickFirst 'lib/armeabi-v7a/libjni_mix.so'
            pickFirst 'lib/arm64-v8a/libvudroid.so'
            pickFirst 'lib/armeabi-v7a/libvudroid.so'
        }

        // Android Studio 2.2之后才引入externalNativeBuild。此处指定mk文件的路径
        externalNativeBuild {
            ndkBuild {
                // 下面是编译CPU信息、加解密、获取主机名专用的mk文件
                path "src/main/jni/Android.mk"
                //path file("src\\main\\jni\\Android.mk")
            }
        }
    }

    六、第六批勘误记录(以下的勘误记录在2021年2月的第十次印刷时均已修正):

    1、第35页的“2.2.3  滚动视图ScrollView”
    该小节示例代码中的两处“线性视图”都改为“线性布局”。

    2、第97页的“3.7.2  小知识:提醒对话框AlertDialog”
    该小节示例代码第七行的“给建造器设置对话框的信息文本”,把“信息文本”改为“内容文本”。

    3、第195页的““6.1.1  声明属性””
    表6-1删掉第七行整行(getDimension那行),同时第八行(getDimensionPixelSize那行)的说明列文字改为“尺寸值。单位为px”。

    4、第204页的“6.1.5  绘制视图”
    在“2. onDraw”的“(1)划定可绘制的区域”下的第一句“虽然本视图内的所有区域都是可以绘制的”,改为“虽然视图内的所有区域都是可以绘制的”,也就是去掉“本”字

    5、第233页的“6.5.1  Service的生命周期”
    “3. 延迟绑定”小节的第二行,把“因为启动操作在先”改为“因为启动操作在先、绑定操作在后”,也就是补充“、绑定操作在后”这几个字。

    6、第335页的“9.2.3  录音与播音”
    “1. 媒体录制器MediaRecorder”小节的常用方法列表中,第一行reset后面的文字说明“重置录制资源”改为“重置录制器”,第五行release后面的的文字说明“释放录制资源”改为“释放录制器”。

    七、第七批勘误记录:

    1、第55页“2.5.2  小知识:日志Log/提示Toast”开始
    “2.5.2  小知识:日志Log/提示Toast”和“2.5.3  代码示例”这两个小节共有七处“被除数”要改为“除数”,因为除法运算要检查除数是否为零,而不是检查被除数是否为零。

    2、第114页的“4.3.1  SD卡的基本操作”
    第三行“<uses-permission android:name="android.permission.READ_EXTERNAL_STORAG" />”改为“<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />”,也就是在STORAG末尾加个E变成STORAGE

    3、第136页的“4.6.3  代码示例”
    该页中间“声明SD卡的操作权限”下面第三行“<uses-permission android:name="android.permission.READ_EXTERNAL_STORAG" />”改为“<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />”,也就是在STORAG末尾加个E变成STORAGE

    4、第232页的“6.6.2  小知识:应用包管理器PackageManager”
    该小节开始的代码例子第9行的“PackageManager.PERMISSION_GRANTED”改为“PackageManager.MATCH_UNINSTALLED_PACKAGES”。

    5、第336页的“9.1.1  表面视图SurfaceView” 
    该页第二行的“这个途径便是内部类表面持有者SurfaceHolder外部调用”改为“这个途径便是内部类表面持有者SurfaceHolder外部调用”,也就是在“外部调用”前面增加一个句号。

    6、第338页的“9.1.2  使用Camera拍照” 
    autoFocus方法的说明文字“参数自动对焦接口AutoFocusCallback的onAutoFocus方法在对焦完成时触发”语句不通顺,改为“输入参数为自动对焦接口AutoFocusCallback的实例,该接口的onAutoFocus方法在对焦完成时触发”。

    7、第345页的“9.1.4  使用Camera 2拍照”
    该页最后一行,“4. 图像读取器ImageReader”小节中,getSurface的方法说明文字“获得图像读取的表面对象”改为“获得图像读取的表面对象”,也就是增加一个“”字。

    8、第349页的“9.2.1  拖动条SeekBar”
    该小节第一行“拖动条SeekBar继承自进度条ProcessBar”,把“ProcessBar”改为“ProgressBar”。

    9、第353页的“9.2.3  录音与播音” 
    setAudioSamplingRate方法后面的描述文字“单位千赫兹(kHz)”改为“单位赫兹(Hz)”。

    10、第364页的“9.3.2  摇一摇——加速度传感器”
    该小节第二行末尾的“其他类似的应用还摇骰子”改为“其他类似的应用还摇骰子”,也就是增加一个“”字。

    11、第381页的“9.5.1  NFC近场通信” 
    “2. 启用NFC感应/禁用NFC感应”小节第一段第一行和第三行的两处“重载”改为“重写”。

    12、第516页的“11.6.2  小知识:三维图形接口OpenGL” 
    该小节第三段第四行的“比如显示生活中黑板的漆面”改为“比如现实生活中黑板的漆面”,也就是把“显示”改为“现实”。

    13、第520页的“11.6.2  小知识:三维图形接口OpenGL” 
    “此时自定义的渲染器GLRender必须重载onSurfaceCreated”这句里面的“重载”改为“重写”。

    14、第553页的“12.3.1  属性动画的用法” 
    removeListener的方法说明改为“移除指定的动画监听器”,也就是把“移出”改为“移除”。
    removeAllListeners的方法说明改为“移除所有动画监听器”,也就是把“移出”改为“移除”。

    15、第557页的“12.3.3  插值器和估值器” 
    该小节第二段第一行的“默认是匀速播放”改为“默认是先加速再减速”。

    16、第662页的“14.2.2  创建JNI接口”
    表14-2  基本数据类型的转换关系,“Java的数据类型”该列的Int和Float要改为小写的intfloat

    17、第725页的“15.4.1  文字转语音TextToSpeech”
    图例“15-39  小米手机内置的语音引擎”改为“15-39  小米手机内置的语音引擎”,也就是在“15-39”前面加个“”。

    8、第725页的“15.4.1  文字转语音TextToSpeech”
    表15-5  setLanguage方法的返回值说明,下面表格左侧的标题由“TextToSpeech类的返回值”改为“setLanguage方法的返回值”。

    19、第726页的“15.4.1  文字转语音TextToSpeech”
    图15-41下方的文字“接下来就可以大胆设置朗读的语音了”改为“接下来就可以大胆设置朗读的语言了”,也就是把“语音”改为“语言”。
     

    若对本书内容有任何疑问,可加入QQ群进行咨询,群号是493199768

    展开全文
  • Python3从零开始爬取今日头条的新闻、开发环境搭建】 Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】 Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】 Python3从零开始爬取今日...

    Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
    Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】
    Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】
    Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】
    Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】


    所谓爬虫,就是通过编程的方式自动从网络上获取自己所需的资源,比如文章、图片、音乐、视频等多媒体资源。通过一定的方式获取到html的内容,再通过各种手段分析得到自己所需的内容,比如通过BeautifulSoup对网页内容进行解析提取。


    本文通过seleniumwebdriver模拟浏览器来浏览网页,通过lxml库解析得到咱所需的内容。下面开始我们的爬虫工作。

    1.目标

    本文目标是自动解析头条的视频新闻,通过第三方解析网站得到其真实的下载地址并自动下载到本地

    *至于如何通过py自动解析、查看大咖个人中心的视频页签内容、自动翻页加载,请移步 《Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】》

    我们查看央视网新闻这个大V的主页:央视网新闻

    在这里插入图片描述
    视频的播放地址是这样的:
    https://www.toutiao.com/item/6606468202769678855/
    显然这样的地址是无法直接下载的,真实的地址如何得到呢?这里我们就不重复造轮子了,直接通过第三方网站来实现:头条地址解析网站
    在这里插入图片描述

    所以我们实际上只要从视频列表页面解析得到视频列表的/item/视频id编号 ,然后通过selenium 驱动浏览自动输入到上面的解析网站,获取解析结果即可。

    OK,思路有了,下面开搞~

    2.实现

    如何通过Python 编程获取视频列表内容? 请参考《Python3从零开始爬取今日头条的新闻》系列文章:

    Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
    Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】
    Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】
    Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

    获取到一系列的头条视频内部地址后,通过浏览器模拟输入内部地址解析得到真实的下载地址。

    这里讲下前几篇文章没遇到的一个场景:自动输入内容到浏览器的输入框,这个怎么实现呢?核心代码如下:
    def getRealPalyUrl(self, media_url, id, title, author):
            
            # 查找视频地址输入框,自动输入内容
            input_els = self.browser.find_element_by_xpath('//div[contains(@class, "input-group")]/input[contains(@placeholder, "请输入视频地址")][1]')
            input_els.send_keys('http://www.toutiao.com' + media_url)
            
            parse_btn = self.browser.find_element_by_xpath('//div[contains(@class, "input-group")]/div/button[contains(@class, "btn")][@type="button"][1]')
            parse_btn.click()
    
            try:
                videoInfo = WebDriverWait(self.browser, 10).until(
                    EC.presence_of_element_located((By.XPATH, '//div[@class="thumbnail"]/div[@class="caption"]/p[1]/a'))
                )
                
                page = self.browser.page_source
                page_etree = etree.HTML(page)
                video_a = page_etree.xpath('//div[@class="thumbnail"]/div[@class="caption"]/p[1]/a[last()]')
                if video_a and len(video_a) > 0:
                    video_a = video_a[0]
    
                    # 得到下载地址,视频清晰度描述
                    download_url = video_a.xpath('./@href')[0]
                    desc = ''
                    video_desc = video_a.xpath('./text()')
                    if video_desc and len(video_desc) > 0 and ('视频下载' in video_desc[0]):
                        desc = str(video_desc[0]).replace('视频下载', '')
                        
                    # 保存到数据库
                    updateVideoInfo2DB(id, download_url, desc)
                    
                    # 下载到本地
                    dl = DownloadFile()
                    dl.download(download_url, title, author)
            except Exception as ex:
                print(ex)
    

    函数getRealPalyUrl(self, media_url, id, title, author):media_url 就是前面说的头条内部视频地址比如:/item/6606468202769678855/

     input_els = self.browser.find_element_by_xpath('//div[contains(@class, "input-group")]/input[contains(@placeholder, "请输入视频地址")][1]')
     input_els.send_keys('http://www.toutiao.com' + media_url)
    

    上面第一行是为了找到“请输入视频地址”这个输入框,第二行是模拟键盘输入完整的地址内容。

    parse_btn = self.browser.find_element_by_xpath('//div[contains(@class, "input-group")]/div/button[contains(@class, "btn")][@type="button"][1]')
    parse_btn.click()
    

    上面第一行是为了找到 解析视频 这个按钮,然后模拟鼠标点击按钮向服务器发送请求。

    如何使用xpath定位元素?请参考前文:Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】
    的2.1.3 章节的内容有详细介绍。

     videoInfo = WebDriverWait(self.browser, 10).until(
                    EC.presence_of_element_located((By.XPATH, '//div[@class="thumbnail"]/div[@class="caption"]/p[1]/a'))
                )
    

    接下来这个代码是在点击解析视频按钮之后等待页面出现下载地址再进行下一步,这里是最多等待10s,一般情况下都足够了。后面就是解析得到具体的downloadurl了,然后通过这个真实的url下载到本地。其中用到的下载类DownloadFile的代码如下:

    #!/usr/bin/python3
    # -*- coding:utf-8 -*-
    
    import os
    import sys
    import time
    from urllib import request
    
    class DownloadFile(object):
    
    
        def __init__(self):
            self.start_time = time.time()
    
        '''
        urllib.urlretrieve 的回调函数:
        def callbackfunc(blocknum, blocksize, totalsize):
            @blocknum:  已经下载的数据块
            @blocksize: 数据块的大小
            @totalsize: 远程文件的大小
        '''
        def __Schedule(self, blocknum, blocksize, totalsize):
            speed = (blocknum * blocksize) / (time.time() -self.start_time)
            # speed_str = " Speed: %.2f" % speed
            speed_str = " Speed: %s" % self.__format_size(speed)
            recv_size = blocknum * blocksize
         
            
            # 设置下载进度条
            f = sys.stdout
            pervent = recv_size / totalsize
            percent_str = "%.2f%%" % (pervent * 100)
            n = round(pervent * 50)
            s = ('█' * n).ljust(50, '-')
            f.write(percent_str.ljust(8, ' ') + '█' + s + '█' + speed_str)
            f.flush()
            f.write('\r')
        
        # 字节bytes转化K\M\G
        def __format_size(self, bytes):
            try:
                bytes = float(bytes)
                kb = bytes / 1024
            except:
                print("传入的字节格式不对")
                return "Error"
            if kb >= 1024:
                M = kb / 1024
                if M >= 1024:
                    G = M / 1024
                    return "%.3fG" % (G)
                else:
                    return "%.3fM" % (M)
            else:
                return "%.3fK" % (kb)
        
        def __downloadFile(self, url, folder, fileName):
            
            print("正在下载: %s" % fileName)
            print(url)
            request.urlretrieve(url, folder + "\\" + fileName, self.__Schedule)
    
        def download(self, url, title, author):
           
            curFolder = 'H:\\py\\downloads\\' + author
    
            if not os.path.exists(curFolder):
                try:
                    os.makedirs(curFolder)
                except Exception as ex:
                    print(ex)
            else:
                try:
                    # 下载文件
                    self.__downloadFile(url, curFolder, title + '.mp4')
                except Exception as ex:
                    print(ex)
    

    全文完结,后续实现用其它框架来爬虫新闻资源。敬请期待~


    Python3从零开始爬取今日头条的新闻【一、开发环境搭建】
    Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】
    Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】
    Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】
    Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】


    参考资料:

    [1]: XPath语法参考
    [2]: 廖雪峰老师的Python3 在线学习手册
    [3]: Python3官方文档
    [4]: 菜鸟学堂-Python3在线学习
    [5]: 其他所有分享过python学习填坑网友的经验

    展开全文
  • 我们对最新信息的更新和发布需要比较及时,而动态交互网页能实现这些功能,新闻发布及管理系统就是一个能够在网上实现新闻的发布及管理,让人们更好的获取更新的新闻资讯。 随着电脑、智能手机等能够连接网络设备的...
  • 这一讲中我们将对如何实现新闻列表做一个详细的介绍,新闻列表会把所有我们从网上获取的新闻的标题显示给用户,用户通过阅读标题,选择自己想要查看的新闻,进入具体的新闻显示页。 下图是我们设计的样式,最上方的...
  • 目标数据:学校官网新闻页) 网址: * 使用到的库:requests urllib re BeautifulSoup os parse ( 我使用的是Anaconda3,所以一般常用的库都不需要额外来安装 ) ( 如需安装:pip install <库名> ) ...
  • 这是我学完Android课程后所写的一个小的、简单版的新闻APP
  • Android小项目——新闻APP(源码)

    热门讨论 2019-02-26 19:40:11
    Android小项目——新闻APP(源码),一个很简单的可以练手的Android Demo Ps:下载之前可以先看一下这篇文章——https://blog.csdn.net/qq_34149526/article/details/80992341
  • 微信小程序Demo:一个比较简单的模仿豆瓣电影的小程序 微信小程序Demo:团购接龙 微信小程序Demo:必胜客宅急送 微信小程序Demo:贪吃蛇 微信小程序Demo:五洲商城 微信小程序Demo:酒商小程序 微信小程序Demo:律法...
  • 【0基础学Python教程系列】()Python 环境搭建,包含...二、Python下载 三、Python安装 Unix & Linux 平台安装 Python: Window系统安装Python: MAC 平台安装 Python: 环境变量配置 在 Unix/Linux ...
  • 新闻类APP模板源码v1.0(android版)

    热门讨论 2015-01-15 11:42:32
    结合各方资源经由本人整合的一版新闻类APP模板(android版)...需要将该工程添加为一个library,并且勾选Is Library。详细信息可以查阅SlidingMenu-master相关资料。 (2)QingCheng123:本人整合的新闻类App模板工程。
  • 这是我学完Android课程后所写的一个小的、简单版的新闻APP 技术概要: 用到了SQLite数据库,用它来存储每篇新闻下的评论 新闻的来源是新浪新闻,我通过使用Fiddler来对新浪新闻APP进行分析,发现了它们传递...
  • 最近在寻找一些视频以做不可描述之用,但是在搜集资源的过程中,发现很多的视频...以bbc的新闻视频为视频记录下整个下载过程(主要需要安装几工具。): http://www.bbc.com/ukchina/simp/media-38690874 1.安装idm
  • 新闻列表实例NewsListView出自创新实验项目之宁夏大学校园通>项目处。
  • 制作一个简单的新闻客户端

    千次阅读 2016-04-18 07:47:56
    前面的博客中介绍了在Android中实现网络通信,这篇博客将是对前面介绍的技术的一个综合运用,制作一个简单的新闻客户端,在这个新闻客户端中用到了ListView、ListView的优化、使用开源框架访问网络图片、使用pull...
  • 每天三分钟,知晓天下事,简短句话新闻早餐,碎片化时间了解新鲜事! 【365资讯简报】每天三分钟,知晓天下事!2021年1月5日 星期二 农历十一月廿二 今日小寒 1、未来十天,三股冷空气组团来袭,20省区市气温或破...
  • 前言 该项目UI模仿今日头条,该项目包括移动端和native端,移动端共4个页面,native端共20个页面,涉及文章的分类、展示、阅读、推荐、搜索和用户的登录、评论、收藏以及后台文章编辑等等,是一个完整的生态链。...
  • 移动端app开发,原生开发与混合开发的区别

    万次阅读 多人点赞 2019-09-26 18:47:01
    目前市场上主流的APP分为三种:原生APP、Web APP(即HTML5)...、APP原生开发 原生开发(Native App开发),是在Android、IOS等移动平台上利用提供的开发语言、开发类库、开发工具进行App软件开发。比如Android是...
  • 、ASP类计算机专业毕业设计题目 1.网络留言薄2.客户管理系统3.多媒体积件管理库的开发与应用4.基于WEB的多媒体素材管理库的开发与应用5.网络教学软件中的教学设计与应用6.小型教育网站的开发与建设7.基于图像的...
  • 如何下载腾讯在线文档?如何将腾讯在线文档导出为本地Word文档(.docx) https://blog.csdn.net/COCO56/article/details/85218517 以下是我期末复习整理部分单元的题目的翻译: 第3版新视野大学英语4读写教程...
  • Android小项目——新闻APP

    万次阅读 多人点赞 2019-02-26 19:25:42
    在公司学习了一段时间Android知识,决定做一个小项目,目的是学会运用所学的基础知识,在这里记录一下开发历程,大家可以把它看成一款入门级练手的 Demo 应用吧~ 项目介绍: 类型: 新闻APP(低仿今日头条) ...
  • 该篇文章适用于新手,让大家在刚接触爬虫的时候少踩点坑。作者接触python也有几个月时间了,最近要用python做数据采集的工作,因此要用爬虫去爬取各大门户网站。 ...这里我附一个。(http://www.
  • 本项目是一个完整的新闻资讯类安卓手机app项目源码,,适合自己做完整的二次开发项目。或者毕业设计。不过都没有服务端。感兴趣的自己下载吧。
  • AndroidFire,新闻阅读 App

    千次阅读 2016-10-09 12:14:28
    AndroidFire,新闻阅读 App
  • android新闻客户端的实现

    千次阅读 多人点赞 2019-07-29 09:13:41
    制作一个基于聚合新闻数据简单的新闻APP制作简易新闻App 导航篇 制作简易新闻App 导航篇 新闻App效果图如下:
  • 基于jsp的新闻发布系统

    万次阅读 多人点赞 2016-06-06 20:18:21
    下面就让我们来说说基于jsp的新闻发布系统,其中使用的技术有JavaBean、fillter、数据库等,能够实现新闻的发布功能,在发布之后能够进行对每新闻的删除、修改、或者继续增加新的文章,最后还能够进行查询功能...
  • 我们可以用Python来将一个...比如我们要下载山东大学新闻网的一个页面,该网页如下: 实现代码如下 import urllib.request def getHtml(url): html = urllib.request.urlopen(url).read() return html def saveH
  • 文章代码都以Android Studio亲测运行,读者朋友可直接下载源码。该专栏是基于Android Studio的精彩案例和一些中高级知识的心得,以及在公司实际开发中遇到的问题等。同时为了保证文章的条理性、高质量性,本专栏的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 110,378
精华内容 44,151
关键字:

下载一个新闻