打开第一个链接,查看详细信息
关键点在于
前一个.jpg是原图,可以通过操作字符串的方式改写得到原链接
更早时候发布的图片,链接方式不一样
这里写一个判断获取的src是否为空就可以区分
关键问题解决,整理下思路
1.https://www.gracg.com/p599367964217379?page=1
改变“page=x”可以得到所有的图片的目录列表------format可以操作
2.xpath得到每个缩略图所指向的图片单独链接
def get_infos(url):
res=requests.get(url,headers=headers)
selector=etree.HTML(res.text)
pic_urls=selector.xpath('//div[@class="imgbox"]/a/@href')
for pic_url in pic_urls:
print(pic_url)
get_pictures(pic_url)
time.sleep(1)
3.得到单独一个图片链接之后,区分新旧网页的代码,构造下载链接
def get_pictures(url):
res=requests.get(url,headers=headers)
selector=etree.HTML(res.text)
#获取图片的名字
pic_name=selector.xpath('/html/body/div[1]/div[2]/div[1]/div/div[2]/text()')
name=pic_name[0].strip().replace('\n','')#去除空格回车这些乱七八糟的
print(name)
#获取图片的下载链接
pic_url=selector.xpath('//div[@class="workPage-images"]/img/@src')
# print(pic_url)
if len(pic_url):
# 如果不只有一张图片,图片名字后面加数字
if len(pic_url)==1:
downloadurl = pic_url[0].split('!')[0]
data = requests.get(downloadurl, headers=headers)
fp = open(downloadpath + name + '.jpg', 'wb')
fp.write(data.content)
fp.close()
else:
num=1
for pic_u in pic_url:
downloadurl=pic_u.split('!')[0]
data=requests.get(downloadurl,headers=headers)
fp=open(downloadpath+name+'__'+num.__str__()+'.jpg','wb')
num+=1
fp.write(data.content)
fp.close()
# print(downloadurl)
else:
pic_url=selector.xpath('//div[@class="workPage-images"]/a/@href')
#如果不只有一张图片,图片名字后面加数字
if len(pic_url)==1:
downloadurl=pic_url[0]
data = requests.get(downloadurl, headers=headers)
fp = open(downloadpath + name + '.jpg', 'wb')
fp.write(data.content)
fp.close()
else:
num = 1
for pic_u in pic_url:
downloadurl = pic_u.split('!')[0]
data = requests.get(downloadurl, headers=headers)
fp = open(downloadpath + name + '__' + num.__str__() + '.jpg', 'wb')
num += 1
fp.write(data.content)
fp.close()
4.最后写个主程序进入就行了,再把该导入的包,访问头补一下就行
if __name__=='__main__':
downloadpath='E:/spider_pictures/小归mist_20190505/'
urls=['https://www.gracg.com/p599367964217379?page={}'.format(num) for num in range(7,27)]
for url in urls:
get_infos(url)