python爬取网页图片代码_Python|爬取网页图片流程及语法解释(附代码)

爬取网页图片的基本流程是:

1 使用urllib.request模板请求返回网页文本;

2 从网页文本中使用正则表达式筛选出img src地址(返回一个全部src的列表);

3 图片文件逐一检索或复制;

代码:

215102b75q3sfo8je5zevu.jpg

215102kmu11qvvk33c066w.jpg

运行效果:

215103wednjydkv22yvy2f.jpg

215103g17n0f6f3k7b7363.jpg

附代码1:

import re

import urllib.request

import os

#1 抓取网页

#url = 'http://www.kgc.cn/list'

url = 'http://www.ttpaihang.com/vote/rank.php?voteid=1410&page=2'

req = urllib.request.urlopen(url)

buf = req.read()

req.close()

#2 获取图片地址

i = url.find("/",9) # 本句及下面三句截取url的前半截

url2 = url

if i > 0 :

....url2 = url[:i]

#buf = buf.decode('UTF-8')

buf = buf.decode('gb2312')

#listurl = re.findall(r'http:.[^"]+\.jpg',buf)

listurl = re.findall(r'img src=.[^"]+\.jpg',buf)

for i in range(len(listurl)):.... # 把字符img src="去掉

....listurl[i]=listurl[i].replace('img src="',"")

....if not re.match("http",listurl[i]):

........listurl[i]=url2 + listurl[i]

....print(listurl[i])

#3 抓取图片并保存到本地

i = 0

fpath = "D:\\pic2\\"

if not os.path.isdir(fpath):

....os.mkdir(fpath)

for url in listurl:

....f=open(fpath + str(i)+'.jpg','wb')

....req = urllib.request.urlopen(url)

....buf = req.read()

....f.write(buf)

....f.close()

....i+=1

........

附代码2(写成函数的形式)

import re .... .... .... .... # 正则表达式

import urllib.request .... .... # 从服务器请求返回资源

import os .... .... .... .... # 文件和目录操作

import socket .... .... .... .... # 套接字操作

#socket.setdefaulttimeout(20)....................# 设置socket层的超时时间为20秒

def gethtml(url): #1 抓取网页html内容

....with urllib.request.urlopen(url) as req:

........buf = req.read()

........return buf

def getImg(buf,codec,fpath): #2 从html筛选图片地址到list

....i = url.find("/",9)............................ # 本句及下面三句截取url的前半截

....url2 = url

....if i > 0 :

........url2 = url[:i]

....buf = buf.decode(codec)

....

....reg = r'img src="(.+?\.jpg)"'....#正则表达式,得到图片地址

....#listurl = re.findall(r'http:.[^"]+\.jpg',buf)

....#listurl = re.findall(r'img src=.[^"]+\.jpg',buf)

....listurl = re.findall(reg,buf)

....print("准备下载图片数量:",len(listurl))

....for i in range(len(listurl)):................

........#listurl[i]=listurl[i].replace('img src="',"") # 把字符img src="去掉

........if not re.match("http",listurl[i]):

............listurl[i]=url2 + listurl[i]

........print(listurl[i])

............#3 抓取图片并保存到本地

....i = 0

....

....if not os.path.isdir(fpath):

........os.mkdir(fpath)

....'''

....for imgurl in listurl:

........urllib.request.urlretrieve(imgurl,fpath + str(i)+'.jpg')

........i+=1

....'''#下面的操作方式要快一点

....for imgurl in listurl:

........f=open(fpath + str(i)+'.jpg','wb') # 新建空白图片文件

........req = urllib.request.urlopen(imgurl) # 获取网页图片文件

........buf = req.read().... .... .... # 读取网站上图片文件内容

........f.write(buf).... .... .... # 将网站上图片内容写入新建的图片文件

........f.close()

........i+=1

# 四处内容需要确认:1 网页url; .... ....2 网页编码UTF-8或gb2312;

#................ 3 图片扩展名jpg或png(两处); 4 保存的文件夹

#url = 'http://www.kgc.cn/list'

url = 'http://www.ttpaihang.com/vote/rank.php?voteid=1410&page=3'

buf = gethtml(url)

#codec = 'UTF-8'

codec = 'gb2312'

fpath = "D:\\pic4\\"

print(getImg(buf,codec,fpath))

-End-

本文仅代表作者个人观点,不代表SEO研究协会网官方发声,对观点有疑义请先联系作者本人进行修改,若内容非法请联系平台管理员,邮箱cxb5918@163.com。更多相关资讯,请到SEO研究协会网www.seoxiehui.cn学习互联网营销技术请到巨推学院www.jutuiedu.com。

非常抱歉,我在给出的代码中错误地提及了 `VirtualCamera` 类。事实上,SharpDX.MediaFoundation 库本身并没有提供直接创建虚拟摄像头的功能。要创建虚拟摄像头并将视频流推送到它,你可能需要使用第三方库或工具,例如虚拟摄像头驱动程序或框架。 一种常见的选择是使用 Dshow 系统库。你可以使用 DirectShow 库来创建虚拟摄像头,并使用 SharpDX.MediaFoundation 与 DirectShow 进行交互。以下是一个基本的示例代码,演示了如何将视频流推送到虚拟摄像头: ```csharp using System; using DirectShowLib; using SharpDX.MediaFoundation; class Program { static void Main() { // 加载虚拟摄像头驱动程序 var virtualCamera = LoadVirtualCameraDriver(); if (virtualCamera == null) { Console.WriteLine("无法加载虚拟摄像头驱动程序!"); return; } // 创建源视频文件的读取器 using (var sourceReader = CreateSourceReader("path/to/source/video.mp4")) { // 获取第一个视频流的格式 var mediaType = GetVideoMediaType(sourceReader, 0); // 将视频流推送到虚拟摄像头 PushVideoToVirtualCamera(sourceReader, virtualCamera, mediaType); Console.WriteLine("视频流已成功推送到虚拟摄像头!按任意键停止..."); Console.ReadKey(); } // 卸载虚拟摄像头驱动程序 UnloadVirtualCameraDriver(virtualCamera); } static IBaseFilter LoadVirtualCameraDriver() { // TODO: 加载虚拟摄像头驱动程序的代码 // 可以使用 DirectShowLib 库中的 FilterGraph 或其他相关类来加载虚拟摄像头驱动程序并获取其 IBaseFilter 对象 return null; } static void UnloadVirtualCameraDriver(IBaseFilter virtualCamera) { // TODO: 卸载虚拟摄像头驱动程序的代码 // 可以使用 DirectShowLib 库中的 FilterGraph 或其他相关类来卸载虚拟摄像头驱动程序 } static SourceReader CreateSourceReader(string videoFilePath) { var attributes = new MediaAttributes(); attributes.Set(CaptureDeviceAttributeKeys.SourceType, CaptureDeviceAttributeKeys.SourceTypeVideoCapture.Guid); var sourceReader = new SourceReader(videoFilePath, attributes); return sourceReader; } static MediaType GetVideoMediaType(SourceReader sourceReader, int streamIndex) { var mediaType = sourceReader.GetNativeMediaType(streamIndex, 0); return mediaType; } static void PushVideoToVirtualCamera(SourceReader sourceReader, IBaseFilter virtualCamera, MediaType mediaType) { var sample = new MediaSample(); // TODO: 将视频流推送到虚拟摄像头的代码 // 可以使用 DirectShowLib 库中的 FilterGraph 或其他相关类来将视频流推送到虚拟摄像头 } } ``` 注意,上述代码中的 `LoadVirtualCameraDriver` 和 `UnloadVirtualCameraDriver` 方法是示例代码,需要根据你使用的虚拟摄像头驱动程序进行实际实现。你可以使用 DirectShowLib 库中的 FilterGraph 类或其他相关类来加载和卸载虚拟摄像头驱动程序。 希望这次提供的代码能够帮助到你,如果你有任何进一步的问题随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值