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

今天搜索电脑壁纸突发奇想就把所有壁纸怕取下来了

百度 壁纸 随便挑了一个点进去是zol电脑壁纸ZOL桌面壁纸

现在开始爬取

import requests
from lxml import etree
import time
import os
#url = 'http://desk.zol.com.cn/nb/'
def baocun(url):#此方法是将图片保存文件到本地 只需要传入图片地址
	root = "E://python//"#这是根文件所在
	path=root+url.split('/')[-1]#通过’/‘把图片的url分开找到最后的那个就是带.jpg的保存起来

	if not os.path.exists(root):
		os.mkdir(root)
	if not os.path.exists(path):
		r = requests.get(url)
		r.raise_for_status()
		with open(path,'wb') as f:#模式以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等
			f.write(r.content)#r.content返回二进制,像图片
			print('爬取成功')
def getHTML(url):#解析网页 并且解析出来图片地址
	response = requests.get(url)
	response.encoding='gbk'#先前解析出来的是乱码 看网页得知编码方式是gbk
	html = etree.HTML(response.text)#etree.HTML()#是一个方法用来解析html网页的
	imgurl=html.xpath('//div[@class="wrapper top-main clearfix"]/div[1]/ul[1]/li/a/img/@src')#通过f12开发者工具查看网页代码得知图片地址具体所在
	count=1
	for index,i in enumerate(imgurl):
		# print("这是第"+str(count)+"数据")
		print(i)
		baocun(i)
		count=count+1
indexa=1
for i in range(1,100):#做到翻页,先观察这个网址的每一页的规律再进行翻页,因为每一个的网页的xpath都是固定的只需要顺序请求每一页再然后每一页再进行解析就能把全部的图片下载下来
	url='http://desk.zol.com.cn/nb/%d.html'%i#占位符
	print('这是第'+str(indexa)+"页数据")
	indexa=indexa+1
	getHTML(url)
	time.sleep(2)#设置请求一页休眠2秒 避免被拦截
  • 这是全部代码我花了很长的时间是因为当我使用xpath解析网页的时候一步一步来的把每一个的div的class以及ul跟li的class都写出来可是就是返回的空。最后我在根的div元素开始使用div[index]这样的方式最终获取了图片路径,这里提醒大家如果xpath很仔细还不对可能是网页设计的坑,有一次爬取51job的时候又一个类是后面加了一个空格,不很仔细看看不出来,复制也复制不出来这个空格。最后直接copy的xpath。径才可以。有时候一种方式解析不出换一种方式可能就行了。要仔细。

你可能感兴趣的:(python爬虫爬取图片保存到本地文件)