训练大模型,这次竟卡在没图这里了。。。

科技   2024-11-22 10:55   安徽  

作为一个 10 年经验的 AI 从业者,我一直相信这条铁律:在训练 AI 模型时,数据就是核心,不管是深度学习目标检测、图像分类、大模型训练,都毫无疑问需要大量图像样本作为支撑。

可是,想要从网上抓到足够多的高质量图像数据,并不是一件轻松的事。直接使用爬虫爬取网络图片是常规办法。但是,直接暴力的爬虫方法可能会面临各种问题:

1、IP 封禁如果一个 IP 频繁访问同一个网站,尤其是短时间内抓取大量图片,网站可能会认为这是“非正常”行为,结果直接把IP封禁了。

2、地域限制有的网站会对不同国家的访问做出限制。比如一些国外资源,国内 IP 可能无法访问,或内容会有差异。

3、隐私风险如果是用自己公司的 IP 去爬数据,很容易暴露自己的真实身份,还可能带来一些不必要的麻烦和风险。

那么,怎么解决这些问题呢?最近,我找到了一款特别省心的数据抓取工具——亮数据(Bright Data),简直是数据获取的理想助手!今天就跟大家聊聊为什么它是这么好用。

用法稍后再说,我们先来注册!

一、注册

1. 什么是亮数据

亮数据是一家全球IP代理服务商,提供丰富的动态和静态住宅IP资源。利用其代理服务,我们能够模拟特定区域的真实用户访问,隐匿自身IP,从而有效保障电脑和数据的安全。

官网:https://www.bright.cn/

2注册亮数据

点击首页的注册,只需输入姓名、工作邮箱、电话,并完善其他信息,即可成功注册账号。也可以参考注册指南,完成注册。

3. 登录

使用注册时的邮箱账号进行登录,如果忘记密码,可以选择邮箱验证码登录,方便快捷。

4. 购买静态住宅代理

在爬取网站数据时,频繁的请求会被网站识别为异常流量,可能导致 IP 被封禁。使用代理 IP 可以隐藏真实 IP,降低被封禁的风险。选择购买静态住宅代理:

好了,准备工作完成了!接下来我们就可以来编写程序爬取图片数据了!

二、爬取图片数据

1. 环境配置

首先需要安装几个 Python 库:requests、json、urllib、os、time。可以使用 pip 安装,也可以使用 conda 安装。

2. 爬虫设计思路

该爬虫的目的是从百度图片搜索中提取图片链接并进行下载。百度图片搜索返回的结果为 JSON 数据,其中包含图片的缩略图链接。 

数据获取步骤如下:1. 构建百度图片搜索的 URL,并通过 GET 请求获取 JSON 数据。2. 解析 JSON 数据以提取缩略图链接。3. 将图片下载并存储到本地。

3. 支持代理 IP

这一步骤非常重要!目的就是在请求中增加我们在亮数据中获取的代理 IP,代码如下:

proxies = {  'http': 'http://user:password@proxy_ip:port',  'https': 'https://user:password@proxy_ip:port',}requests.get(url, headers=self.header, proxies=proxies)

注意修改成自己的信息。

4. 初始化爬虫类

class BaiduImageCrawler:    def __init__(self):        self.json_files = 0  # 请求到的JSON文件数量(每个JSON文件包含30个图像链接)        self.base_url = 'https://image.baidu.com/search/acjson?tn=resultjson_com&logid=5179920884740494226&ipn=rj&ct' \                        '=201326592&is=&fp=result&queryWord={' \                        '}&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=-1&z=&ic=0&hd=&latest=&copyright=&word={' \                        '}&s=&se=&tab=&width=&height=&face=0&istype=2&qc=&nc=1&fr=&expermode=&nojc=&pn={' \                        '}&rn=30&gsm=1e&1635054081427= '        self.storage_path = r"C:\Users\Administrator\Desktop\ImageData\baidu\{}"  # 存储目录,请自定义        self.headers = {            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',            'Accept-Language': 'en-US,en;q=0.9',            'Referer': 'https://image.baidu.com'        }

5. 创建存储文件夹

# 创建存储文件夹    def create_storage_folder(self, folder_name):        self.storage_path = self.storage_path.format(folder_name)        # 如果目录不存在则创建        if not os.path.exists(self.storage_path):            os.makedirs(self.storage_path)        self.storage_path += r'\{}'

6. 获取图片链接

# 获取图像链接列表    def fetch_image_links(self, request_url):        image_links = []        proxies = {          'http': 'http://user:password@proxy_ip:port',          'https': 'https://user:password@proxy_ip:port',        }        requests.get(url, headers=self.header, proxies=proxies)        print(f"Response content for URL {request_url}:\n{response.text}\n")                try:            data_json = json.loads(response.text)        except json.JSONDecodeError:            print("Error decoding JSON response")            return image_links            if 'data' in data_json:            for item in data_json['data']:                if 'thumbURL' in item:                    image_links.append(item['thumbURL'])        else:            print("No 'data' key in JSON response")            return image_links

7. 下载图片

# 下载图片    def download_image(self, image_url, file_path):        try:            response = requests.get(image_url, headers=self.headers)            if response.status_code == 404:                print(f"Failed to download image: {image_url}")            else:                with open(file_path, "wb") as file:                    file.write(response.content)                    print("Saved to path: " + file_path)        except requests.RequestException as error:            print(f"Error downloading image: {error}")

8. 主函数

# 运行爬虫    def execute(self):        search_query = input("Enter search term: ")        encoded_query = parse.quote(search_query)  # URL编码            self.create_storage_folder(search_query)            image_counter = 0  # 图像计数器        for count in range(self.json_files):            offset = count * 30            current_url = self.base_url.format(encoded_query, encoded_query, str(offset))            image_links = self.fetch_image_links(current_url)            for link in image_links:                image_counter += 1                self.download_image(link, self.storage_path.format(str(image_counter) + '.jpg'))                time.sleep(1)  # 延迟1秒,防止IP被封        print(search_query + "----图片下载完成--------->")

9. 运行

if __name__ == '__main__':    crawler = BaiduImageCrawler()    crawler.json_files = 100  # 设置下载的JSON文件数量,3000个图像/文件    crawler.execute()

有了亮数据的佑护,我们可以自在地爬取我们想要的图片了。例如我分别选择“美女”和“戴口罩”两个关键词进行图片爬取:

本地已经爬取的图片已经安全存放在本地了:

不到三分钟的时间,我们就实现了使用亮数据的 IP 代理功能,使用爬虫大批量下载数据了(单个类型3000张图片)。效率提升的不是一点点,赶快试试吧!

三、福利优惠

亮数据这么好用!但是对于我这种有羊毛尽量薅的做派来说,如果有福利领取的话,再好不过了!

正巧,最近赶上了亮数据史上最大的福利:亮数据重磅推出“免费试用优惠”及“首次充值优惠”!

1)即日起,注册新用户,可以获得2+5共7美金免费试用产品的机会。

2)新客户首次充值优惠,充多少送多少,最高500美金。

3)数据中心代理和静态代理,最近做了大幅的价格和收费模式的调整,颇具竞争力,有兴趣的可以上公司主页了解详情。

以上充值赠送活动,针对数据中心和静态代理同样有效!

赶紧注册使用吧:

https://www.bright.cn/proxy-types/?utm_source=brand&utm_campaign=brnd-mkt_cn_wechat_aiyoudao6&promo=aiyoudao6

首页上即可开启免费试用:

四、重磅更新

许多新手用户初次接触亮数据产品时,可能对代理和相关技术不熟悉,不知道如何操作。为此,我们的软件研发团队在产品中集成了 ChatGPT,您可以直接用中文提问,获得帮助。

在初始登录界面顶部,找到一个文字输入框,可以直接使用 AI 查询和获取帮助。

输入问题后,稍等片刻,系统会显示相应的帮助内容。以“如何选择代理服务”为例,系统处理后自动生成中英文双语的回答,并附上相关链接供您进一步参考。

五、专属福利

亮数据为此次内容提供额外优惠:现在注册,可以享受以上所有的价格优惠的同时,再送15美金特别试用金(仅限此渠道)!

主页注册链接:

https://www.bright.cn/proxy-types/?utm_source=brand&utm_campaign=brnd-mkt_cn_wechat_aiyoudao6&promo=aiyoudao6

结语:

结合网络爬虫和亮数据,我们学会了使用 Python 编写一个爬取海量图片的算法程序。亮数据代理IP的结合使用,确保了爬虫的稳定性和工作的高效性。稳妥的数据来源,确保后续 AI 训练的顺利进行!

此外,亮数据还提供的定制数据集服务,也能够进一步丰富相关数据信息,为大模型训练提供更多样化的数据支持。 

目前,亮数据提供了许多折扣,成功注册账户并登录,就能领取福利啦,感兴趣的小伙伴试试吧!

👇亮数据体验链接在阅读原文👇

AI有道
一个值得关注的 AI 技术公众号。主要涉及人工智能领域 Python、ML 、CV、NLP 等前沿知识、干货笔记和优质资源!我们致力于为您提供切实可行的 AI 学习路线。
 最新文章