Olá Habr! Como você sabe, os conjuntos de dados são o combustível para o aprendizado de máquina. Sites como Kaggle, ImageNet, Google Dataset Search e Visual Genom são as fontes dos conjuntos de dados que as pessoas geralmente usam e ouvem das pessoas, mas raramente vejo pessoas que usam sites como o Bing Image Search para encontrar dados. e Instagram. Portanto, neste artigo, mostrarei como é fácil obter dados dessas fontes escrevendo dois pequenos programas em Python.
Pesquisa de imagens do Bing
A primeira coisa a fazer é seguir o link, clicar no botão Obter API Key e se registrar usando qualquer uma das redes sociais propostas (Microsoft, Facebook, LinkedIn ou GitHub). Após a conclusão do processo de registro, você será redirecionado para a página Suas APIs, que deve se parecer com isso (o que é obscurecido são suas chaves de API):
Vamos passar a escrever código. Importamos as bibliotecas necessárias:
from requests import exceptions
import requests
import cv2
import os
Em seguida, é necessário especificar alguns parâmetros: Chave da API (você precisa escolher uma das duas chaves propostas), especificar as condições de pesquisa, o número máximo de imagens por solicitação e também definir o URL final:
subscription_key = "YOUR_API_KEY"
search_terms = ['girl', 'man']
number_of_images_per_request = 100
search_url = "https://api.cognitive.microsoft.com/bing/v7.0/images/search"
Agora vamos escrever três pequenas funções que:
1) Crie uma pasta separada para cada termo de pesquisa:
def create_folder(name_folder):
path = os.path.join(name_folder)
if not os.path.exists(path):
os.makedirs(path)
print('------------------------------')
print("create folder with path {0}".format(path))
print('------------------------------')
else:
print('------------------------------')
print("folder exists {0}".format(path))
print('------------------------------')
return path
2) Retorna o conteúdo da resposta do servidor em JSON:
def get_results():
search = requests.get(search_url, headers=headers,
params=params)
search.raise_for_status()
return search.json()
3) :
def write_image(photo):
r = requests.get(v["contentUrl"], timeout=25)
f = open(photo, "wb")
f.write(r.content)
f.close()
:
for category in search_terms:
folder = create_folder(category)
headers = {"Ocp-Apim-Subscription-Key": subscription_key}
params = {"q": category, "offset": 0,
"count": number_of_images_per_request}
results = get_results()
total = 0
for offset in range(0, results["totalEstimatedMatches"],
number_of_images_per_request):
params["offset"] = offset
results = get_results()
for v in results["value"]:
try:
ext = v["contentUrl"][v["contentUrl"].
rfind("."):]
photo = os.path.join(category, "{}{}".
format('{}'.format(category)
+ str(total).zfill(6), ext))
write_image(photo)
print("saving: {}".format(photo))
image = cv2.imread(photo)
if image is None:
print("deleting: {}".format(photo))
os.remove(photo)
continue
total += 1
except Exception as e:
if type(e) in EXCEPTIONS:
continue
:
from selenium import webdriver
from time import sleep
import pyautogui
from bs4 import BeautifulSoup
import requests
import shutil
, selenium, geckodriver. , , #bird. 26 . , geckodriver, , :
browser=webdriver.Firefox(executable_path='/path/to/geckodriver')
browser.get('https://www.instagram.com/explore/tags/bird/')
6 , :
1) . login.send_keys(' ') password.send_keys(' ') :
def enter_in_account():
button_enter = browser.find_element_by_xpath("//*[@class='sqdOP L3NKy y3zKF ']")
button_enter.click()
sleep(2)
login = browser.find_element_by_xpath("//*[@class='_2hvTZ pexuQ zyHYP']")
login.send_keys('')
sleep(1)
password = browser.find_element_by_xpath("//*[@class='_2hvTZ pexuQ zyHYP']")
password.send_keys('')
enter = browser.find_element_by_xpath(
"//*[@class=' Igw0E IwRSH eGOV_ _4EzTm ']")
enter.click()
sleep(4)
not_now_button = browser.find_element_by_xpath("//*[@class='sqdOP yWX7d y3zKF ']")
not_now_button.click()
sleep(2)
2) :
def find_first_post():
sleep(3)
pyautogui.moveTo(450, 800, duration=0.5)
pyautogui.click()
, , , - , , , moveTo() .
3) :
def get_url():
sleep(0.5)
pyautogui.moveTo(1740, 640, duration=0.5)
pyautogui.click()
return browser.current_url
, : .
4) html- :
def get_html(url):
r = requests.get(url)
return r.text
5) URL :
def get_src(html):
soup = BeautifulSoup(html, 'lxml')
src = soup.find('meta', property="og:image")
return src['content']
6) . filename :
def download_image(image_name, image_url):
filename = 'bird/bird{}.jpg'.format(image_name)
r = requests.get(image_url, stream=True)
if r.status_code == 200:
r.raw.decode_content = True
with open(filename, 'wb') as f:
shutil.copyfileobj(r.raw, f)
print('Image sucessfully Downloaded')
else:
print('Image Couldn\'t be retreived')
. , , , , . , pyautogui, , , . , , .
, Ubuntu 18.04. GitHub.