Python-爬取校花网视频(单线程和多线程版本)
一、参考文章
python爬虫爬取校花网视频,单线程爬取
爬虫----爬取校花网视频,包含多线程版本
上述两篇文章都是对校花网视频的爬取,由于时间相隔很久了,校花网上的一些视频已经不存在了,因此上述文章中的代码在运行时会出现一些异常,本篇文章主要是对上述文章中的代码进行了优化和异常处理,在次做笔记记录方便以后查阅,修改如下:
1、添加的异常处理如下红色部分代码
二、单线程版本
#-*- coding=utf-8 -*-
import re
import requests
import hashlib
import time
import os header = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2107.204 Safari/537.36',
'Referer':'http://www.xiaohuar.com'
} def get_index(url):
respose = requests.get(url, headers = header)
if respose.status_code == 200:
return respose.text def parse_index(res):
urls = re.findall(r'class="items".*?href="(.*?)"', res, re.S) # re.S 把文本信息转换成1行匹配
return urls def get_detail(urls):
for url in urls:
if not url.startswith('http'):
url='http://www.xiaohuar.com%s' %url
result = requests.get(url, headers = header)
if result.status_code == 200 :
mp4_url_list = re.findall(r'id="media".*?src="(.*?)"', result.text, re.S)
if mp4_url_list:
mp4_url = mp4_url_list[0]
save(mp4_url) path = os.getcwd() + '/video/' def save(url):
try:#下载视频加异常处理
video = requests.get(url, headers = header)
except requests.exceptions.RequestException as e :
print(repr(e))
return if video.status_code == 200:
m = hashlib.md5()
m.update(url.encode('utf-8'))
m.update(str(time.time()).encode('utf-8'))
filename = r'%s.mp4' % m.hexdigest()
filepath = path + filename
print(filepath)
with open(filepath, 'wb') as f:
f.write(video.content)
else:
print(f'视频不存在了:{url}') def main():
for i in range(5):
res1 = get_index('http://www.xiaohuar.com/list-3-%s.html' % i )#拿第一页数据
res2 = parse_index(res1)#提取第一页上的所有url
get_detail(res2)#下载url集合上的视频 if __name__ == '__main__':
main()
三、多线程版本
#-*- coding=utf-8 -*-
# 异步,多线程优化下载速度 import requests
import re
import os
import hashlib,time
from concurrent.futures import ThreadPoolExecutor p = ThreadPoolExecutor(30) def get_index(url):
response = requests.get(url)
if response.status_code == 200:
return response.text def parse_index(res):
res = res.result()
urls = re.findall(r'class="items".*?href="(.*?)"', res, re.S) p.submit(get_detail, urls) def get_detail(urls):
for url in urls:
if not url.startswith('http'):
url='http://www.xiaohuar.com%s' %url
r1=requests.get(url)
if r1.status_code == 200:
url_list=re.findall(r'id="media".*?src="(.*?)"', r1.text, re.S)
if url_list:
mp4_url = url_list[0]
save(mp4_url) path = os.getcwd() + '/video_mutil/'
if not os.path.exists(path):
os.makedirs(path) def save(url):
try:#下载视频做异常处理,视频可能不存在了
r2 = requests.get(url)
except requests.exceptions.RequestException as e :
print(repr(e))
return if r2.status_code == 200:
m=hashlib.md5()
m.update(url.encode('utf-8'))
m.update(str(time.time()).encode('utf-8'))
filename = '%s.mp4' %m.hexdigest()
file_path = path + filename
with open(file_path,'wb') as f:
f.write(r2.content)
print('视频下载完成:%s' % file_path)
else:
print(f'视频不存在了:{url}') def main():
for i in range(5):
p.submit(get_index, 'http://www.xiaohuar.com/list-3-%s.html' % i).add_done_callback(parse_index) if __name__ == '__main__':
main()
四、资源下载
资源下载地址:Python爬取校花网视频-单线程和多线程版本
转载声明:本站文章无特别说明,皆为原创,版权所有,转载请注明:朝十晚八
Python-爬取校花网视频(单线程和多线程版本)的更多相关文章
- python爬虫基础应用----爬取校花网视频
一.爬虫简单介绍 爬虫是什么? 爬虫是首先使用模拟浏览器访问网站获取数据,然后通过解析过滤获得有价值的信息,最后保存到到自己库中的程序. 爬虫程序包括哪些模块? python中的爬虫程序主要包括,re ...
- Go语言实战-爬取校花网图片
一.目标网站分析 爬取校花网http://www.xiaohuar.com/大学校花所有图片. 经过分析,所有图片分为四个页面,http://www.xiaohuar.com/list-1-0.htm ...
- python实战项目 — 爬取 校花网图片
重点: 1. 指定路径创建文件夹,判断是否存在 2. 保存图片文件 # 获得校花网的地址,图片的链接 import re import requests import time import os ...
- scrapy爬取校花网男神图片保存到本地
爬虫四部曲,本人按自己的步骤来写,可能有很多漏洞,望各位大神指点指点 1.创建项目 scrapy startproject xiaohuawang scrapy.cfg: 项目的配置文件xiaohua ...
- Scrapy爬虫框架之爬取校花网图片
Scrapy Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架. 其可以应用在数据挖掘,信息处理或存储历史数据等一系列的程序中.其最初是为了页面抓取 (更确切来说, 网络抓取 )所设 ...
- 第六篇 - bs4爬取校花网
环境:python3 pycharm 模块:requests bs4 urlretrieve os time 第一步:获取网页源代码 import requests from bs4 imp ...
- Python爬虫训练:爬取酷燃网视频数据
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 项目目标 爬取酷燃网视频数据 https://krcom.cn/ 环境 Py ...
- Python之爬虫-校花网
Python之爬虫-校花网 #!/usr/bin/env python # -*- coding:utf-8 -*- import re import requests # 拿到校花网主页的内容 re ...
- Python爬取中国天气网
Python爬取中国天气网 基于requests库制作的爬虫. 使用方法:打开终端输入 “python3 weather.py 北京(或你所在的城市)" 程序正常运行需要在同文件夹下加入一个 ...
随机推荐
- JS判断页面加载是否完成
document.onreadystatechange = function() //当页面加载状态改变的时候执行function { if(document.readyState == &quo ...
- 分布式缓存管理平台XXL-CACHE
<分布式缓存管理平台XXL-CACHE> 一.简介 1.1 概述 XXL-CACHE是一个分布式缓存管理平台,其核心设计目标是"让分布式缓存的接入和管理的更加的简洁和高效&quo ...
- Android 开发知识体系
知识体系 1.Unix/Linux平台技术:基本命令,Linux下的开发环境 2.企业级数据库技术:SQL语言.SQL语句调优.Oracle数据库技术 3.Java 语言核心技术:Java语言基础.J ...
- git基础命令学习总结
git版本升级 git clone git://git.kernel.org/pub/scm/git/git.git 列出所有 Git 当时能找到的配置 git config --list git c ...
- csrf攻击与防范
CSRF(Cross Site Request Forgeries)跨网站请求伪造,也叫XSRF,通过伪装来自受信任用户的请求来攻击利用受信任网站. 与对比 xss:本网站运行了来自其它网站的脚本 c ...
- bootstrap datepicker 属性设置 以及方法和事件
DatePicker支持鼠标点选日期,同时还可以通过键盘控制选择: page up/down - 上一月.下一月 ctrl+page up/down - 上一年.下一年 ctrl+home - 当前月 ...
- String的replaceAll()用法详解
使用replaceAll实现字符串替换,即把字符串某些字符全部替换成别的 // 将str中的所有数字替换为"数字"二字 String str = "abc123bcd45 ...
- Git Push:error: Couldn't set refs/remotes/origin/master;error: update_ref failed for ref 'refs/remot
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=543 今天使用Git Push代码时产生错误: Rename from 'XXXX/.git/refs/remotes/ ...
- Spring Boot 整合Spring Security 和Swagger2 遇到的问题小结
How to configure Spring Security to allow Swagger URL to be accessed without authentication @Configu ...
- sql server 高可用故障转移(完结)
安装完二个sql server 节点后,对外的虚拟ip是192.168.2.105 测试将sql server转到另一节点 转移后连接sql 虚拟ip 测试 通过windows日志查看远行状态 总结 ...