作为一个 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=©right=&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 训练的顺利进行!
此外,亮数据还提供的定制数据集服务,也能够进一步丰富相关数据信息,为大模型训练提供更多样化的数据支持。
目前,亮数据提供了许多折扣,成功注册账户并登录,就能领取福利啦,感兴趣的小伙伴试试吧!
👇亮数据体验链接在阅读原文👇