【Python爬取网页照片——飞机图片】

阅读: 评论:0

【Python爬取网页照片——飞机图片】

【Python爬取网页照片——飞机图片】

目录

  • 一、确定目标网站
  • 二、分析网站
  • 三、写程序
    • 3.1 使用python的requests模块
    • 3.2 获得图片链接
    • 3.3 不同图片之间的关系
    • 3.4 完整代码
  • 参考

一、确定目标网站

本文以某飞机图片网站为例,爬取其上的相关飞机图片。

二、分析网站

下面进行具体例子操作:
1、进入[目标网站],因涉及版权问题,网址隐去,请自行寻找相应的网站。

2、以“EC-JCU”型号的飞机为目标,我们在搜索框中输入型号,找到对应的飞机图片

3、按F12进入网页源码,在Network中选择All,刷新过后,找到所有内容中的第一项,找到"User-Agent"

后面我们需要对python进伪装,在那里我们用到的就是"User-Agent",防止网站发现我们是爬虫,同时我们还需要获得需要访问的目标网页,即上图所示的“referrer”

三、写程序

我们需要做的:

  1. 对python进行伪装
  2. 获得每张图片的链接
  3. 获得不同图片之间的关联性以更方便的爬取

3.1 使用python的requests模块

首先对python进行伪装,即使用得到的"User-Agent"来访问网址:

headers = {"Referer": "/","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"}
url = ''resq = (url=url, headers=headers)
print(resq)	# 输出为200则表示可以爬取

其中,headers 中的 Referer 为目标网址首页地址,当然一般没有 Referer 也照样能爬,但这里我还是加上了,User-Agent 即为上一小节第3步中我们从网页处获得的,直接复制过来即可,同理 url 为上一小节第3步中获得的 “referrer” 参数,接着使用 并输出判读网页是否可以爬取;

一般进行到此处都是没有问题的,当然也有例外,我自己就遇到了一些小小的问题:使用requests访问https时出现SSLError,提示Caused by SSLError(“Can’t connect to HTTPS URL because the SSL module is not available.”,下面贴上我的解决方案,值得一提的是,由于我是在虚拟环境中运行的python,在复制相应的文件时要进入到该虚拟环境对应的文件夹下(浪费了很多时间···)

当然,没有遇到上述问题的小伙伴可直接越过上一段又臭又长的文字

3.2 获得图片链接

网上有很多爬虫相关的参考文章用的都是re正则化表达式,这里我使用的是<解析网页,相关内容的细节先留个坑以后再填,具体使用就两行代码:

html = etree.)
srcs = html.xpath(".//img/@src")

其中,以本文所爬取的网站为例,得到的 srcs 为当前网页所有图片格式所组成的列表:

srcs = [‘/assets/img/logo-white.png’, ‘/assets/img/logo-white.svg’, ‘/’, ‘//cdn.jetphotos/400/5/61165_1610800592.jpg’, ‘//cdn.jetphotos/400/6/54800_1601376663.jpg’, ‘//cdn.jetphotos/400/6/51236_1555710138.jpg’, ‘//cdn.jetphotos/400/5/94038_1554121501.jpg’, ‘//cdn.jetphotos/400/6/16730_1553597315.jpg’, ‘//cdn.jetphotos/400/6/65524_1552653611.jpg’, ‘//cdn.jetphotos/400/6/31976_1549569523.jpg’, ‘//cdn.jetphotos/400/6/86664_1549483448.jpg’, ‘//cdn.jetphotos/400/6/28279_1545996874.jpg’, ‘//cdn.jetphotos/400/6/77766_1536777522.jpg’, ‘//cdn.jetphotos/400/5/47453_1536686162.jpg’, ‘//cdn.jetphotos/400/5/45174_1536349448.jpg’, ‘//cdn.jetphotos/400/5/48524_1536254572.jpg’, ‘//cdn.jetphotos/400/5/12274_1536239863.jpg’, ‘//cdn.jetphotos/400/5/30880_1536230755.jpg’, ‘//cdn.jetphotos/400/5/69113_1536179602.jpg’, ‘//cdn.jetphotos/400/6/48457_1536164205.jpg’, ‘//cdn.jetphotos/400/6/30047_1535907490.jpg’,
‘//cdn.jetphotos/400/6/94127_1533322770.jpg’, ‘//cdn.jetphotos/400/6/82341_1531939035.jpg’, ‘//cdn.jetphotos/400/6/34253_1530819689.jpg’, ‘//cdn.jetphotos/400/5/77526_1528372702.jpg’, ‘//cdn.jetphotos/400/6/86109_1525893733.jpg’, ‘//cdn.jetphotos/400/5/22455_1525720950.jpg’, ‘//cdn.jetphotos/400/5/36600_1524137068.jpg’, ‘//cdn.jetphotos/400/5/21631_1522889416.jpg’, ‘//cdn.jetphotos/400/6/93280_1520447331.jpg’, ‘//cdn.jetphotos/400/6/72880_1518696648.jpg’, ‘//cdn.jetphotos/400/5/54812_1516155863.jpg’, ‘//cdn.jetphotos/400/6/32690_1516086769.jpg’, ‘//cdn.jetphotos/400/5/58369_1513832230.jpg’, ‘//cdn.jetphotos/400/5/67667_1513653856.jpg’, ‘//cdn.jetphotos/400/5/99015_1513559807.jpg’, ‘//cdn.jetphotos/400/6/74832_1513125647.jpg’, ‘//cdn.jetphotos/400/6/44535_1512577470.jpg’, ‘//cdn.jetphotos/400/6/74387_1512226594.jpg’, ‘//cdn.jetphotos/400/5/19809_1511862630.jpg’, ‘//cdn.jetphotos/400/6/33748_1511735030.jpg’, ‘//cdn.jetphotos/400/5/45229_1511616555.jpg’, ‘//cdn.jetphotos/400/5/43985_1511096030.jpg’, ‘//cdn.jetphotos/400/5/54111_1510609318.jpg’, ‘//cdn.jetphotos/400/6/89805_1509563352.jpg’, ‘//cdn.jetphotos/400/5/61237_1509545480.jpg’, ‘//cdn.jetphotos/400/6/50282_1509459640.jpg’, ‘//cdn.jetphotos/400/6/33759_1508692227.jpg’, ‘//cdn.jetphotos/400/5/47250_1507898953.jpg’, ‘//cdn.jetphotos/400/5/12389_1506378949.jpg’, ‘//cdn.jetphotos/400/6/61949_1506282979.jpg’, ‘//cdn.jetphotos/400/6/23814_1504046698.jpg’, ‘//cdn.jetphotos/400/5/29601_1502558507.jpg’, ‘//cdn.jetphotos/400/6/67216_1500719204.jpg’, ‘//cdn.jetphotos/400/6/78148_1494703184.jpg’, ‘/assets/img/footer-facebook.png’, ‘/assets/img/footer-twitter.png’, ‘/assets/img/footer-vk.png’, ‘/assets/img/footer-forum.png’]

通过观察我们发现,非常巧合的是,我们所需要的目标照片的后缀全部为 .jpg,且在上述列表的每个元素前面加上“https:”就可以访问到该图片,例如:我们拿到 srcs 列表中的第一个以jpg为后缀的元素:‘//cdn.jetphotos/400/5/61165_1610800592.jpg’,在其前面添加“https:”,得到该图片对应的链接为:‘.jpg’,此时我们就实现了通过链接访问图片;

然鹅,细心的小伙伴会发现,上述链接访问的图片太小了,与网址中的高清大图相比有些许寒酸,我们经过仔细观察图片链接后发现,链接中藏着可以控制图片大小的因素:

也就是说,在这个网站中(其他网站不一定如此),我们只要把图片链接中的400改为full,即可得到清晰度不错的大图,比如上述的图片:.jpg,大家可以试着将链接中的400改为full看看效果;

至此,我们就掌握了获得待爬取图片链接的方法

3.3 不同图片之间的关系

回到上一节的步骤3,我们在得到搜索型号为“EC-JCU”的飞机图片的网址 referer 为:‘’,那么我们顺理成章的会想到,把“EC-JCU”改为其他的飞机型号是不是可以访问对应类型的飞机图片呢?答案是肯定的。因此我们可以将待需搜集的飞机型号放入列表中,这样就可以自动爬取我们的目标型号的飞机图片了

最后,我们可以为每种型号的飞机单独建立文件夹,将爬取到的图片放到对应的文件夹中,这样就大大节省了人工上网爬照片的时间。

3.4 完整代码

#-*- coding:utf-8 _*-
import requests
import time
from lxml import etree
import osheaders = {"Referer": "/","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.190 Safari/537.36"}
url = '/'airName_list = ['EC-JCU', 'RA-76950']  # 待爬取飞机型号for airName in airName_list:url_airName = url + airName# print(url_airName)resq = (url=url_airName, headers=headers)print(resq)html = etree.)srcs = html.xpath(".//img/@src")num = 0for src in srcs:imgname = src.split('/')[-1]if imgname[-4:] == '.jpg':				# 获得jpg格式的图片src = 'https:' + srcsrc = place('400', 'full', 1)	# full对应的图片清晰度较好# print(src)img = (url=src, headers=headers)if not ists('picture/' + airName):os.mkdir('picture/' + airName)with open('picture/' + airName + '/' + imgname, 'wb') as file:file.t)num += 1print('plane class:{} picture:{}'.format(airName, num))

部分运行结果:

可能是由于目标网址的原因,爬取速度与网络质量密切相关

参考

[1] python 爬虫获取图片(一):简单爬取
[2] Can‘t connect to HTTPS URL because the SSL module is not available - 关于anaconda中的SSL模块错误
[3] Python爬虫初级(4)&#解析网页

本文发布于:2024-01-30 13:23:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170659219320311.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:飞机   网页   照片   图片   Python
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23