#我们需要根据任务给定的txt文档中的信息,添加网域名字,从网上爬取所有的图片,并添加一定的命名规则
import re
import os
import requests
# 读取txt文件并将其转化为列表格式进行索引
old_content = open(r"D:/JDNetDiskDownload/spider/1.txt", 'r').read()
new = old_content.replace('\n', ',')
# print(type(new))
# print(new)
new = new.replace("\"", "")
# print(new)
# 尝试了多种方法replace用来去除txt中的回车是方便的,去除回车因为生成的列表会以一个回车判定为一个元素
# 例如:
# list=[]
# str=''
# for line in old_content.readlines():
# readlines()可以直接读取文档并生成列表类型,用for比那里后,默认生成string类型
# line=line.strip('\n')
# for i in range(len(line)):
# str+=line[i]
# print(str)
# 使string变list
new = new.split(",") # 使得string转化为list,其元素序号用逗号区分(亮点)
# print(type(new))
# print(new)
jpg = []
newname = []
for i in range(len(new)):
if 4 * i + 3 < len(new):
newname.append(new[4 * i + 1])
jpg.append(new[4 * i + 2])
# print(newname)
# print(jpg)
# print(jpg[0])
s = 'https://img30.360buyimg.com/vip/'
for i in range(len(jpg)): # 将https://img30.360buyimg.com/vip/加入每个字符串前
jpg[i] = s + jpg[i]
# print(jpg)
# print(jpg[0])
# 下载图片
for i in range(len(jpg)):
if jpg[i] != s:
url = jpg[i]
root = "D:/JDNetDiskDownload/data/20180723/20180723/691944/"
path = root + newname[i] + '.jpg'
# path = root + url.split("/")[-1] # 获取倒数第一个'/'处的字符串
else:
continue
try:
if not os.path.exists(root): # 若保存地址的文件夹不存在,新建一个文件夹,将图片保存
os.mkdir(root)
print('OK啦')
if not os.path.exists(path): # 判断保存地址处是否已存在该图片,不存在时获取url 并下载
r = requests.get(url)
r.raise_for_status() # 如果响应状态码不是 200,就主动抛出异常(None)(此表示获取Url的过程是否正常)
# 无论with 中的代码块在执行的过程中发生任何情况,文件最终都会被关闭
with open(path, "wb") as f: # wb代表以二进制格式打开一个文件只用于写入
f.write(r.content) # 将url所在的内容写入
print("爬取完成")
else:
print("文件已存在")
except Exception as e:
print("爬取失败:" + str(e))
心得:1)注意str与list类型之间的转换
转化为str。是为了消除特殊符号(都熬,双引号,回车等)方便
转化为list。是为了获取方便(利用list[i] 获取规律元素)
2)注意读取txt时,open.read()读取为str型,open.readlines()读取为list型
3)获取txt(str型)的某些特定字符串时,考虑用正则化规律
# pattern=r'(jsf])([^#]*)(jpg)' #正则化花去以jsf开头,以.jpg结尾的字符串
#result = re.findall(pattern,old_content)