Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

Python3从零开始爬取今日头条的新闻【二、首页热点新闻抓取】

Python3从零开始爬取今日头条的新闻【三、滚动到底自动加载】

Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】

Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】

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

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

本文目录:

1.目标

2.实现

参考资料:

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学习填坑网友的经验

python爬取头条付费专栏视频_Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】...相关推荐

  1. Python3从零开始爬取今日头条的新闻【五、解析头条视频真实播放地址并自动下载】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  2. 今日头条付费专栏的暴利赚钱模式,半年净赚40万!

    创业这条路不一定适合每一个人,但你不去了解操作,成功将会离你越来越远,此刻如果还在迷茫没有点子知识的你,不妨微信搜索:张一刻 获取最新的路子,实业,互联网,区块链,职业解答. 知识付费模式越来越成熟了 ...

  3. 爬虫(三)解析js,抓取优酷免费视频的真实播放地址

    工具:google浏览器 + fiddler抓包工具 说明:这里不贴代码,[只讲思路!!!] 原始url = https://v.youku.com/v_show/id_XMzIwNjgyMDgwOA ...

  4. 江湖小白之一起学Python (十二)开发视频网之获取m3u8真实播放地址

    雨一直下,气氛还算融洽--,我这边下了一周的雨了,趁着目前有个把小时的间歇时间,赶紧接着上一篇更一波,哎,时间就是这么不够用,来吧,抓紧时间今天来实现一下提取m3u8真实的播放地址,实现上篇页面展示的 ...

  5. python爬虫今日头条_Python3从零开始爬取今日头条的新闻【一、开发环境搭建】...

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

  6. python爬取付费电影思路_python3爬虫爬取猫眼电影TOP100(含详细爬取思路)

    待爬取的网页地址为https://maoyan.com/board/4,本次以requests.BeautifulSoup css selector为路线进行爬取,最终目的是把影片排名.图片.名称.演 ...

  7. python爬取公众号历史文章_python3 scrapy爬取微信公众号及历史信息V1.0

    妹子图.png 环境:python3  scrapy 目的 写这篇文章主要是做一下纪念,毕竟是搞了快两天的东西了,今天加大了量,使用scrapy爬取100多个微信公众号,然后出现IP被封的情况下,当然 ...

  8. PHP 输出视频流 在线视频读取 隐藏真实播放地址 兼容ios 设备 UC浏览器等

    废话不多说 直接上代码 这个是支持在线读取远程视频文件的,分段读取 已测试支持ios 及ios uc浏览器,代码中的算法还可以优化,需要的朋友 请自行修改,视频地址可能会失效,到时候换成你需要的就行了 ...

  9. Python3从零开始爬取今日头条的新闻【一、开发环境搭建】

    Python3从零开始爬取今日头条的新闻[一.开发环境搭建] Python3从零开始爬取今日头条的新闻[二.首页热点新闻抓取] Python3从零开始爬取今日头条的新闻[三.滚动到底自动加载] Pyt ...

  10. Python爬虫爬取ok资源网电影播放地址

    #爬取ok资源网电影播放地址#www.okzy.co #入口一:http://okzy.co/index.php?m=vod-search&wd={关键字}&submit=search ...

最新文章

  1. APMServ下Xdebug安装与使用
  2. 蚂蚁爬杆问题php,PHP实现的蚂蚁爬杆路径算法代码_php技巧
  3. 人工智能如何落地安防?需先迈过算力这一关
  4. 白盒测试黑盒测试和单元测试集成测试和系统测试的关系
  5. C. Present(二分 + 扫描线)
  6. 在一基金慈善年会上面发言
  7. Origin使用手册/笔记第二部分:数据的录入
  8. 美元指数DXY短线走高10逾点,现报90.77
  9. linux是用于汇编语言,深入理解程序设计:使用Linux汇编语言
  10. 深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...
  11. 计算机学院工作总结报告,计算机学院分工会2018年工作总结
  12. verilog 产生m序列
  13. Linux 安装谷歌浏览器
  14. mysql分组聚合compute_SQLServer之Compute/ComputeBy实现数据汇总
  15. 带你深入了解GPU、FPGA和ASIC
  16. 一台手机=半套房?VERTU唐卡手机拍出48.3万
  17. JupyterLab教程:程序员的笔记本神器v2.0
  18. 小程序内识别二维码调查
  19. 2094 找出 3 位偶数
  20. go语言中pdf转图片功能的实现(CentOS)

热门文章

  1. pdf合并、生成目录大纲
  2. 为什么滴滴裁员2000人,被裁员工却像中奖一样开心?
  3. oracle ndb,NDB语法 - ivaneeo's blog - BlogJava
  4. 二、8【FPGA】Verilog中锁存器(Latch)原理、危害及避免
  5. 一瓶可乐有多重?实战梅特勒托利多PS60串口通信开发
  6. 初学JAVA-3-重新定义和第一个JAVA手工程序
  7. Java中级内容——异常处理(exception handing)
  8. 体重 年龄 性别 身高 预测鞋码_用身高和体重数据进行性别分类的实验报告
  9. ParticleDesigner 粒子编辑器使用
  10. 【转】四种主流温度传感器的优缺点比较