L’extraction de données de Pinterest est différente de la plupart des travaux de scraping HTML. Pinterest génère tout son contenu de manière dynamique et ne laisse aucune de ses structures de données, comme JSON, sur la page.
Si vous décidez de suivre, vous apprendrez à collecter des données Pinterest à l’aide des méthodes suivantes :
- Extraire les données de Pinterest avec Playwright
- Extraire des données de Pinterest avec l’API Scraper de Bright Data
Que pouvez-vous extraire ?
Si vous regardez Pinterest dans votre navigateur, toutes les épingles sont profondément imbriquées dans un élément div
avec data-test-id="pinWrapper"
.
Si nous parvenons à trouver tous ces objets sur la page, nous pouvons extraire toutes leurs données, par exemple :
- Le titre de chaque épingle.
- L’adresse URL pointant directement vers l’épingle.
- L’image de l’épingle dans les résultats de la recherche.
Scraping Pinterest avec un auteur de pièces de théâtre
Pour commencer
Il existe de nombreuses bibliothèques de scraping en Python, et nous utiliserons Playwright. Tout d’abord, vous devez vous assurer que Playwright est installé. Vous pouvez consulter leur documentation ici. Playwright est l’un des meilleurs navigateurs sans tête disponibles.
Installer un dramaturge
pip install playwright
Installer les navigateurs de Playwright
playwright install
Grattage des épingles actuelles
Voyons maintenant comment récupérer les épingles de Pinterest. Dans le code ci-dessous, nous créons deux fonctions, scrape_pins()
et main()
. scrape_pins()
ouvre un navigateur et extrait les données de Pinterest. main()
est utilisé comme point d’entrée pour le runtime asynchrone.
import asyncio
from playwright.async_api import async_playwright
import json
user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
async def scrape_pins(query):
search_url = f"https://www.pinterest.com/search/pins/?q={query}&rs=typed"
scraped_data = []
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page(user_agent=user_agent)
response = await page.goto(search_url)
await asyncio.sleep(2)
try:
#find the pins on the page
pins = await page.query_selector_all("div[data-test-id='pinWrapper']")
#iterate through the pins and extract data
for pin in pins:
title_link = await pin.query_selector("a")
pin_url = await title_link.get_attribute("href")
title = await title_link.get_attribute("aria-label")
img = await title_link.query_selector("img")
img_src = await img.get_attribute("src")
extracted_data = {
"title": title,
"url": pin_url,
"img": img_src
}
#add the data to our results
scraped_data.append(extracted_data)
except:
print(f"Failed to scrape pins at {search_url}")
finally:
await browser.close()
#everything has finished, return our scraped data
return scraped_data
async def main():
search_query = "office"
office_results = await scrape_pins(search_query)
with open(f"{search_query}-results.json", "w") as file:
try:
json.dump(office_results, file, indent=4)
except Exception as e:
print(f"Failed to save results: {e}")
if __name__ == "__main__":
asyncio.run(main())
scrape_pins()
effectue les étapes suivantes au cours de notre recherche :
- Créer notre url :
search_url.
- Créer un tableau pour contenir nos résultats,
scraped_data
. - Ouvrez un nouveau navigateur.
- Définissez un
user_agent
personnalisé afin de fonctionner en mode headless. Sans cela, Pinterest nous bloquera. - Nous attendons deux secondes pour que le contenu se charge avec
asyncio.sleep(2)
. - Nous trouvons toutes les épingles visibles sur la page à l’aide de ce sélecteur :
div[data-test-id='pinWrapper']
. - Pour chaque broche, nous extrayons les données suivantes :
titre
: Le titre de l’épingle.url
: L’url menant directement à l’épingle.img
: L’image de l’épingle affichée dans les résultats de la recherche.
Voici quelques exemples de données provenant du scraper Playwright ci-dessus.
[
{
"title": "A minimalist office featuring a soothing color palette of whites, greys, and natural wood accents, creating a calm and spacious feel3",
"url": "/pin/10203536650743650/",
"img": "https://i.pinimg.com/236x/b3/21/e2/b321e2485da40c0dde2685c3a4fdcb56.jpg"
},
{
"title": "a home office with two desks and an open door that leads to the outside",
"url": "/pin/261912534574291013/",
"img": "https://i.pinimg.com/236x/56/f1/29/56f129512885e1b3c9971b16f9445c9a.jpg"
},
{
"title": "home office decor, blakc home office, dark home office, moody home office, small home office",
"url": "/pin/60094976273327121/",
"img": "https://i.pinimg.com/236x/ba/75/c9/ba75c9be7e635cce3ee80acdf70d6f9f.jpg"
},
{
"title": "an office with a desk, chair and bookshelf in the middle of it",
"url": "/pin/599682506666665720/",
"img": "https://i.pinimg.com/236x/57/66/1d/57661dc80bebda3dfe946c070ee8ed13.jpg"
},
{
"title": "a home office with green walls and plants on the shelves, along with a computer desk",
"url": "/pin/1147080967585091410/",
"img": "https://i.pinimg.com/236x/ce/e8/b7/cee8b74151b29605a80e0f61898c249d.jpg"
},
Scraper Pinterest avec l’API Bright Data Scraper
Avec notre API Pinterest Scraper, vous pouvez complètement automatiser ce processus et vous n’avez pas à vous soucier des navigateurs sans tête, des sélecteurs ou de quoi que ce soit d’autre !
Assurez-vous que Python Requests est installé.
Demandes d’installation
pip install requests
Une fois que vous avez configuré votre appel API, vous pouvez le déclencher à partir de Python. Ci-dessous, nous avons également deux fonctions : get_pins()
et poll_and_retrieve_snapshot()
.
get_pins()
: Cette fonction prend unmot clé
ainsi que votreclé api
. Elle crée et envoie ensuite une requête à notre API de scraper. Cette requête déclenche un scrape de Pinterest pour le mot-clé désiré.poll_and_retrieve_snapshot()
prend votreclé d'api
et l’identifiant de l'instantané
. Elle vérifie ensuite toutes les 10 secondes si l’instantané est prêt. Une fois que l’instantané est prêt, les données sont téléchargées et nous quittons la fonction.
import requests
import json
import time
#function to trigger the scrape
def get_pins(api_key, keyword):
url = "https://api.brightdata.com/datasets/v3/trigger"
headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}
params = {
"dataset_id": "gd_lk0sjs4d21kdr7cnlv",
"include_errors": "true",
"type": "discover_new",
"discover_by": "keyword",
}
data = [
{"keyword":keyword},
]
#trigger the scrape
response = requests.post(url, headers=headers, params=params, json=data)
#return the snapshot_id
return response.json()["snapshot_id"]
def poll_and_retrieve_snapshot(api_key, snapshot_id, output_file="snapshot-data.json"):
#create the snapshot url
snapshot_url = f"https://api.brightdata.com/datasets/v3/snapshot/{snapshot_id}?format=json"
headers = {
"Authorization": f"Bearer {api_key}"
}
print(f"Polling snapshot for ID: {snapshot_id}...")
while True:
response = requests.get(snapshot_url, headers=headers)
if response.status_code == 200:
print("Snapshot is ready. Downloading...")
snapshot_data = response.json()
#write the snapshot to a new json file
with open(output_file, "w", encoding="utf-8") as file:
json.dump(snapshot_data, file, indent=4)
print(f"Snapshot saved to {output_file}")
break
elif response.status_code == 202:
print("Snapshot is not ready yet. Retrying in 10 seconds...")
else:
print(f"Error: {response.status_code}")
print(response.text)
break
time.sleep(10)
if __name__ == "__main__":
API_KEY = "YOUR-BRIGHT-DATA-API-KEY"
KEYWORD = "office"
snapshot_id = get_pins(API_KEY, KEYWORD)
poll_and_retrieve_snapshot(API_KEY, snapshot_id)
Voici quelques exemples de données provenant du fichier téléchargé. Étant donné que notre demande de déclenchement comportait l’option "include_errors" : "true"
, le fichier comprend également les épingles contenant des erreurs. L’échantillon de données ci-dessous comprend deux broches d’erreur ainsi que deux broches avec des données correctes.
[
{
"post_type": null,
"timestamp": "2025-02-17T15:26:17.248Z",
"input": {
"url": "https://www.pinterest.com/pin/jh46IGe2",
"discovery_input": {
"keyword": "office"
}
},
"warning": "Bad input. Wrong id!",
"warning_code": "dead_page",
"discovery_input": {
"keyword": "office"
}
},
{
"post_type": null,
"timestamp": "2025-02-17T15:26:18.757Z",
"input": {
"url": "https://www.pinterest.com/pin/4471026676503806548",
"discovery_input": {
"keyword": "office"
}
},
"warning": "Bad input. Page does not exist.",
"warning_code": "dead_page",
"discovery_input": {
"keyword": "office"
}
},
{
"url": "https://www.pinterest.com/pin/929782285570058239",
"post_id": "929782285570058239",
"title": "Essential Tips for Designing a Functional Small Office Space: Maximize Efficiency",
"content": "17 Smart Tips for Designing a Productive Small Office Space",
"date_posted": "2025-02-06T15:00:47.000Z",
"user_name": "wellnesswink",
"user_url": "https://www.pinterest.com/wellnesswink",
"user_id": "929782422978147260",
"followers": 232,
"likes": 0,
"categories": [
"Explore",
"Home Decor"
],
"attached_files": [
"https://i.pinimg.com/originals/c8/c0/d5/c8c0d5fb45352e40535db4510049a142.jpg"
],
"image_video_url": "https://i.pinimg.com/originals/c8/c0/d5/c8c0d5fb45352e40535db4510049a142.jpg",
"video_length": 0,
"post_type": "image",
"comments_num": 0,
"discovery_input": {
"keyword": "office"
},
"timestamp": "2025-02-17T15:26:19.502Z",
"input": {
"url": "https://www.pinterest.com/pin/929782285570058239",
"discovery_input": {
"keyword": "office"
}
}
},
{
"url": "https://www.pinterest.com/pin/889812838892568569",
"post_id": "889812838892568569",
"title": "20 Modern Masculine Home Office Design Ideas for Men",
"content": "Explore 25 chic home office decor ideas that blend style and functionality. Create a workspace you love and boost your productivity effortlessly!",
"date_posted": "2025-01-27T07:11:38.000Z",
"user_name": "artfullhouses",
"user_url": "https://www.pinterest.com/artfullhouses",
"user_id": "889812976285233957",
"followers": 10,
"likes": 0,
"categories": [
"Explore",
"Home Decor"
],
"attached_files": [
"https://i.pinimg.com/originals/f1/cb/f7/f1cbf7b127db2bef2306ba19ffcc0646.png"
],
"image_video_url": "https://i.pinimg.com/originals/f1/cb/f7/f1cbf7b127db2bef2306ba19ffcc0646.png",
"video_length": 0,
"hashtags": [
"Mens Desk Decor",
"Chic Home Office Decor",
"Mens Desk",
"Home Office Ideas For Men",
"Office Ideas For Men",
"Masculine Home Office Ideas",
"Masculine Home Office",
"Masculine Home",
"Chic Home Office"
],
"post_type": "image",
"comments_num": 0,
"discovery_input": {
"keyword": "office"
},
"timestamp": "2025-02-17T15:26:20.069Z",
"input": {
"url": "https://www.pinterest.com/pin/889812838892568569",
"discovery_input": {
"keyword": "office"
}
}
},
Comme vous pouvez le constater, l’API Scraper recueille beaucoup plus de données que le scraper initial que nous avons construit avec Playwright. Notre API explore Pinterest à la recherche de votre mot-clé
, puis récupère toutes les épingles individuelles qu’elle trouve au cours de l’exploration.
La commodité n’est pas le seul avantage de cette approche. Notre API Pinterest Scraper extrait vos données à un coût extrêmement bas. Notre fichier de résultats total comptait près de 45 000 lignes et n’a coûté que 0,97 $ à générer.
Engager quelqu’un pour construire un scraper de la même qualité coûterait probablement plusieurs centaines de dollars et vous devriez attendre des jours pour obtenir vos données. Avec notre API Scraper, vous obtenez vos données en quelques minutes pour une fraction du coût.
Conclusion
Extraire des données de Pinterest ne doit pas être difficile. Que vous construisiez votre propre scraper à l’aide de Playwright ou que vous optiez pour une solution entièrement automatisée comme notre Pinterest Scraper, la bonne approche dépend de vos besoins.
Pour une extraction rapide, fiable et évolutive des données Pinterest, l’API Scraper de Bright Data élimine les problèmes liés à la gestion des navigateurs sans tête, des proxies et des CAPTCHA, et fournit des données structurées sans effort.
✅ Des résultats plus rapides – Obtenez des données en quelques minutes, et non en quelques heures
✅ Rentabilité – Ne payez que pour ce que vous extrayez
Pas de maintenance – Évitez de traiter les demandes bloquées
Commencez votre essai gratuit dès aujourd’hui et rationalisez votre scraping Pinterest avec l’API Web Scraper de Bright Data !
Aucune carte de crédit requise