Profile
Back to NewsBack
GitHub Trending 4 min
Reader Mode
Giglium/vinted_scraper: A very simple Python package for scraping Vinted. Supports both synchronous and asynchronous operations with automatic session management and typed responses.

Giglium/vinted_scraper: A very simple Python package for scraping Vinted. Supports both synchronous and asynchronous operations with automatic session management and typed responses.

17 hours ago

Vinted Scraper

Package Version</a> Python Version</a> codecov</a> Codacy Badge</a> License</a> FOSSA Status</a>

A very simple Python package for scraping Vinted. Supports both synchronous and asynchronous operations with automatic session management and typed responses.

📖 Full Documentation | 💡 Examples | 📝 Changelog

Installation

Install using pip:

pip install vinted_scraper

Functions

The package offers the following methods:

search - Gets all items from the listing page based on search parameters.

Parameters

| name | type | data type | description |
| ------ | -------- | --------- | ---------------------------------------------- |
| params | optional | Dict | Query parameters like the pagination and so on |

Returns: List[VintedItem] (VintedScraper) or Dict[str, Any] (VintedWrapper)

item - Reads item metadata (title, description, url, image) from the public item page.

The JSON item endpoint is blocked by the anti-bot protection and returns 403 (see #59), so the data is read from the public item page instead. Only the fields exposed by the page's OpenGraph tags are populated, and only the is streamed (the full page body is not downloaded).

Parameters

| name | type | data type | description |
| ------ | -------- | --------- | ------------------------------------------------ |
| id | required | str | The unique identifier of the item to retrieve |
| fields | optional | List[str] | OG fields to extract (defaults to all available) |

Returns: Optional[VintedItem] (VintedScraper) or Optional[Dict[str, Any]] (VintedWrapper) — the metadata (e.g. result["description"]), or None if the page has no description.

get_user - Reads a user's profile.

Parameters

| name | type | data type | description |
| ------- | -------- | --------------- | --------------------------------- |
| user_id | required | Union[int, str] | The unique identifier of the user |

Returns: VintedUser (VintedScraper) or Dict[str, Any] (VintedWrapper)

curl - Perform an HTTP GET request to the given relative endpoint.

Parameters

| name | type | data type | description |
| ------------ | -------- | --------- | ---------------------------------------------- |
| endpoint | required | str | The relative endpoint to make the request to |
| params | optional | Dict | Query parameters like the pagination and so on |
| api_endpoint | optional | bool | Route to the api. host (default: False) |

Returns: VintedJsonModel (VintedScraper) or Dict[str, Any] (VintedWrapper)

Usage

from vinted_scraper import VintedScraper

scraper = VintedScraper("https://www.vinted.com") items = scraper.search({"search_text": "board games"})

for item in items: print(f"{item.title} - {item.price}")

The base URL may be passed with or without the www. prefix (e.g. https://vinted.com or https://www.vinted.com); it is normalized internally.
>
> from vinted_scraper import VintedScraper
> > scraper = VintedScraper("https://www.vinted.com") >
> Check out the examples for more!

Debugging

To enable debug logging for troubleshooting:

import logging

Configure logging BEFORE importing vinted_scraper

logging.basicConfig( level=logging.DEBUG, format="%(levelname)s:%(name)s:%(message)s" )

from vinted_scraper import VintedScraper

scraper = VintedScraper("https://www.vinted.com") scraper.search({"search_text": "board games"})

Debug output (click to expand)

DEBUG:vinted_scraper._vinted_wrapper:Initializing VintedScraper(baseurl=https://www.vinted.com, user_agent=None, session=auto-fetch, config=None)
DEBUG:vinted_scraper._vinted_wrapper:Refreshing session cookie
DEBUG:vinted_scraper._vinted_wrapper:Cookie fetch attempt 1/3
DEBUG:vinted_scraper._vinted_wrapper:Session fetched successfully: VintedSession(cookies={'access_token_web': 'eyJraWQiOiJFNTdZ...'}, csrf_token=None, anon_id='...')...
DEBUG:vinted_scraper._vinted_wrapper:Calling search() with params: {'search_text': 'board games'}
DEBUG:vinted_scraper._vinted_wrapper:API Request: GET /svc-catalogue/items with params {'search_text': 'board games'}
DEBUG:vinted_scraper._vinted_wrapper:API Response: /svc-catalogue/items - Status: 200

Common Issues

  • 403 Forbidden Error: The Vinted JSON item endpoint frequently returns 403 errors (#59). Because of this, item() reads the item metadata from the public item page (a document navigation that is not blocked the same way) instead of the JSON API, so only the fields exposed by the page (title, description, url, image) are available.
  • Cookie Fetch Failed: If cookies cannot be fetched:
- Verify the base URL is correct - Check your internet connection, there is an anti-bot protection, so requests from datacenter IPs/VPNs may be rejected. Try manually getting the cookie by running the following:
curl -v -c - -L "<base-url>" | grep access_token_web

License

This project is licensed under the MIT License - see the LICENSE file for details.

FOSSA Status</a>

Chat with me