最近整理一个爬虫系列方面的文章,不管大家的基础如何,我从头开始整一个爬虫系列方面的文章,让大家循序渐进的学习爬虫,小白也没有学习障碍.

这两天看到别人用Python下载视频,于是我也来试一下平时总是喜欢看内涵段子。这里正好有内涵视频:http://neihanshequ.com/video/

github源码地址:https://github.com/pythonchannel/python27/blob/master/dyamic/download_video

打开网址:http://neihanshequ.com/video/

开始分析:数据方式 按下F12 可以看到 Network中 response返回的数据都是用html渲染好的,所以这样的数据,你没有办法直接获取到他的数据,你只能通过他对应的实际网址来抓取你需要的数据视频字段 再分析网页源代码,可以找到视频对应的地址,获取把地址拿出来放到迅雷中下载,然后发现可以果然可以播放,这说明这个地址是没有错误的获取视频细节 点击播放视频可以获得视频的大小,这样我们可以在下载的时候知道下载进度.获取更多数据 因为这里请求的数据只能通过往下拉,点击可以获取到更多数据,这里就必须要用到Selenium来模拟点击.# coding:utf-8

import datetime

import os

import threading

import time

from contextlib import closing

import requests

from lxml import etree

from selenium import webdriver

from selenium.webdriver.common.by import By

from selenium.webdriver.support.ui import WebDriverWait

from selenium.webdriver.support import expected_conditions as EC

class VideoDown(object):

def __init__(self):

self.first_position = 0

self.count = 0

self.threads = []

self.content = []

def load_data(self):

video_url = 'http://neihanshequ.com/video/'

driver = webdriver.Firefox() # 获取浏览器驱动

driver.maximize_window()

driver.implicitly_wait(10) # 控制间隔时间等待浏览器反映

driver.get(video_url)

while True:

try:

WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'loadMore')))

except Exception as e:

print e.message

break

js = 'window.scrollTo(0,document.body.scrollHeight)'

driver.execute_script(js)

time.sleep(10)

source = etree.HTML(driver.page_source)

divs = source.xpath('//*[@id="detail-list"]/li')

for div in divs:

self.count = self.count + 1

print '第{}条数据'.format(str(self.count))

title = div.xpath('./div/div[2]/a/div/p/text()')

v_url = div.xpath('.//*[@class="player-container"]/@src')

title = title[0] if len(title) > 0 else '无介绍'.format(str(self.count))

v_url = v_url[0] if len(v_url) > 0 else ''

self.do_thread(title, v_url)

try:

load_more = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.ID, 'loadMore')))

load_more.click()

time.sleep(10)

except Exception as e:

print e.message

break

def do_thread(self, title, url):

t = threading.Thread(target=self.down_video, args=(title, url))

self.threads.append(t)

t.start()

for tt in self.threads:

tt.join()

def down_video(self, title, url):

try:

with closing(requests.get(url, stream=True)) as response:

print url

chunk_size = 1024

content_size = int(response.headers['content-length'])

video_path = u'D:/store/video00'

# 判断文件夹是否存在。

if not os.path.exists(video_path):

os.makedirs(video_path)

file_name = video_path + u'/{}.mp4'.format(self.count)

if os.path.exists(file_name) and os.path.getsize(file_name) == content_size:

print(u'跳过' + file_name)

else:

down = DownProgress(title, content_size)

with open(file_name, "wb") as f:

for data in response.iter_content(chunk_size=chunk_size):

f.write(data)

down.refresh_down(len(data))

except Exception as e:

print e.message

class DownProgress(object):

def __init__(self, file_name, file_size):

self.file_name = file_name

self.file_down = 0

self.file_size = file_size

def refresh_down(self, down):

self.file_down = self.file_down + down

progress = (self.file_down / float(self.file_size)) * 100.0

status = u'下载完成' if self.file_down >= self.file_size else u'正在下载...'

print u'文件名称:{},下载进度:{},下载状态:{}'.format(self.file_name, '%.2f' % progress, status)

if __name__ == '__main__':

startTime = datetime.datetime.now()

down = VideoDown()

down.load_data()

endTime = datetime.datetime.now()

print '下载花费时间{}秒'.format((endTime - startTime).seconds)

python 爬取搞笑视频_爬虫篇 | 用Python爬超级搞笑的视频相关推荐

  1. python批量下载静态页面_爬虫实战之,爬取壁纸,批量下载

    一.前言 在开始写爬虫之前,我们先了解一下爬虫 首先,我们需要知道爬虫是什么,这里直接引用百度百科的定义 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按 ...

  2. python怎么爬取豆瓣首页_Python3 爬虫(二) -- 爬取豆瓣首页图片

    ''' 批量下载豆瓣首页的图片 采用伪装浏览器的方式爬取豆瓣网站首页的图片,保存到指定路径文件夹下 ''' #导入所需的库 import urllib.request,socket,re,sys,os ...

  3. python爬去百度图片_爬虫篇| 爬取百度图片(一)

    什么是爬虫 网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本.另外一些不常使用的名字还有蚂蚁.自动索引.模 ...

  4. python爬取高德地图_爬虫实战:如何爬取高德地图?

    提起高德地图,咱们每一个人都不会陌生,高德地图是一款非常好用的地区服务软件,很多用户在出行的时候都会使用这款软件,日程用来导航,也可以用来打车,一次呼叫多种车型,用户可以在这里获得更好的服务,随时都可 ...

  5. python爬取二级页面_爬虫代码改进(二)|多页抓取与二级页面

    本文是下面两篇文章的续篇 本系列包括如下内容抓取豆瓣top250一页多个字段 整合成列表 存储为json文件 定义成函数形式 多页抓取之构造url 多页抓取之翻页 抓取二级页面数据 通过生成器优化代码 ...

  6. python爬取豆瓣短评_爬虫-爬取豆瓣短评

    爬虫-爬取豆瓣短评 啥是爬虫? ​按照一定的规则,自动地抓取互联网信息的程序. 为啥要用爬虫? ​可以利用爬虫自动地采集互联网中的信息,采集回来后进行相应的存储或处理,在需要检索某些信息的时候,只需在 ...

  7. python爬取携程网旅游_爬虫之携程网旅游信息爬取

    最近手又有点闲,闲着无聊就爬取了携程的信息,这个爬虫是我随手写的,各位可以看看. # -*- encoding=utf-8 -*- #爬取携程旅游信息 #2017/8/14 from bs4 impo ...

  8. python爬取分页数据_爬虫抓取分页数据的简单实现

    昨天,我们已经利用Jsoup技术实现了一个简单的爬虫,原理很简单,主要是要先分析页面,拿到条件,然后就去匹配url,采用dome解析的方式循环抓取我们需要的数据,从而即可轻松实现一个简单的爬虫.那么, ...

  9. python爬取小说基本信息_Python爬虫零基础实例---爬取小说吧小说内容到本地

    Python爬虫实例--爬取百度贴吧小说 写在前面本篇文章是我在简书上写的第一篇技术文章,作为一个理科生,能把仅剩的一点文笔拿出来献丑已是不易,希望大家能在指教我的同时给予我一点点鼓励,谢谢. 一.介 ...

最新文章

  1. bzoj1196 [HNOI2006]公路修建问题
  2. 删除链表重复节点 python_java删除链表中重复的节点(保留一个节点)
  3. 【博客话题】我与Linux的不解情缘
  4. Flask-请求上下文
  5. 程序员35岁之后的出路_我35岁,被裁员,开始给程序员规划人生
  6. Javascript:this用法
  7. Word2013中制作按钮控件
  8. BackToTop.js 为你的网站添加“回到顶部”按钮
  9. 在二叉搜索树(BST)中查找第K个大的结点之非递归实现
  10. 16. Magento模板及布局文件中引用Static Block的方法
  11. Docker buildx 安装
  12. java基于spingboot+vue的拼团旅游系统 elementui
  13. cad卸载_解决CAD小白入门的第一个难题,三招任你选
  14. 软件中的快速原型技术
  15. iPhone白苹果修复工具
  16. Ublox F9p接收机在Windows 的相关配置
  17. 润乾报表数据填报中的合法性校验
  18. linux如何判断网线插入_网卡如何识别10M/100M,如何检测网线插入
  19. 教你如何在中关村这个险恶的地方买到最便宜的称心如意的笔记本电脑
  20. 阿里云ECS 服务器初始化云盘

热门文章

  1. kali-dirBuster简单使用
  2. 记一次Kafka warning排查过程
  3. 如何测试服务器性能?
  4. 突破单点瓶颈、挑战海量离线任务,Apache Dolphinscheduler在生鲜电商领域的落地实践
  5. setInterval()与setTimeout() 详细
  6. lect02_codes03_pandas
  7. 【自动驾驶】基于面部Fatigue检测的技术报告
  8. A2dele: Adaptive and Attentive Depth Distiller for Efficient RGB-D Salient Object Detection
  9. hd printer lexmark / dazifuyin / dayin / fuyin
  10. 【2】基因功能注释之SwissProt和Interproscan