Python爬虫爬取图片
**
Python爬虫爬取网站指定图片(多个网站综合经验结论分享)
**
我想以这篇文章来记录自己学习过程以及经验感受,因为我也是个初学者。接下来我将分享几个我爬取过的图片网站,给大家们分享下自己的方法经验。嘿嘿!
我选了以下两个具有代表性的网站进行分享
网站1: 摄图网
第一步:导入需要用到的库:requests、BeautifulSoup和time
import requests
from bs4 import BeautifulSoup
import time
第二步:伪装自己的爬虫
因为很多网站都是有反爬虫的,所以我们需要把我们的头部伪装一下。不然我们的PyCharm就会很老实的告诉浏览器,这是一个爬虫来对你的网站进行浏览爬取。所以我们要改变我们的头部。
打开网页后,按F12,检查。然后点击Network,再按F5进行刷新,找到第一个之后会出现另一个界面,点击headers,翻到最下面,User-Agent就是我们需要的伪装的头部信息。
代码是这样的:
header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 Edg/87.0.664.75"}
第三步:观察网页的链接信息
第一个函数:我们观察网站,它不是只有一页,因此我们就需要进行翻页操作。我们就用for循环来进行,然后我们需要观察每一页的链接的变化来找规律。我们可以借助记事本来找规律,如下图:
不难发现规律,只是后面的2、3在改变。但是第一页的不一样,我们就把2改成1看是否可以成功的跳转到第一页。这个网站是可以的,如果不可以的话我们就用if语句来解决,这个在下面另一个的网站我会给大家说到。做好这一步之后我们就把值代入下一个函数。
def down1():for i in range(1, 3):url = "https://699pic.com/originality-0-176-" + str(i) + ".html"down2(url)
这个函数也是我们的主函数,在最后的最后需要我们去调用它
if __name__ == "__main__":down1()
第四步:向网站发起请求访问,看是否访问成功
第二个函数:这里就用到了requests库,get便是向网站发起访问请求,想知道是否访问成功,便要用到r.status_code,将其print,若结果是200,便是访问成功。若为404或其它,则是访问失败,便要去查看前面哪里出错了。为了避免出现乱码的情况,我们需要将编码格式改为“utf-8”或者等于r.apparent_encoding。r.text是网页的内容,我们将这个内容带给下一个函数。
def down2(neirong):r = requests.get(neirong, headers=header)r.encoding = "utf-8" #r.apparent_encodingprint(r.status_code)demo = r.text# print(demo)down3(demo)
第五步:解析网页的内容,并分析找到图片的标签位置
第三个函数:这里就需要用到BeautifulSoup库了,将上一个函数带来的内容用html.parser解析器进行解析。然后用到BeautifulSoup的find_all函数来对所需要的标签内容进行查找,用打印找的内容进行长度输出的方式来验证自己是否查找成功。因为找到的是多个,因此需要挨个输出。这个网站的照片是放在img标签的data-original属性里面的,并不是src属性里面。若是用src属性则爬取到的图片将是黑色的什么都没有,用data-original属性爬取的才是正确的。至于为什么,这个应该就是JavaScript的知识内容了,这里就不做解释了。并且data-original属性里面的内容还需要在前面加上https:,因为它本身缺少了这个东西,因此我们就需要给它加上。然后将这个内容代给下一个函数。
def down3(biaoqian):soup = BeautifulSoup(biaoqian, "html.parser")tags = soup.find_all("img", class_="lazy")print(len(tags))# print(tags)for tag in tags:image = "https:" + tag["data-original"]print(image)down4(image)
第六步:将解析的照片存入到我们的文件夹中去
第四个函数:这里就用到了time,PyCharm自带的库。照片的命名方式用的是时间戳,并且放大了1000倍。我们将解析好的内容再次通过requests的get方法去到每一个图片特定的网址去下载。因为是图片,所以将其通过二进制的方式写入到我们的文件夹中去。这里使用的是相对路径,是写入到同级目录的image文件夹,这里的./可有可无,原因就是这个代码和image是在同级目录下。
def down4(shuchu):print(time.time())fileName = "./image/" + str(int(time.time() * 1000)) + ".jpg"r = requests.get(shuchu, headers=header)f = open(fileName, "wb")f.write(r.content)f.close()
这里就是爬取这个网站指定图片的的全部过程了。
下面是完整代码:
import requests
from bs4 import BeautifulSoup
import timeheader = {"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"
}def down1():for i in range(1, 3):url = "https://699pic.com/originality-0-176-" + str(i) + ".html"down2(url)def down2(neirong):r = requests.get(neirong, headers=header)r.encoding = "utf-8" #r.apparent_encodingprint(r.status_code)demo = r.text# print(demo) #查看网页的内容down3(demo)def down3(biaoqian):soup = BeautifulSoup(biaoqian, "html.parser")tags = soup.find_all("img", class_="lazy")print(len(tags)) 查看找到的标签数量## print(tags) #查看标签内容for tag in tags:image = "https:" + tag["data-original"]print(image)down4(image)def down4(shuchu):print(time.time())fileName = "image/" + str(int(time.time() * 1000)) + ".jpg"r = requests.get(shuchu, headers=header)f = open(fileName, "wb")f.write(r.content)f.close()if __name__ == "__main__":down1()
网站2: chinaz.com
这个网站爬取的过程大致和上面一个相同。
但不同的是第一个函数中用了if语句,因为它的第一页和之后的页规律是不一样的。(我们同样可以借助记事本去找寻和实验规律)
def down1():for i in range(1,3):if i == 1:url = "https://sc.chinaz.com/tupian/katongtupian.html"else:url = "https://sc.chinaz.com/tupian/katongtupian_" + str(i) + ".html"down2(url)
以及第三个函数的标签,这里有一个坑,那就是检查网页代码时显示的是在src属性里,但总是会报错。于是我查看了网页的源代码,发现不是src,而是src2,这个地方不去多注意还真发现不了。
下面是爬取这个网站指定图片的全代码:
import requests
from bs4 import BeautifulSoup
import timeheader={"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36 Edg/90.0.818.51"
}def down1():for i in range(1,3):if i == 1:url = "https://sc.chinaz.com/tupian/katongtupian.html"else:url = "https://sc.chinaz.com/tupian/katongtupian_" + str(i) + ".html"down2(url)def down2(neirong):r = requests.get(neirong, headers=header)r.encoding = "utf-8"print(r.status_code)demo = r.text#print(demo)down3(demo)def down3(biaoqian):soup = BeautifulSoup(biaoqian, "html.parser")tags = soup.find_all("div", class_="box picblock col3")print(len(tags))#print(tags)for tag in tags:image = "https:" + tag.a.img["src2"]#print(image)down4(image)def down4(shuchu):print(time.time())fileName = "./image/" + str(int(time.time() * 1000)) + ".jpg"r = requests.get(shuchu, headers=header)f = open(fileName, "wb")f.write(r.content)f.close()if __name__=="__main__":down1()
每个网站的代码都会有自己不一样的地方,因此我们在爬取不同网站时,就会遇到不同的问题。但是,只要我们下功夫去研究,就一定能解决问题!
文中有解释不到位或者错误的地方,欢迎各位大佬们指正哦。
之后我还会继续分享自己的学习经历,让自己不断成长!
冲呀冲呀冲呀!!!
Python爬虫爬取图片相关推荐
- 【大学生课程实践】实操:使用Python爬虫爬取图片
实操:使用Python爬虫爬取图片 参考链接: 源码部署 安装源码中的爬虫库 创建 images文件 参考链接: 本博客作为大佬博客学习笔记记录 参考链接:孩子说"你没看过奥特曼" ...
- python爬虫爬取图片无法打开_半小时入门python爬虫爬下网站图片,不能再简单了...
阅读本文大约需要2分钟 本文旨在为没有爬虫基础的,偶尔想爬虫爬一下某个网站上的图片的初学者使用,如果你已经是对爬虫很熟悉了,下面依然有你感兴趣的东西. 我最近也才正儿八经学习了下爬虫,出于某种需要爬一 ...
- [python爬虫] 爬取图片无法打开或已损坏的简单探讨
本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...
- python爬虫爬取图片的简单步骤和实现代码
目录 1. 如何获取网页信息 1). 直接从网络读取 2). 先将网页源码保存到本地,再读取 2. 分析获取到的网页信息,提取需要的信息(图片地址) 3. 使用request将图片保存到本地以及会碰到 ...
- 利用python爬虫爬取图片并且制作马赛克拼图
想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...
- python爬虫 爬取图片
图片 爬取单张图片 #网址:https://pic.netbian.com/ 我们爬取:https://pic.netbian.com/4kmeinv/ from lxml import etree ...
- python爬虫爬取图片代码_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...
Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象.近期我接触到了爬虫,被小小地震撼一下.总体的感觉就两个词--"强大"和"有趣".今天就跟大家分享 ...
- python爬虫爬取图片代码_python爬虫实战 爬取天极图片
学习爬虫个人的意见是直接实战效果会很好 不要等全学完requests ,正则表达式,BeautifulSoup等再来实际操作.其实很多实战我们并不会用到requests库,BeautifulSoup, ...
- python爬虫爬取图片保存到本地文件
今天搜索电脑壁纸突发奇想就把所有壁纸怕取下来了 百度 壁纸 随便挑了一个点进去是zol电脑壁纸ZOL桌面壁纸 现在开始爬取 import requests from lxml import etree ...
最新文章
- 我的世界linux服务器怎么加种子,我的世界怎么获得服务器种子?服务器种子获得方法介绍...
- PostgreSQL JDBC SQLWarning
- html5-常用的通用元素
- MySQL实验四数据库的查询_MySQL数据库实验四:嵌套查询
- 如何训练孩子上厕所(初级篇)
- [转]JAVA自动装箱和拆箱
- Netty框架多人聊天案例,代码示例
- 【SimpleITK】使用区域生长法/种子填充法/形态学分割肺-CT img
- PHP之SimpleXML函数
- 如何学习PMP才算是成功?
- Host is not allowed to connect to this MySQL server错误的解决办法
- SpringBoot中发送QQ邮件
- java订餐管理系统
- 博士申请 | 英国格拉斯哥大学赵德宗教授课题组招收无人驾驶方向全奖博士生...
- 学习笔记:强化学习之A3C代码详解
- mathematica画图
- mysql不带加密模式jar包_使用Xjar对jar文件进行加密,防止反编译
- 百问网7天物联网智能家居 学习心得 打卡第七天
- 干货分享丨HDR 技术产品实践与探索
- Python实现马科维茨投资组合有效前沿