**

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爬虫爬取图片相关推荐

  1. 【大学生课程实践】实操:使用Python爬虫爬取图片

    实操:使用Python爬虫爬取图片 参考链接: 源码部署 安装源码中的爬虫库 创建 images文件 参考链接: 本博客作为大佬博客学习笔记记录 参考链接:孩子说"你没看过奥特曼" ...

  2. python爬虫爬取图片无法打开_半小时入门python爬虫爬下网站图片,不能再简单了...

    阅读本文大约需要2分钟 本文旨在为没有爬虫基础的,偶尔想爬虫爬一下某个网站上的图片的初学者使用,如果你已经是对爬虫很熟悉了,下面依然有你感兴趣的东西. 我最近也才正儿八经学习了下爬虫,出于某种需要爬一 ...

  3. [python爬虫] 爬取图片无法打开或已损坏的简单探讨

    本文主要针对python使用urlretrieve或urlopen下载百度.搜狗.googto(谷歌镜像)等图片时,出现"无法打开图片或已损坏"的问题,作者对它进行简单的探讨.同时 ...

  4. python爬虫爬取图片的简单步骤和实现代码

    目录 1. 如何获取网页信息 1). 直接从网络读取 2). 先将网页源码保存到本地,再读取 2. 分析获取到的网页信息,提取需要的信息(图片地址) 3. 使用request将图片保存到本地以及会碰到 ...

  5. 利用python爬虫爬取图片并且制作马赛克拼图

    想在妹子生日送妹子一张用零食(或者食物类好看的图片)拼成的马赛克拼图,因此探索了一番= =. 首先需要一个软件来制作马赛克拼图,这里使用Foto-Mosaik-Edda(网上也有在线制作的网站,但是我 ...

  6. python爬虫 爬取图片

    图片 爬取单张图片 #网址:https://pic.netbian.com/ 我们爬取:https://pic.netbian.com/4kmeinv/ from lxml import etree ...

  7. python爬虫爬取图片代码_Python爬虫入门:批量爬取网上图片的两种简单实现方式——基于urllib与requests...

    Python到底多强大,绝对超乎菜鸟们(当然也包括我了)的想象.近期我接触到了爬虫,被小小地震撼一下.总体的感觉就两个词--"强大"和"有趣".今天就跟大家分享 ...

  8. python爬虫爬取图片代码_python爬虫实战 爬取天极图片

    学习爬虫个人的意见是直接实战效果会很好 不要等全学完requests ,正则表达式,BeautifulSoup等再来实际操作.其实很多实战我们并不会用到requests库,BeautifulSoup, ...

  9. python爬虫爬取图片保存到本地文件

    今天搜索电脑壁纸突发奇想就把所有壁纸怕取下来了 百度 壁纸 随便挑了一个点进去是zol电脑壁纸ZOL桌面壁纸 现在开始爬取 import requests from lxml import etree ...

最新文章

  1. 我的世界linux服务器怎么加种子,我的世界怎么获得服务器种子?服务器种子获得方法介绍...
  2. PostgreSQL JDBC SQLWarning
  3. html5-常用的通用元素
  4. MySQL实验四数据库的查询_MySQL数据库实验四:嵌套查询
  5. 如何训练孩子上厕所(初级篇)
  6. [转]JAVA自动装箱和拆箱
  7. Netty框架多人聊天案例,代码示例
  8. 【SimpleITK】使用区域生长法/种子填充法/形态学分割肺-CT img
  9. PHP之SimpleXML函数
  10. 如何学习PMP才算是成功?
  11. Host is not allowed to connect to this MySQL server错误的解决办法
  12. SpringBoot中发送QQ邮件
  13. java订餐管理系统
  14. 博士申请 | 英国格拉斯哥大学赵德宗教授课题组招收无人驾驶方向全奖博士生...
  15. 学习笔记:强化学习之A3C代码详解
  16. mathematica画图
  17. mysql不带加密模式jar包_使用Xjar对jar文件进行加密,防止反编译
  18. 百问网7天物联网智能家居 学习心得 打卡第七天
  19. 干货分享丨HDR 技术产品实践与探索
  20. Python实现马科维茨投资组合有效前沿

热门文章

  1. 独立游戏开发如何入门?
  2. 虚拟机怎样使用桥接模式连接外网!
  3. 如何使用DBeaver连接MySQL数据库?
  4. 北京奥运会圆满结束了
  5. 罗格评论北京奥运会全文(中英文)
  6. WPF Visifire图表控件使用基础
  7. Oracle GoldenGate 典型应用场景
  8. 高级php必备知识,php基础知识高级ppt
  9. 2021年机修钳工(技师)考试题库及机修钳工(技师)模拟考试
  10. 转换为本地时间 java_UTC时间转换为本地时间(JAVA)