作为一名小白,初次尝试只创建1个函数,其他全部用for语句来遍历,对于for语句的理解,又再次加深了很多。下面就斗胆和各位大神分享一下,鄙人作为一名文科自学男,请多指教。
一、使用到的库:
1、requests
2、lxml中的etree
3、time
4、os
二、逻辑关系:
这里面很重要的,不懂逻辑就不能使用for语句表达:
1、打开一个网址,如这个case中的动物图片。正常进行requests、xpath获取单个套图的链接,再次进行requests、xpath,获取单个大图的链接,requests单个大图,方便进行二进制保存。
2、涉及到2次requests、xpath,分别是进入到套图中,进入到大图中,以及1次requests,为了保存。
3、break是特别重要的,遍历完了,执行什么操作。最后一次大图遍历后,不需要break,因为要保存套图。前面两次都需要break。分别解释一下:套图下载完break是回到上一级,要不然会一直下载同一组照片。
如:这个代码1,2,3,4,5,一共会打印5次,一个原理。
for y in [5,6,7]:
b=[1,2,3,4,5]
for x in b:
print(x)
最后上代码吧:
import requests
from lxml import etree
import time
import os,sys
def getpage(url):
r=requests.get(url,headers=headers)
html=etree.HTML(r.text)
wangzhi=html.xpath('//ul[@class="ali"]//li//div//a/@href')
name=html.xpath('//ul[@class="ali"]//li//div//a/@title')
for name2 in name:
path = 'D:/pics/pic1/'
if not os.path.exists(path + name2):
os.mkdir(path + name2)
for wangzhi1 in wangzhi:
s = requests.get('https://www.ivsky.com' + wangzhi1)
h = etree.HTML(s.text)
jpg = h.xpath('//ul[@class="pli"]/li/div//a/@href')
for jpg1 in jpg:
jpg2 = requests.get("https://www.ivsky.com" + jpg1, headers=headers)
q=etree.HTML(jpg2.text)
jpg3=q.xpath('//div[@id="pic_con"]//img/@src')
for jpg4 in jpg3:
jpg5=requests.get("http:"+jpg4,headers)
name1 = jpg4.split('/')[-1]
with open('D:\\pics\\pic1\\' + name2 + '\\' + name1, 'wb') as f:
f.write(jpg5.content)
print(name1 + "已下载完成")
break;
break;
if __name__=="__main__":
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)Chrome / 73.0.3683.86 Safari / 537.36"}
urls=["https://www.ivsky.com/tupian/dongwutupian/index_{}.html".format(str(i)) for i in range(50)]
for url in urls:
getpage(url)
time.sleep(0.1)
网友评论