python批量下载excel 中的图片地址

   好久没有分享关于Python的文章了,批量下载图片可以说在爬虫中还是比较常见的,有人说我直接弄个批量下载软件不就行了还需要这么大费周章自己写?呵呵,那就只能说你too young too simple。通过批量下载一般网站都有反爬虫措施,大概率下来会是一堆503错误。OK 话不多少直接上代码

import os
import random
import time

import requests
import pandas as pd

path = os.getcwd() + '\\newimgs\\'

df = pd.read_excel('D:\xxx\imgs.xls', keep_default_na=False)


def get_proxy():
    return requests.get("http://127.0.0.1:5010/get/").json()


def delete_proxy(proxy):
    requests.get("http://127.0.0.1:5010/delete/?proxy={}".format(proxy))


def getHtml(url):
    retry_count = 5
    proxy = get_proxy().get("proxy")
    while retry_count > 0:
        try:
            html = requests.get(url, timeout=(30, 50), verify=False, proxies={"http": "http://{}".format(proxy)})
            # 使用代理访问
            return html
        except Exception:
            retry_count -= 1
    # 删除代理池中代理
    delete_proxy(proxy)
    return None


urls = df['url'] #此url是excel 第一列的名字
for i in range(len(urls)):
    print(i)

    if urls[i] is not None:
        print(urls[i])
        r = getHtml(urls[i])
        if r is not None:
            if r.status_code == 200:
                name = urls[i].strip().split('/')[-1]
                final_name = name.rstrip("?")
                if "?" in final_name:
                    data1 = final_name[:final_name.index("?")]
                    data2 = data1.strip().split('.')[-1]
                    data = str(time.time()) + "." + data2
                    print(data)
                else:
                    data = final_name
                    print(data)
                with open(path + data, 'wb') as f:
                    f.write(r.content)  
                    f.close()
                    time.sleep(random.randint(3, 30))  # 随机睡3到30秒



通过上面的代码分析可以看到本次爬取还是用了一个代理IP 服务,这也是对抗反爬虫的一个举措

代理IP 呢本次使用了代理IP 代理IP的启动呢大伙可以参考GitHub 上的教程本文就不在赘述了

再补充一张Excel数据格式图

python批量下载excel 中的图片地址_第1张图片

 

你可能感兴趣的:(python,python,开发语言,爬虫,批量下载图片,读取Excel)