首页 > Python资料 博客日记
使用Python和Proxy302代理IP高效采集Bing图片
2024-08-17 04:00:05Python资料围观57次
目录
项目背景
本篇博客详细介绍了一个网络爬虫项目的准备和实现过程。该项目的目标是从Bing图片搜索中获取图片链接并下载图片。此类爬虫项目通常用于收集大量的图片数据,以便用于训练各种人工智能模型,特别是计算机视觉模型。计算机视觉领域的研究需要大量的图像数据来训练和测试模型,以便实现图像分类、对象检测、图像生成等功能。
一、项目准备
环境配置
在开始编写爬虫之前,确保已经完成以下环境配置:
1.Python安装: 确保已安装Python 3.x版本。Python是一种功能强大且易于学习的编程语言,适合于各种编程任务,包括网络爬虫开发。
2.需要的库: Python拥有庞大的第三方库生态系统,我们将使用几个核心库来开发爬虫:
- requests: 用于发送HTTP请求和处理响应。
- os: 提供了与操作系统交互的功能,用于创建文件夹等文件操作。
- time: 提供了时间相关的功能,例如休眠程序以及计时等。
- urllib: 提供了在网络上获取数据的一些功能,主要用于URL编码。
可以使用以下命令通过pip安装这些库:
pip install requests
如果你使用的是Anaconda等集成环境,可以使用conda命令:
conda install requests
这些库将帮助我们处理HTTP请求、解析和存储数据,以及进行一些基本的系统操作。
二、爬虫设计与实现
爬虫设计思路
目标网站分析
在设计爬虫之前,分析目标网站是必不可少的。对于Bing图片搜索网站,我们进行如下分析:
- 网页结构:Bing图片搜索页面的结果通常以HTML的形式呈现,其中包含了多个图片的缩略图。每张图片的缩略图通常通过
<img>
标签展示,图片的真实链接保存在src
属性中。 - 动态加载:Bing的图片搜索结果可能采用了动态加载的方式。即在页面初始加载时,可能只加载部分图片,更多图片会在用户滚动页面时动态加载。Selenium可以模拟用户行为(如滚动)以加载这些动态内容。
- 请求限制:Bing图片搜索可能对请求频率或IP地址进行限制。使用代理服务器有助于分散请求负载,避免IP被封禁。
数据获取流程
构建请求URL:根据用户输入的搜索关键词构建Bing图片搜索的URL。URL的格式通常为https://www.bing.com/images/search?q={搜索词}
,其中{搜索词}
是用户的查询内容。
发送GET请求:通过Selenium WebDriver发送GET请求,加载目标网页。由于Bing图片搜索页面可能含有动态内容,Selenium能够处理这些动态加载的内容,确保图片链接完全加载。
解析网页数据:使用Selenium解析网页源代码,提取所有图片缩略图的src
属性。通常,缩略图链接可以通过CSS选择器找到,例如使用img.mimg
选择器获取图片标签。
下载图片:对于每个提取到的图片链接,使用Requests库发送GET请求以获取图片数据,并将其保存到本地目录。确保在保存时处理任何可能的下载异常,如网络问题或链接无效等。
存储管理:将下载的图片保存到预先创建的目录中,目录结构可按搜索词分类,方便后续管理和使用。
代码实现
以下是代码的主要部分及其功能说明:
1. 初始化爬虫类(BingImageSpider)
在爬虫开发过程中,首先需要定义一个爬虫类以实现图片的爬取功能。我们定义了一个名为BingImageSpider
的类,用于处理从Bing图片搜索页面抓取和下载图片的任务。
import requests
import os
import time
from urllib import parse
class BingImageSpider(object):
def __init__(self):
self.url = 'https://www.bing.com/images/search?q={}&form=HDRSC2&first=1&tsc=ImageBasicHover'
self.directory = r"D:\价值一个亿\python-mini-projects\projects\bingimg\{}"
self.header = {
'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://www.bing.com'
}
2. 创建存储文件夹
在图片爬取的过程中,为了组织和管理下载的图片,需要创建一个专门的存储文件夹。这个文件夹的名称通常与搜索关键词相关,以便于后续查找和管理。以下是创建存储图片文件夹的代码:
def create_directory(self, name):
self.directory = self.directory.format(name)
if not os.path.exists(self.directory):
os.makedirs(self.directory)
3. 获取图像链接
该方法通过发送HTTP请求获取网页内容,并从Bing图片搜索结果页面获取图片的缩略图链接:
def get_image_link(self, url):
list_image_link = []
response = requests.get(url, headers=self.header)
# 解析网页内容并提取图片链接
try:
json_data = response.json()
for item in json_data['value']:
if 'thumbnailUrl' in item:
list_image_link.append(item['thumbnailUrl'])
except Exception as e:
print(f"Error occurred: {e}")
return list_image_link
返回一个包含所有提取到的图片缩略图链接的列表,用于后续的图片下载操作。
4. 下载图片
此段代码的主要任务是下载指定的图片并将其保存到本地存储。实现这一功能需要处理网络请求、文件操作以及错误处理等多个方面。下面是该方法的实现代码:
def save_image(self, img_link, filename):
try:
res = requests.get(img_link, headers=self.header)
with open(filename, "wb") as f:
f.write(res.content)
print("存储路径:" + filename)
except requests.RequestException as e:
print(f"Error downloading image: {e}")
- 下载图片:该方法接受两个参数:img_link 和 filename。img_link 是要下载的图片的URL链接,filename 是保存图片的本地文件路径。方法通过HTTP请求下载图片数据,并将其写入到指定的文件中。
- 文件存储:下载的图片以二进制模式(“wb”)写入到本地文件系统中,确保图片数据被正确保存。
通过这种方法,可以确保从网络上下载的图片被正确存储在本地,以便于后续的使用和管理。
5. 使用Proxy302代理IP
在网络爬虫中,频繁的请求可能会被目标网站识别为异常流量,导致IP地址被封禁。为降低此风险,可以使用Proxy302等代理IP服务。Proxy302与302.AI是同一个开发团队,302.AI是一个汇集全球顶级品牌的AI超市,按需付费,无月费,全面开放使用各种类型AI。Proxy302跟302.AI的账号余额是通用的。
首先我们来到 proxy302.com 官网注册账号,选择自己所需要的代理ip
定义一个变量 proxy
,包含了你要使用的代理服务器的地址和端口号。在这个例子中,代理服务器的地址是 proxy.proxy302.com
,端口号是 2222。
# 配置代理设置
proxy = "proxy.proxy302.com:2222" # 代理地址:端口
创建一个 Options
对象,这是Selenium提供的一个配置类,用于设置Chrome浏览器的各种选项。
chrome_options = Options()
chrome_options.add_argument(f'--proxy-server=http://{proxy}')
- 通过
add_argument
方法将一个新的命令行参数添加到Chrome浏览器的启动选项中。这行代码添加了--proxy-server
参数,指定了要使用的代理服务器。 http://{proxy}
表示使用http
协议连接到代理服务器,{proxy}
是上面定义的代理地址和端口。最终,这个参数告诉Chrome浏览器所有的网络请求都要通过这个指定的代理服务器进行。
在选择代理服务时,可靠性和灵活性是至关重要的考虑因素。Proxy302凭借其全面的代理类型、多样的支持协议,以及灵活的定价模式,成为了众多用户的首选。这些优势不仅确保了高效的数据采集,还为不同场景的应用提供了极大的便利。
最全面代理类型:Proxy302提供市面上最全面的代理类型,满足各种业务需求。
- 全球240+国家和地区,6500万个住宅IP可供选择。
- Proxy302支持HTTP、SOCKS5网络协议的代理。
- Proxy302支持动态、静态代理,代理类型分为【动态按流量扣费】、【动态按IP扣费】、【静态按流量扣费】、【静态按IP扣费】,静态代理还分为住宅IP、数据中心IP。
简洁易用:用户界面简洁而不简单,易用且高效。提供浏览器扩展插件,实现一键设置代理,省去复杂配置步骤。
按需付费,无月付套餐:无需套餐捆绑购买,按需付费,充值即可使用所有类型的代理IP,无阶梯式定价。
使用代理ip 这种方式能够有效地隐藏真实IP地址,从而规避被封禁的风险。
6. 主运行函数
run函数是程序的入口点,负责控制整个爬虫的执行流程。它依次处理用户输入、构建请求URL、提取图片链接、下载图片,并进行适当的延时以防止过于频繁的请求。以下是run函数的具体代码:
def run(self):
searchName = input("查询内容:")
self.create_directory(searchName)
search_url = self.url.format(parse.quote(searchName))
image_links = self.get_image_link(search_url)
for index, link in enumerate(image_links):
self.save_image(link, os.path.join(self.directory, f"{index + 1}.jpg"))
time.sleep(1) # 防止请求过于频繁
通过这些方法,爬虫能够高效地从Bing图片搜索中获取并下载相关图片,实现自动化的图像数据收集。
运行截图
三、总结
本文档介绍了如何通过Python实现一个简单的Bing图片爬虫,并解释了各部分代码的功能与逻辑。同时,为了规避频繁请求可能带来的IP封禁风险,我们还介绍了如何在爬虫中使用Proxy302代理IP服务。通过这个项目,大家可以轻松获取大量的图片数据,用于训练计算机视觉模型或其他用途。
标签:
相关文章
最新发布
- 【Python】selenium安装+Microsoft Edge驱动器下载配置流程
- Python 中自动打开网页并点击[自动化脚本],Selenium
- Anaconda基础使用
- 【Python】成功解决 TypeError: ‘<‘ not supported between instances of ‘str’ and ‘int’
- manim边学边做--三维的点和线
- CPython是最常用的Python解释器之一,也是Python官方实现。它是用C语言编写的,旨在提供一个高效且易于使用的Python解释器。
- Anaconda安装配置Jupyter(2024最新版)
- Python中读取Excel最快的几种方法!
- Python某城市美食商家爬虫数据可视化分析和推荐查询系统毕业设计论文开题报告
- 如何使用 Python 批量检测和转换 JSONL 文件编码为 UTF-8
点击排行
- 版本匹配指南:Numpy版本和Python版本的对应关系
- 版本匹配指南:PyTorch版本、torchvision 版本和Python版本的对应关系
- Python 可视化 web 神器:streamlit、Gradio、dash、nicegui;低代码 Python Web 框架:PyWebIO
- 相关性分析——Pearson相关系数+热力图(附data和Python完整代码)
- Python与PyTorch的版本对应
- Anaconda版本和Python版本对应关系(持续更新...)
- Python pyinstaller打包exe最完整教程
- Could not build wheels for llama-cpp-python, which is required to install pyproject.toml-based proj