jd_2018/7/31 任务二 :爬取特定网页上的图片,按照一定规则保存

#我们需要根据任务给定的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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值