wilmars commited on
Commit
0ead04c
1 Parent(s): c8e76b4

update readme and api

Browse files
.gitignore CHANGED
@@ -1,3 +1,4 @@
1
  src/__pycache__/
 
2
  *.ipynb
3
  *.csv
 
1
  src/__pycache__/
2
+ api/__pycache__/
3
  *.ipynb
4
  *.csv
README.md CHANGED
@@ -1,5 +1,17 @@
1
  # MeLi Scraper
2
- Web scrapping proyect for predict vehicle prices
 
 
 
 
 
 
 
 
 
 
 
 
3
 
4
  ## API
5
  To run the API for this project please run
@@ -7,3 +19,4 @@ To run the API for this project please run
7
  docker compose up
8
  ```
9
 
 
 
1
  # MeLi Scraper
2
+ Web scrapping proyect for vehicle prices in Colombia. To Mercado Libre page with educational focus
3
+ ## Locally request
4
+ Please create your virtual environment before, for example
5
+ ```bash
6
+ python3 -m venv myenv
7
+ source myenv/bin/activate
8
+ ```
9
+ Then run
10
+ ```bash
11
+ PYTHONPATH=$PWD
12
+ pip install -r requirements.txt
13
+ python src/extraction.py
14
+ ```
15
 
16
  ## API
17
  To run the API for this project please run
 
19
  docker compose up
20
  ```
21
 
22
+
api/__pycache__/main.cpython-310.pyc DELETED
Binary file (402 Bytes)
 
api/main.py CHANGED
@@ -1,9 +1,14 @@
1
  from fastapi import FastAPI
2
  from src.extraction import main
 
3
 
4
  app = FastAPI()
5
 
6
- @app.get("/{product}")
7
- async def get_data(product):
 
 
 
 
8
  data = await main(product)
9
  return data
 
1
  from fastapi import FastAPI
2
  from src.extraction import main
3
+ from pydantic import BaseModel, Field
4
 
5
  app = FastAPI()
6
 
7
+ class Product(BaseModel):
8
+ product: str = Field("Producto a buscar", example = "carros")
9
+
10
+ @app.post("/product")
11
+ async def get_data(product: Product):
12
+ print(product)
13
  data = await main(product)
14
  return data
config.yaml DELETED
@@ -1 +0,0 @@
1
- URL: 'https://listado.mercadolibre.com.co'
 
 
src/extraction.py CHANGED
@@ -39,7 +39,7 @@ async def organize_page_data(url: str = BASE_URL ,product= None):
39
  print('follow page not found')
40
  prices = get_all_product_prices_for_page(s)
41
  urls = get_all_product_urls_for_page(s)
42
- output_dict = {product:products, 'price':prices ,'link':urls}
43
  return pd.DataFrame(output_dict), follow
44
 
45
 
 
39
  print('follow page not found')
40
  prices = get_all_product_prices_for_page(s)
41
  urls = get_all_product_urls_for_page(s)
42
+ output_dict = {'product':products, 'price':prices ,'link':urls}
43
  return pd.DataFrame(output_dict), follow
44
 
45
 
testing.ipynb CHANGED
@@ -13,7 +13,628 @@
13
  "import pandas as pd\n",
14
  "from lxml import etree\n",
15
  "import datetime\n",
16
- "import json"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  ]
18
  },
19
  {
 
13
  "import pandas as pd\n",
14
  "from lxml import etree\n",
15
  "import datetime\n",
16
+ "import json\n",
17
+ "import requests"
18
+ ]
19
+ },
20
+ {
21
+ "cell_type": "code",
22
+ "execution_count": 37,
23
+ "metadata": {},
24
+ "outputs": [
25
+ {
26
+ "ename": "ConnectionError",
27
+ "evalue": "HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /product (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x704b7591fbb0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
28
+ "output_type": "error",
29
+ "traceback": [
30
+ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
31
+ "\u001b[0;31mConnectionRefusedError\u001b[0m Traceback (most recent call last)",
32
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connection.py:203\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 202\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 203\u001b[0m sock \u001b[38;5;241m=\u001b[39m \u001b[43mconnection\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_connection\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 204\u001b[0m \u001b[43m \u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_dns_host\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mport\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 205\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 206\u001b[0m \u001b[43m \u001b[49m\u001b[43msource_address\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msource_address\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 207\u001b[0m \u001b[43m \u001b[49m\u001b[43msocket_options\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msocket_options\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 208\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 209\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m socket\u001b[38;5;241m.\u001b[39mgaierror \u001b[38;5;28;01mas\u001b[39;00m e:\n",
33
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/util/connection.py:85\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 84\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m---> 85\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m err\n\u001b[1;32m 86\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[1;32m 87\u001b[0m \u001b[38;5;66;03m# Break explicitly a reference cycle\u001b[39;00m\n",
34
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/util/connection.py:73\u001b[0m, in \u001b[0;36mcreate_connection\u001b[0;34m(address, timeout, source_address, socket_options)\u001b[0m\n\u001b[1;32m 72\u001b[0m sock\u001b[38;5;241m.\u001b[39mbind(source_address)\n\u001b[0;32m---> 73\u001b[0m \u001b[43msock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43msa\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 74\u001b[0m \u001b[38;5;66;03m# Break explicitly a reference cycle\u001b[39;00m\n",
35
+ "\u001b[0;31mConnectionRefusedError\u001b[0m: [Errno 111] Connection refused",
36
+ "\nThe above exception was the direct cause of the following exception:\n",
37
+ "\u001b[0;31mNewConnectionError\u001b[0m Traceback (most recent call last)",
38
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connectionpool.py:790\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 789\u001b[0m \u001b[38;5;66;03m# Make the request on the HTTPConnection object\u001b[39;00m\n\u001b[0;32m--> 790\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_make_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 791\u001b[0m \u001b[43m \u001b[49m\u001b[43mconn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 792\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 793\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 794\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout_obj\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 795\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 796\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 797\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 798\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 799\u001b[0m \u001b[43m \u001b[49m\u001b[43mresponse_conn\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresponse_conn\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 800\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 801\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 802\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mresponse_kw\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 803\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 805\u001b[0m \u001b[38;5;66;03m# Everything went great!\u001b[39;00m\n",
39
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connectionpool.py:496\u001b[0m, in \u001b[0;36mHTTPConnectionPool._make_request\u001b[0;34m(self, conn, method, url, body, headers, retries, timeout, chunked, response_conn, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 495\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 496\u001b[0m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 498\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 499\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 500\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 501\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 502\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mpreload_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 503\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdecode_content\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 504\u001b[0m \u001b[43m \u001b[49m\u001b[43menforce_content_length\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43menforce_content_length\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 505\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 507\u001b[0m \u001b[38;5;66;03m# We are swallowing BrokenPipeError (errno.EPIPE) since the server is\u001b[39;00m\n\u001b[1;32m 508\u001b[0m \u001b[38;5;66;03m# legitimately able to close the connection after sending a valid response.\u001b[39;00m\n\u001b[1;32m 509\u001b[0m \u001b[38;5;66;03m# With this behaviour, the received response is still readable.\u001b[39;00m\n",
40
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connection.py:395\u001b[0m, in \u001b[0;36mHTTPConnection.request\u001b[0;34m(self, method, url, body, headers, chunked, preload_content, decode_content, enforce_content_length)\u001b[0m\n\u001b[1;32m 394\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mputheader(header, value)\n\u001b[0;32m--> 395\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mendheaders\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 397\u001b[0m \u001b[38;5;66;03m# If we're given a body we start sending that in chunks.\u001b[39;00m\n",
41
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/http/client.py:1278\u001b[0m, in \u001b[0;36mHTTPConnection.endheaders\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1277\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m CannotSendHeader()\n\u001b[0;32m-> 1278\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_send_output\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmessage_body\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mencode_chunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mencode_chunked\u001b[49m\u001b[43m)\u001b[49m\n",
42
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/http/client.py:1038\u001b[0m, in \u001b[0;36mHTTPConnection._send_output\u001b[0;34m(self, message_body, encode_chunked)\u001b[0m\n\u001b[1;32m 1037\u001b[0m \u001b[38;5;28;01mdel\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_buffer[:]\n\u001b[0;32m-> 1038\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmsg\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1040\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m message_body \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 1041\u001b[0m \n\u001b[1;32m 1042\u001b[0m \u001b[38;5;66;03m# create a consistent interface to message_body\u001b[39;00m\n",
43
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/http/client.py:976\u001b[0m, in \u001b[0;36mHTTPConnection.send\u001b[0;34m(self, data)\u001b[0m\n\u001b[1;32m 975\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mauto_open:\n\u001b[0;32m--> 976\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconnect\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 977\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n",
44
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connection.py:243\u001b[0m, in \u001b[0;36mHTTPConnection.connect\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 242\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mconnect\u001b[39m(\u001b[38;5;28mself\u001b[39m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m--> 243\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39msock \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_new_conn\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 244\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_tunnel_host:\n\u001b[1;32m 245\u001b[0m \u001b[38;5;66;03m# If we're tunneling it means we're connected to our proxy.\u001b[39;00m\n",
45
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connection.py:218\u001b[0m, in \u001b[0;36mHTTPConnection._new_conn\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m 217\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mOSError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[0;32m--> 218\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m NewConnectionError(\n\u001b[1;32m 219\u001b[0m \u001b[38;5;28mself\u001b[39m, \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFailed to establish a new connection: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00me\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 220\u001b[0m ) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01me\u001b[39;00m\n\u001b[1;32m 222\u001b[0m \u001b[38;5;66;03m# Audit hooks are only available in Python 3.8+\u001b[39;00m\n",
46
+ "\u001b[0;31mNewConnectionError\u001b[0m: <urllib3.connection.HTTPConnection object at 0x704b7591fbb0>: Failed to establish a new connection: [Errno 111] Connection refused",
47
+ "\nThe above exception was the direct cause of the following exception:\n",
48
+ "\u001b[0;31mMaxRetryError\u001b[0m Traceback (most recent call last)",
49
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/adapters.py:486\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 485\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 486\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[43mconn\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43murlopen\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 487\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 488\u001b[0m \u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 489\u001b[0m \u001b[43m \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbody\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 490\u001b[0m \u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 491\u001b[0m \u001b[43m \u001b[49m\u001b[43mredirect\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 492\u001b[0m \u001b[43m \u001b[49m\u001b[43massert_same_host\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 493\u001b[0m \u001b[43m \u001b[49m\u001b[43mpreload_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 494\u001b[0m \u001b[43m \u001b[49m\u001b[43mdecode_content\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 495\u001b[0m \u001b[43m \u001b[49m\u001b[43mretries\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmax_retries\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 496\u001b[0m \u001b[43m \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 497\u001b[0m \u001b[43m \u001b[49m\u001b[43mchunked\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mchunked\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 498\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 500\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m (ProtocolError, \u001b[38;5;167;01mOSError\u001b[39;00m) \u001b[38;5;28;01mas\u001b[39;00m err:\n",
50
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/connectionpool.py:844\u001b[0m, in \u001b[0;36mHTTPConnectionPool.urlopen\u001b[0;34m(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, chunked, body_pos, preload_content, decode_content, **response_kw)\u001b[0m\n\u001b[1;32m 842\u001b[0m new_e \u001b[38;5;241m=\u001b[39m ProtocolError(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConnection aborted.\u001b[39m\u001b[38;5;124m\"\u001b[39m, new_e)\n\u001b[0;32m--> 844\u001b[0m retries \u001b[38;5;241m=\u001b[39m \u001b[43mretries\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mincrement\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 845\u001b[0m \u001b[43m \u001b[49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43merror\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnew_e\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_pool\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43m_stacktrace\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msys\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mexc_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;241;43m2\u001b[39;49m\u001b[43m]\u001b[49m\n\u001b[1;32m 846\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 847\u001b[0m retries\u001b[38;5;241m.\u001b[39msleep()\n",
51
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/urllib3/util/retry.py:515\u001b[0m, in \u001b[0;36mRetry.increment\u001b[0;34m(self, method, url, response, error, _pool, _stacktrace)\u001b[0m\n\u001b[1;32m 514\u001b[0m reason \u001b[38;5;241m=\u001b[39m error \u001b[38;5;129;01mor\u001b[39;00m ResponseError(cause)\n\u001b[0;32m--> 515\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m MaxRetryError(_pool, url, reason) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mreason\u001b[39;00m \u001b[38;5;66;03m# type: ignore[arg-type]\u001b[39;00m\n\u001b[1;32m 517\u001b[0m log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIncremented Retry for (url=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m): \u001b[39m\u001b[38;5;132;01m%r\u001b[39;00m\u001b[38;5;124m\"\u001b[39m, url, new_retry)\n",
52
+ "\u001b[0;31mMaxRetryError\u001b[0m: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /product (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x704b7591fbb0>: Failed to establish a new connection: [Errno 111] Connection refused'))",
53
+ "\nDuring handling of the above exception, another exception occurred:\n",
54
+ "\u001b[0;31mConnectionError\u001b[0m Traceback (most recent call last)",
55
+ "Cell \u001b[0;32mIn[37], line 13\u001b[0m\n\u001b[1;32m 8\u001b[0m payload \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 9\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mproduct\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcarro\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 10\u001b[0m }\n\u001b[1;32m 11\u001b[0m headers \u001b[38;5;241m=\u001b[39m {\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mContent-Type\u001b[39m\u001b[38;5;124m'\u001b[39m: \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mapplication/json\u001b[39m\u001b[38;5;124m'\u001b[39m}\n\u001b[0;32m---> 13\u001b[0m response \u001b[38;5;241m=\u001b[39m \u001b[43mrequests\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mpost\u001b[49m\u001b[43m(\u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdumps\u001b[49m\u001b[43m(\u001b[49m\u001b[43mpayload\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mheaders\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mheaders\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 15\u001b[0m \u001b[38;5;28mprint\u001b[39m(response\u001b[38;5;241m.\u001b[39mstatus_code)\n\u001b[1;32m 16\u001b[0m \u001b[38;5;28mprint\u001b[39m(response\u001b[38;5;241m.\u001b[39mtext)\n",
56
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/api.py:115\u001b[0m, in \u001b[0;36mpost\u001b[0;34m(url, data, json, **kwargs)\u001b[0m\n\u001b[1;32m 103\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mpost\u001b[39m(url, data\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, json\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 104\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124;03m\"\"\"Sends a POST request.\u001b[39;00m\n\u001b[1;32m 105\u001b[0m \n\u001b[1;32m 106\u001b[0m \u001b[38;5;124;03m :param url: URL for the new :class:`Request` object.\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 112\u001b[0m \u001b[38;5;124;03m :rtype: requests.Response\u001b[39;00m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 115\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mpost\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdata\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjson\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mjson\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
57
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/api.py:59\u001b[0m, in \u001b[0;36mrequest\u001b[0;34m(method, url, **kwargs)\u001b[0m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# By using the 'with' statement we are sure the session is closed, thus we\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# avoid leaving sockets open which can trigger a ResourceWarning in some\u001b[39;00m\n\u001b[1;32m 57\u001b[0m \u001b[38;5;66;03m# cases, and look like a memory leak in others.\u001b[39;00m\n\u001b[1;32m 58\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m sessions\u001b[38;5;241m.\u001b[39mSession() \u001b[38;5;28;01mas\u001b[39;00m session:\n\u001b[0;32m---> 59\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43msession\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mmethod\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmethod\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43murl\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43murl\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n",
58
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/sessions.py:589\u001b[0m, in \u001b[0;36mSession.request\u001b[0;34m(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)\u001b[0m\n\u001b[1;32m 584\u001b[0m send_kwargs \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 585\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtimeout\u001b[39m\u001b[38;5;124m\"\u001b[39m: timeout,\n\u001b[1;32m 586\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mallow_redirects\u001b[39m\u001b[38;5;124m\"\u001b[39m: allow_redirects,\n\u001b[1;32m 587\u001b[0m }\n\u001b[1;32m 588\u001b[0m send_kwargs\u001b[38;5;241m.\u001b[39mupdate(settings)\n\u001b[0;32m--> 589\u001b[0m resp \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43msend_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 591\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m resp\n",
59
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/sessions.py:703\u001b[0m, in \u001b[0;36mSession.send\u001b[0;34m(self, request, **kwargs)\u001b[0m\n\u001b[1;32m 700\u001b[0m start \u001b[38;5;241m=\u001b[39m preferred_clock()\n\u001b[1;32m 702\u001b[0m \u001b[38;5;66;03m# Send the request\u001b[39;00m\n\u001b[0;32m--> 703\u001b[0m r \u001b[38;5;241m=\u001b[39m \u001b[43madapter\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msend\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrequest\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 705\u001b[0m \u001b[38;5;66;03m# Total elapsed time of the request (approximately)\u001b[39;00m\n\u001b[1;32m 706\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m preferred_clock() \u001b[38;5;241m-\u001b[39m start\n",
60
+ "File \u001b[0;32m~/anaconda3/envs/scrapper/lib/python3.10/site-packages/requests/adapters.py:519\u001b[0m, in \u001b[0;36mHTTPAdapter.send\u001b[0;34m(self, request, stream, timeout, verify, cert, proxies)\u001b[0m\n\u001b[1;32m 515\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(e\u001b[38;5;241m.\u001b[39mreason, _SSLError):\n\u001b[1;32m 516\u001b[0m \u001b[38;5;66;03m# This branch is for urllib3 v1.22 and later.\u001b[39;00m\n\u001b[1;32m 517\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m SSLError(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[0;32m--> 519\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n\u001b[1;32m 521\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m ClosedPoolError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 522\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mConnectionError\u001b[39;00m(e, request\u001b[38;5;241m=\u001b[39mrequest)\n",
61
+ "\u001b[0;31mConnectionError\u001b[0m: HTTPConnectionPool(host='localhost', port=8000): Max retries exceeded with url: /product (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x704b7591fbb0>: Failed to establish a new connection: [Errno 111] Connection refused'))"
62
+ ]
63
+ }
64
+ ],
65
+ "source": [
66
+ "import requests\n",
67
+ "import json\n",
68
+ "\n",
69
+ "import requests\n",
70
+ "import json\n",
71
+ "\n",
72
+ "url = \"http://localhost:8000/product\"\n",
73
+ "payload = {\n",
74
+ " \"product\": \"carro\"\n",
75
+ "}\n",
76
+ "headers = {'Content-Type': 'application/json'}\n",
77
+ "\n",
78
+ "response = requests.post(url, data=json.dumps(payload), headers=headers)\n",
79
+ "\n",
80
+ "print(response.status_code)\n",
81
+ "print(response.text)\n"
82
+ ]
83
+ },
84
+ {
85
+ "cell_type": "code",
86
+ "execution_count": 36,
87
+ "metadata": {},
88
+ "outputs": [
89
+ {
90
+ "data": {
91
+ "text/plain": [
92
+ "[{'product': 'Intercomunicador Para Moto Bt12 Auriculares Casco Bluetooh',\n",
93
+ " 'price': 65900,\n",
94
+ " 'link': 'https://www.mercadolibre.com.co/intercomunicador-para-moto-bt12-auriculares-casco-bluetooh/p/MCO23892470#searchVariation=MCO23892470&position=2&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
95
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
96
+ " 'Kilometrage': ' +5mil vendidos',\n",
97
+ " 'Publication Date': '',\n",
98
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
99
+ " 'Pub Number': '1347811351',\n",
100
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
101
+ " {'product': 'Intercomunicador Bluetooth T-com Vb 800mts Radio Fm Moto',\n",
102
+ " 'price': 275900,\n",
103
+ " 'link': 'https://www.mercadolibre.com.co/intercomunicador-bluetooth-t-com-vb-800mts-radio-fm-moto/p/MCO26661439#searchVariation=MCO26661439&position=3&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
104
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
105
+ " 'Kilometrage': ' +1000 vendidos',\n",
106
+ " 'Publication Date': '',\n",
107
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
108
+ " 'Pub Number': '1333100671',\n",
109
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
110
+ " {'product': 'Hidrolavadora Inalambrica Portátil Recargable 48v Carro Moto',\n",
111
+ " 'price': 224900,\n",
112
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1084135327-hidrolavadora-inalambrica-portatil-recargable-48v-carro-moto-_JM#position=8&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
113
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
114
+ " 'Kilometrage': ' +1000 vendidos',\n",
115
+ " 'Publication Date': '',\n",
116
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
117
+ " 'Pub Number': '1084135327',\n",
118
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
119
+ " {'product': 'Llanta trasero para moto Pirelli Diablo Rosso III sin cámara de 140/70R17 H 66 x 1 unidad',\n",
120
+ " 'price': 528471,\n",
121
+ " 'link': 'https://www.mercadolibre.com.co/llanta-trasero-para-moto-pirelli-diablo-rosso-iii-sin-camara-de-14070r17-h-66-x-1-unidad/p/MCO17410101#searchVariation=MCO17410101&position=4&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
122
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
123
+ " 'Kilometrage': ' +500 vendidos',\n",
124
+ " 'Publication Date': '',\n",
125
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
126
+ " 'Pub Number': '1271930659',\n",
127
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
128
+ " {'product': 'Hidrolavadora Inalambrica Portátil Recargable 48v 2 Baterías',\n",
129
+ " 'price': 249900,\n",
130
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1283536390-hidrolavadora-inalambrica-portatil-recargable-48v-2-baterias-_JM#position=11&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
131
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
132
+ " 'Kilometrage': ' +1000 vendidos',\n",
133
+ " 'Publication Date': '',\n",
134
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
135
+ " 'Pub Number': '1283536390',\n",
136
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
137
+ " {'product': 'Carpa Capa Adulto Impermeable Lluvia Eva Botones Color',\n",
138
+ " 'price': 13490,\n",
139
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-548445426-carpa-capa-adulto-impermeable-lluvia-eva-botones-color-_JM#position=12&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
140
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
141
+ " 'Kilometrage': ' +1000 vendidos',\n",
142
+ " 'Publication Date': '',\n",
143
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
144
+ " 'Pub Number': '548445426',\n",
145
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
146
+ " {'product': 'Funda Silicona Impermeable Protector Zapato Lluvia Antidesli',\n",
147
+ " 'price': 14900,\n",
148
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-578271575-funda-silicona-impermeable-protector-zapato-lluvia-antidesli-_JM#position=13&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
149
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
150
+ " 'Kilometrage': ' +5mil vendidos',\n",
151
+ " 'Publication Date': '',\n",
152
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
153
+ " 'Pub Number': '578271575',\n",
154
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
155
+ " {'product': 'Hidrolavadora Inalambrica Portátil Recargable 48v 2 Baterías',\n",
156
+ " 'price': 249900,\n",
157
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1267505191-hidrolavadora-inalambrica-portatil-recargable-48v-2-baterias-_JM#position=14&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
158
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
159
+ " 'Kilometrage': ' +1000 vendidos',\n",
160
+ " 'Publication Date': '',\n",
161
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
162
+ " 'Pub Number': '1267505191',\n",
163
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
164
+ " {'product': 'Moto Carro Electrica Niño Usb Sd Mp3 Recargable Luces X-168',\n",
165
+ " 'price': 424900,\n",
166
+ " 'link': 'https://click1.mercadolibre.com.co/mclics/clicks/external/MCO/count?a=aD03o0BPQZFQBxmAkkRhW6OMcxslqeWsngDTObXOxM%2B%2FGgJtgPIAk7bzCDKbfbmni4y6HRLeORHZ1iQFk%2F9T2gbr7xetvPgJXXv3YLkZKMNqelwM7%2FcpRCMVKpABHWjqKCdAhLVAj4qjrQjSo2zm23t3L8SITqTHaQmaY7wYYDeh1JifSxxilWwxvZoKdgRScuSfiVPF2I%2F%2BozIhoGlGR2l0xPaQsXdVy2PJL5l6i%2BeewVEElC6CiFDrGcqosEQd%2B%2FmXNy%2Fs3dwS4iziULncWKo6bvSmEUfQShgmiidLDKI2AM%2B6PfJmuorBo1pDLyxEd1kxqLAekpfoRWadhTXnl%2B7Upzovgkm2SNM7K%2BKrS28rzN%2FBNcwp2a8xEO%2FItzmEGARi2A9Rxmz4hIkg%2BP5P6PWHPUl8qFRMl3OIAya7iMSyx5%2FPch9RCc8G4mksQGnXt3kg2q5lWGH2s4O%2BJrx14Y%2Fx2u8tkLqEc%2BJ%2FK60fItT95PG1iucARF5dKLyVy%2FIuucNLC8B%2F8mTDkrf845MW0EzCTSln0rq%2FcNq1hVEbtDaGXLseLlwg4nk6172jj247eq%2BttpsRJhE18evjat0AGUfCo9%2BmIDs8ZOMnYPfFmonzPwKtRObV9mU4kkT1c8gCFZ0sVjW%2F7SYoKWiNUb3u1SzHRRVjlBIrzxX%2Bie6%2B5FP7DKBdQAa79Mxur2Goqf0aH9Z7yB2E7WaLLt9WTlTE%2BFt3Rhkp&e=mclics%2Fpseudo-search-pads-buybox%2B7708%2Cmclics%2Fbuybox-layout%2B25349%2Cmclics%2Fdifferential-cvr-factor%2B29495%2Cmclics%2Fsearch-list-ad-algorithm%2B16026&rb=x',\n",
167
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
168
+ " 'Kilometrage': ' +100 vendidos',\n",
169
+ " 'Publication Date': '',\n",
170
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
171
+ " 'Pub Number': '596224201',\n",
172
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
173
+ " {'product': 'Impermeable Siliconado Para Motociclista',\n",
174
+ " 'price': 61300,\n",
175
+ " 'link': 'https://click1.mercadolibre.com.co/mclics/clicks/external/MCO/count?a=XSykzmtjmwMCXwsVBg4n1z4Uiy%2BDhWq79i%2B7erMqSahvO875of4mAuk6I5aApVfYmtl6pJ4AUSdDDBZEHeM4WfvV6UaeHTLhzt4jKE5R7egUE0sPe0do82Q4ymOinQqSmkVHDZfMPnJVE1eEFa%2FjHKlMql5J0OzqaBDGzY1Ur9J92%2FiIKm3b1cFloBCksR8CsX4n8T%2FzUt8lo8DXQ3xAzhOn4Pn4Uro4gwqiwi8kYkyKYDQ45C03%2FaOf%2B2PQLwEEFnf1Lwi09m44c0XexFSehNgF9XEGEn1EKwMxiKCltYW1T8UTO9l9kTWNEEdoMBLYFZ2iLcjJKbwkUksPincbRC99pYd%2FfzYEzGZU1NS51zc4pJMvCkXuIU8twrZwkB9qdLt0s%2FBhjdgInDavKn4Dd7qDIKmd3p0zNhDybADDJTZbM%2BrbHAjITPouf1pR%2FvtfumzqCyKCosfGA9lTnDjkbpsYXZbRTDKmXzc%2Fqq4zziT5nsS8PXOYmEwk5nia5cK1RpPdPuz9GvD%2Biqh1%2FHxvzzWExnS5U2qchvBPqF05rRmA0bs4ZYWdIgV3LeZfY4llQ5crkTkEFb72DaB%2Bn4PcT6eRjj%2F5YARKV3vCa4nPGDsRcHLnOQJ%2FnJkHvLbQ0p5y09phVEUuQPrMSwyFljrR6wPfskFlkgNEgLMV9FtTvSJlDe378JpC7iVIdAos15r9oi3OY5w%3D&e=mclics%2Fpseudo-search-pads-buybox%2B7708%2Cmclics%2Fbuybox-layout%2B25349%2Cmclics%2Fdifferential-cvr-factor%2B29495%2Cmclics%2Fsearch-list-ad-algorithm%2B16026&rb=x',\n",
176
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
177
+ " 'Kilometrage': ' +5mil vendidos',\n",
178
+ " 'Publication Date': '',\n",
179
+ " 'Location': '',\n",
180
+ " 'Pub Number': '624337760',\n",
181
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
182
+ " {'product': 'Caballete Moto, Burro, Gato, Stand, Soporte Moto',\n",
183
+ " 'price': 118999,\n",
184
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1198407002-caballete-moto-burro-gato-stand-soporte-moto-_JM#position=15&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
185
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
186
+ " 'Kilometrage': ' +1000 vendidos',\n",
187
+ " 'Publication Date': '',\n",
188
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
189
+ " 'Pub Number': '1198407002',\n",
190
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
191
+ " {'product': 'Botas Lluvia Impermeables Zapatos Protectores Blz01',\n",
192
+ " 'price': 26900,\n",
193
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-876810603-botas-lluvia-impermeables-zapatos-protectores-blz01-_JM#position=16&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
194
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
195
+ " 'Kilometrage': ' +1000 vendidos',\n",
196
+ " 'Publication Date': '',\n",
197
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
198
+ " 'Pub Number': '876810603',\n",
199
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
200
+ " {'product': 'Impermeable Siliconado Para Motociclista',\n",
201
+ " 'price': 61300,\n",
202
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-624337760-impermeable-siliconado-para-motociclista-_JM#position=17&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
203
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
204
+ " 'Kilometrage': ' +5mil vendidos',\n",
205
+ " 'Publication Date': '',\n",
206
+ " 'Location': '',\n",
207
+ " 'Pub Number': '624337760',\n",
208
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
209
+ " {'product': 'Carcasa Con Carga Inalámbrica Magsafe Transparente Para Apple iPhone',\n",
210
+ " 'price': 19495,\n",
211
+ " 'link': 'https://www.mercadolibre.com.co/carcasa-con-carga-inalambrica-magsafe-transparente-para-apple-iphone/p/MCO24541445#searchVariation=MCO24541445&position=5&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
212
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
213
+ " 'Kilometrage': ' +100 vendidos',\n",
214
+ " 'Publication Date': '',\n",
215
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
216
+ " 'Pub Number': '1960481730',\n",
217
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
218
+ " {'product': 'Guantes Moto Termicos Con Proteccion En Nudillos Y Tactiles ',\n",
219
+ " 'price': 54000,\n",
220
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-562384439-guantes-moto-termicos-con-proteccion-en-nudillos-y-tactiles-_JM#position=18&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
221
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
222
+ " 'Kilometrage': ' +1000 vendidos',\n",
223
+ " 'Publication Date': '',\n",
224
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
225
+ " 'Pub Number': '562384439',\n",
226
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
227
+ " {'product': 'Candado Cadena Gw Seguridad Bicicleta Llave Guaya',\n",
228
+ " 'price': 30990,\n",
229
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-836646390-candado-cadena-gw-seguridad-bicicleta-llave-guaya-_JM#position=21&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
230
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
231
+ " 'Kilometrage': ' +1000 vendidos',\n",
232
+ " 'Publication Date': '',\n",
233
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
234
+ " 'Pub Number': '836646390',\n",
235
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
236
+ " {'product': 'Llanta delantero para moto Pirelli Enduro Street MT 60 con cámara de 90/90-19 P 52 x 1 unidad',\n",
237
+ " 'price': 265990,\n",
238
+ " 'link': 'https://www.mercadolibre.com.co/llanta-delantero-para-moto-pirelli-enduro-street-mt-60-con-camara-de-9090-19-p-52-x-1-unidad/p/MCO15900156#searchVariation=MCO15900156&position=6&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
239
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
240
+ " 'Kilometrage': ' +100 vendidos',\n",
241
+ " 'Publication Date': '',\n",
242
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
243
+ " 'Pub Number': '861863191',\n",
244
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
245
+ " {'product': 'Maletero Spartan 45lt Espaldar Tipo Shad Givi No Aluminio',\n",
246
+ " 'price': 506500,\n",
247
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1198424553-maletero-spartan-45lt-espaldar-tipo-shad-givi-no-aluminio-_JM#position=22&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
248
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
249
+ " 'Kilometrage': ' +100 vendidos',\n",
250
+ " 'Publication Date': '',\n",
251
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
252
+ " 'Pub Number': '1198424553',\n",
253
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
254
+ " {'product': 'Moto Eléctrica Montable Para Niños N Max 1-6 Años',\n",
255
+ " 'price': 690000,\n",
256
+ " 'link': 'https://click1.mercadolibre.com.co/mclics/clicks/external/MCO/count?a=iTODBtAc4mIaKg2h1MVKqXrOvNnuJ5EujRJJ51C6VYcf40YGqPGT%2F65qXA83%2FGsmRDZnMLbOLfHdGG2xZfxUR0OaldaMrAoiZ5HPPU29DQTRSbJzp7jiUYmzlEMryT6ACw6W2ZrVUGaQRH9l%2FKXt6g8iooYkRSorfjJC7AKPuWRQ936O6tRJ9vN8HAyZJwpYcm8LzEUL4VevThYewzNjSEGAY4A%2FwXMKbiRmzlhtKEf9bcDqnk2XPV%2BlYz%2F%2FHlMLqtHlYg%2B%2FZL8S9TB%2FHyfPgaym5ZDAdU7ZLdcipens5gH919xEeM9xtrD0ch3UIzEZ06L4iW%2FC%2FH1TDWd3ATnhCntujMvxk9%2Fe5Vna1zfKz4CzWFLiqHfp4fU3gTv7eriYOtZ0qshxsiFN0qW9JtlkrsQLZqwmhOfW1znxjdmnGEJzB05xN5F%2FVBWmBIfkJoQHTD8s%2F6IJZOZL63jw%2FUMRLahPSbdO7ZYK%2BymyFmcgB5v6O5BTn2e%2BCpZRjmyS2nk4owWB37aGWrwD6HQgKuS08WNuYjeYn65wc3NPgSOr8I%2FeGx77BcZECjc0Bk2fQ3JTBpb5dfH10sS1O6q%2BnVW%2BfuoeUvxsVMirYz6sJ%2BBIdi4XI6Mjqo0bzftlADu2FrkzFr5oIpc0jIyY1kMMAZUMGUWcGu2E6bAEke0me4lfw7Kpvk%2F28cROJ2MoiXafOHZZLpXQ%2FTclV7TueqvU&e=mclics%2Fpseudo-search-pads-buybox%2B7708%2Cmclics%2Fbuybox-layout%2B25349%2Cmclics%2Fdifferential-cvr-factor%2B29495%2Cmclics%2Fsearch-list-ad-algorithm%2B16026&rb=x',\n",
257
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
258
+ " 'Kilometrage': ' +5 vendidos',\n",
259
+ " 'Publication Date': '',\n",
260
+ " 'Location': '',\n",
261
+ " 'Pub Number': '973976876',\n",
262
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
263
+ " {'product': 'Iniciador De Batería Carro Portatil Reiniciador Auto Moto',\n",
264
+ " 'price': 180000,\n",
265
+ " 'link': 'https://click1.mercadolibre.com.co/mclics/clicks/external/MCO/count?a=7%2F%2Fk9dvcnXrzDcT6vNZZGIzusNa36A%2FHGpz%2FRe7HXq3PCf3Nrv%2BVmMwdEF9EEKLDzfQMpWjJaYwEwnDRDmAGfPO%2BYCfR7j4kTl%2Bzu%2BR15wBZnGvzzfgx%2F%2FaGcuje0Qikb1A16goRd%2FJMxdXJSAMx8fVtqVQrCRCQdex%2BdkT%2BREnShUPO6KfKBfVEvhaUw%2FQ6HemtXRHcrLLHX55Hob%2B6tF5WaqOla0Cdsn7etC67Ag0FAHbFgoQEevLpEd2EDlTJHtFNaDDncj9x3XpmPR1MvJ%2F3NIsTb3xVjkF5E4AcovKz0TazPTLlv3kOx2wR4VR%2FmYSaMjR6K13IVwOVwh3Tfk6qhmYY5fiRM6gVvx24%2FtxtphNvGmVpV9EaFD%2B0GRksvP3Bssj1G5xos3SVqWY9PlxFA%2Fu4mfWwuH%2BHDdh0HB8Ympl1xcMaLrPd53HQ3lSjpZ3F1mXtQEHDQvU7VoZjjWvrJj5JdUzC0sFBZWc0atctL2ADY3pqrruxsZv8APk0oyJlEjNIL%2FgD3yvYVXEtNxx3NNftOqFOyxJyMnH8q2JWXRZonTiVDOSBF%2B5lScN3bJxBBc0QS2ydhoN3tvC9%2BUsLXdM36XIjifzChNA7WVcDkosLdid0MtlcSQelXOeGSO9LL5xwZcIN0AwZEhIcjImZ1mA%2FnHGNOfRYshuTTpNLWlHU4MKGaWd9USFfiC1ZPIV3ufEf12W8shOZn3hHLABQOg6iUYA%3D&e=mclics%2Fpseudo-search-pads-buybox%2B7708%2Cmclics%2Fbuybox-layout%2B25349%2Cmclics%2Fdifferential-cvr-factor%2B29495%2Cmclics%2Fsearch-list-ad-algorithm%2B16026&rb=x',\n",
266
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
267
+ " 'Kilometrage': ' +25 vendidos',\n",
268
+ " 'Publication Date': '',\n",
269
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
270
+ " 'Pub Number': '2063331806',\n",
271
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
272
+ " {'product': 'Intercomunicador 6 Pilotos 1200 Mt Manos Libres V6 Pro 850ma Color Negro',\n",
273
+ " 'price': 189900,\n",
274
+ " 'link': 'https://www.mercadolibre.com.co/intercomunicador-6-pilotos-1200-mt-manos-libres-v6-pro-850ma-color-negro/p/MCO24598236#searchVariation=MCO24598236&position=7&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
275
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
276
+ " 'Kilometrage': ' +25 vendidos',\n",
277
+ " 'Publication Date': '',\n",
278
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
279
+ " 'Pub Number': '2156400806',\n",
280
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
281
+ " {'product': 'Guantes 100% Cuero Para Moto Con Protecciones Y Térmicos',\n",
282
+ " 'price': 70000,\n",
283
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-489623857-guantes-100-cuero-para-moto-con-protecciones-y-termicos-_JM#position=23&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
284
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
285
+ " 'Kilometrage': ' +1000 vendidos',\n",
286
+ " 'Publication Date': '',\n",
287
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
288
+ " 'Pub Number': '489623857',\n",
289
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
290
+ " {'product': 'Pijama Moto Semi-impermeable + Forro Para Maletín Reflectivo',\n",
291
+ " 'price': 49900,\n",
292
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-908325300-pijama-moto-semi-impermeable-forro-para-maletin-reflectivo-_JM#position=24&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
293
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
294
+ " 'Kilometrage': ' +1000 vendidos',\n",
295
+ " 'Publication Date': '',\n",
296
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
297
+ " 'Pub Number': '908325300',\n",
298
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
299
+ " {'product': 'Impermeable Siliconado Para Motociclista 4 Piezas',\n",
300
+ " 'price': 65000,\n",
301
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-632843532-impermeable-siliconado-para-motociclista-4-piezas-_JM#position=25&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
302
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
303
+ " 'Kilometrage': ' +1000 vendidos',\n",
304
+ " 'Publication Date': '',\n",
305
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
306
+ " 'Pub Number': '632843532',\n",
307
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
308
+ " {'product': 'Ski Mask Pasamontañas Balaclava 3 Huecos Colores ',\n",
309
+ " 'price': 24990,\n",
310
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-630969856-ski-mask-pasamontanas-balaclava-3-huecos-colores-_JM#position=26&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
311
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
312
+ " 'Kilometrage': ' +500 vendidos',\n",
313
+ " 'Publication Date': '',\n",
314
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
315
+ " 'Pub Number': '630969856',\n",
316
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
317
+ " {'product': 'Soporte De Metal Para Casco Moto Multifuncional Pared Tv59',\n",
318
+ " 'price': 15900,\n",
319
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1345717709-soporte-de-metal-para-casco-moto-multifuncional-pared-tv59-_JM#position=27&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
320
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
321
+ " 'Kilometrage': ' +100 vendidos',\n",
322
+ " 'Publication Date': '',\n",
323
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
324
+ " 'Pub Number': '1345717709',\n",
325
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
326
+ " {'product': 'Guantes City Táctiles Térmicos Con Reflectivo Moto Bici',\n",
327
+ " 'price': 49900,\n",
328
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-847052153-guantes-city-tactiles-termicos-con-reflectivo-moto-bici-_JM#position=28&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
329
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
330
+ " 'Kilometrage': ' +1000 vendidos',\n",
331
+ " 'Publication Date': '',\n",
332
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
333
+ " 'Pub Number': '847052153',\n",
334
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
335
+ " {'product': 'Llanta 130/70-13 Diablo Rosso Scooter Pirelli Tl-nmax -black',\n",
336
+ " 'price': 259990,\n",
337
+ " 'link': 'https://www.mercadolibre.com.co/llanta-13070-13-diablo-rosso-scooter-pirelli-tl-nmax-black/p/MCO26512152#searchVariation=MCO26512152&position=1&search_layout=stack&type=product&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
338
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
339
+ " 'Kilometrage': ' +50 vendidos',\n",
340
+ " 'Publication Date': '',\n",
341
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
342
+ " 'Pub Number': '1990395460',\n",
343
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
344
+ " {'product': 'Kit Rodilleras + Coderas De Proteccion Moto + Envio',\n",
345
+ " 'price': 95000,\n",
346
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-563154962-kit-rodilleras-coderas-de-proteccion-moto-envio-_JM#position=29&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
347
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
348
+ " 'Kilometrage': ' +500 vendidos',\n",
349
+ " 'Publication Date': '',\n",
350
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
351
+ " 'Pub Number': '563154962',\n",
352
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
353
+ " {'product': 'Capa De Lluvia Eva Impermeable Adulto Chaqueta Transparente',\n",
354
+ " 'price': 14900,\n",
355
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1439298590-capa-de-lluvia-eva-impermeable-adulto-chaqueta-transparente-_JM#position=30&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
356
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
357
+ " 'Kilometrage': ' +500 vendidos',\n",
358
+ " 'Publication Date': '',\n",
359
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
360
+ " 'Pub Number': '1439298590',\n",
361
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
362
+ " {'product': 'Base Soporte Para Casco Chaqueta De Moto Metal',\n",
363
+ " 'price': 20990,\n",
364
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-572822893-base-soporte-para-casco-chaqueta-de-moto-metal-_JM#position=31&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
365
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
366
+ " 'Kilometrage': ' +500 vendidos',\n",
367
+ " 'Publication Date': '',\n",
368
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
369
+ " 'Pub Number': '572822893',\n",
370
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
371
+ " {'product': 'Guantes Icon Pursuit En Cuero Moto Protección Unisex',\n",
372
+ " 'price': 99900,\n",
373
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-614556117-guantes-icon-pursuit-en-cuero-moto-proteccion-unisex-_JM#position=32&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
374
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
375
+ " 'Kilometrage': ' +100 vendidos',\n",
376
+ " 'Publication Date': '',\n",
377
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
378
+ " 'Pub Number': '614556117',\n",
379
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
380
+ " {'product': 'Par Bombillos Luz Led Moto O Carro H4 Alta/baja/exploradora',\n",
381
+ " 'price': 150000,\n",
382
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-866542962-par-bombillos-luz-led-moto-o-carro-h4-altabajaexploradora-_JM#position=33&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
383
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
384
+ " 'Kilometrage': ' +500 vendidos',\n",
385
+ " 'Publication Date': '',\n",
386
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
387
+ " 'Pub Number': '866542962',\n",
388
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
389
+ " {'product': 'Espejos Cafe Racer Semi Ovalados',\n",
390
+ " 'price': 50000,\n",
391
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-552862329-espejos-cafe-racer-semi-ovalados-_JM#position=34&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
392
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
393
+ " 'Kilometrage': ' +1000 vendidos',\n",
394
+ " 'Publication Date': '',\n",
395
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
396
+ " 'Pub Number': '552862329',\n",
397
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
398
+ " {'product': 'Maleteros Tomcat 50lts Litros Tipo Shad Givi Envio Gratis',\n",
399
+ " 'price': 378500,\n",
400
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-556641635-maleteros-tomcat-50lts-litros-tipo-shad-givi-envio-gratis-_JM#position=35&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
401
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
402
+ " 'Kilometrage': ' +100 vendidos',\n",
403
+ " 'Publication Date': '',\n",
404
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
405
+ " 'Pub Number': '556641635',\n",
406
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
407
+ " {'product': 'Impermeable Moto 4 Piezas Cal18 Original Sdc 2 Obsequios.',\n",
408
+ " 'price': 69900,\n",
409
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-452039633-impermeable-moto-4-piezas-cal18-original-sdc-2-obsequios-_JM#position=36&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
410
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
411
+ " 'Kilometrage': ' +5mil vendidos',\n",
412
+ " 'Publication Date': '',\n",
413
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
414
+ " 'Pub Number': '452039633',\n",
415
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
416
+ " {'product': 'Carpa Capa Adulto Impermeable Lluvia Eva Botones Color',\n",
417
+ " 'price': 13990,\n",
418
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-552747451-carpa-capa-adulto-impermeable-lluvia-eva-botones-color-_JM#position=37&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
419
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
420
+ " 'Kilometrage': ' +500 vendidos',\n",
421
+ " 'Publication Date': '',\n",
422
+ " 'Location': '',\n",
423
+ " 'Pub Number': '552747451',\n",
424
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
425
+ " {'product': 'Pasamontañas Lycrado Balaclava Con Filtro Moto Deportes',\n",
426
+ " 'price': 19990,\n",
427
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-625594017-pasamontanas-lycrado-balaclava-con-filtro-moto-deportes-_JM#position=38&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
428
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
429
+ " 'Kilometrage': ' +100 vendidos',\n",
430
+ " 'Publication Date': '',\n",
431
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
432
+ " 'Pub Number': '625594017',\n",
433
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
434
+ " {'product': 'Navegador Moto Pantalla Táctil Android Apple Play Gps Ipx7',\n",
435
+ " 'price': 988700,\n",
436
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1655632694-navegador-moto-pantalla-tactil-android-apple-play-gps-ipx7-_JM#position=39&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
437
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
438
+ " 'Kilometrage': ' +25 vendidos',\n",
439
+ " 'Publication Date': '',\n",
440
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
441
+ " 'Pub Number': '1655632694',\n",
442
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
443
+ " {'product': 'Zapatones 100% Impermeables, Con Suela Marca Rhino ',\n",
444
+ " 'price': 38000,\n",
445
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-607034237-zapatones-100-impermeables-con-suela-marca-rhino-_JM#position=40&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
446
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
447
+ " 'Kilometrage': ' +1000 vendidos',\n",
448
+ " 'Publication Date': '',\n",
449
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
450
+ " 'Pub Number': '607034237',\n",
451
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
452
+ " {'product': 'Pijama Moto Premium+ Candado Guaya Con Argolla Seguridad',\n",
453
+ " 'price': 94900,\n",
454
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1202925569-pijama-moto-premium-candado-guaya-con-argolla-seguridad-_JM#position=41&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
455
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
456
+ " 'Kilometrage': ' +100 vendidos',\n",
457
+ " 'Publication Date': '',\n",
458
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
459
+ " 'Pub Number': '1202925569',\n",
460
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
461
+ " {'product': 'Carpa Capa Adulto Impermeable Lluvia Eva Botones Color',\n",
462
+ " 'price': 18090,\n",
463
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-455325548-carpa-capa-adulto-impermeable-lluvia-eva-botones-color-_JM#position=42&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
464
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
465
+ " 'Kilometrage': ' +1000 vendidos',\n",
466
+ " 'Publication Date': '',\n",
467
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
468
+ " 'Pub Number': '455325548',\n",
469
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
470
+ " {'product': 'Maletero Spartan 45 Litros (no Es Aluminio )',\n",
471
+ " 'price': 507500,\n",
472
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1213351757-maletero-spartan-45-litros-no-es-aluminio--_JM#position=43&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
473
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
474
+ " 'Kilometrage': ' +50 vendidos',\n",
475
+ " 'Publication Date': '',\n",
476
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
477
+ " 'Pub Number': '1213351757',\n",
478
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
479
+ " {'product': 'Capa Impermeable Moto Lluvia Hombre Carpa Mujer Adulto',\n",
480
+ " 'price': 19560,\n",
481
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-548375693-capa-impermeable-moto-lluvia-hombre-carpa-mujer-adulto-_JM#position=44&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
482
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
483
+ " 'Kilometrage': ' +500 vendidos',\n",
484
+ " 'Publication Date': '',\n",
485
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
486
+ " 'Pub Number': '548375693',\n",
487
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
488
+ " {'product': 'Par Exploradoras Led Rompe-niebla Moto Y Carro Alta Potencia',\n",
489
+ " 'price': 239900,\n",
490
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1307961173-par-exploradoras-led-rompe-niebla-moto-y-carro-alta-potencia-_JM#position=45&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
491
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
492
+ " 'Kilometrage': ' +100 vendidos',\n",
493
+ " 'Publication Date': '',\n",
494
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
495
+ " 'Pub Number': '1307961173',\n",
496
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
497
+ " {'product': 'Chaqueta 100% Reflectiva Y Termica Moto Hombre - Dama',\n",
498
+ " 'price': 99900,\n",
499
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-593252465-chaqueta-100-reflectiva-y-termica-moto-hombre-dama-_JM#position=46&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
500
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
501
+ " 'Kilometrage': ' +500 vendidos',\n",
502
+ " 'Publication Date': '',\n",
503
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
504
+ " 'Pub Number': '593252465',\n",
505
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
506
+ " {'product': 'Visor Para Casco Mt V-14 Revenge 2 Targo Pro Blade 2 Targo',\n",
507
+ " 'price': 99900,\n",
508
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1320440922-visor-para-casco-mt-v-14-revenge-2-targo-pro-blade-2-targo-_JM#position=47&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
509
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
510
+ " 'Kilometrage': ' +50 vendidos',\n",
511
+ " 'Publication Date': '',\n",
512
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
513
+ " 'Pub Number': '1320440922',\n",
514
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
515
+ " {'product': 'Alforjas Maletas Bolsos Laterales En Lona Viaje Nuevas Moto',\n",
516
+ " 'price': 175000,\n",
517
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1032578589-alforjas-maletas-bolsos-laterales-en-lona-viaje-nuevas-moto-_JM#position=48&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
518
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
519
+ " 'Kilometrage': ' +100 vendidos',\n",
520
+ " 'Publication Date': '',\n",
521
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
522
+ " 'Pub Number': '1032578589',\n",
523
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
524
+ " {'product': 'Hidrolavadora Inalambrica Portátil Recargable 48v Carro Moto',\n",
525
+ " 'price': 224900,\n",
526
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1084100492-hidrolavadora-inalambrica-portatil-recargable-48v-carro-moto-_JM#position=49&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
527
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
528
+ " 'Kilometrage': ' +100 vendidos',\n",
529
+ " 'Publication Date': '',\n",
530
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
531
+ " 'Pub Number': '1084100492',\n",
532
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
533
+ " {'product': 'Acelerador De Cuarta Rizoma +manillares Protaper',\n",
534
+ " 'price': 56000,\n",
535
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-569126901-acelerador-de-cuarta-rizoma-manillares-protaper-_JM#position=50&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
536
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
537
+ " 'Kilometrage': ' +500 vendidos',\n",
538
+ " 'Publication Date': '',\n",
539
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
540
+ " 'Pub Number': '569126901',\n",
541
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
542
+ " {'product': 'Guantes De Moto En Cuero Transpirables Protección Carbono ',\n",
543
+ " 'price': 169900,\n",
544
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1311518845-guantes-de-moto-en-cuero-transpirables-proteccion-carbono-_JM#position=51&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
545
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
546
+ " 'Kilometrage': ' +50 vendidos',\n",
547
+ " 'Publication Date': '',\n",
548
+ " 'Location': '',\n",
549
+ " 'Pub Number': '1311518845',\n",
550
+ " 'Created At': '2024-01-16 21:40:46'}},\n",
551
+ " {'product': 'Compresimetro Para Motores A Gasolina Ideal Autos Y Motos',\n",
552
+ " 'price': 90000,\n",
553
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1658588074-compresimetro-para-motores-a-gasolina-ideal-autos-y-motos-_JM#position=52&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
554
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
555
+ " 'Kilometrage': ' +50 vendidos',\n",
556
+ " 'Publication Date': '',\n",
557
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
558
+ " 'Pub Number': '1658588074',\n",
559
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
560
+ " {'product': 'Botas Impermeables Dakar Lluvia Invierno Para Motociclistas',\n",
561
+ " 'price': 59000,\n",
562
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-612832773-botas-impermeables-dakar-lluvia-invierno-para-motociclistas-_JM#position=53&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
563
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
564
+ " 'Kilometrage': ' +1000 vendidos',\n",
565
+ " 'Publication Date': '',\n",
566
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
567
+ " 'Pub Number': '612832773',\n",
568
+ " 'Created At': '2024-01-16 21:40:45'}},\n",
569
+ " {'product': 'Zapatón Impermeable Siliconado Tipo Botín Funda Para Zapatos',\n",
570
+ " 'price': 36000,\n",
571
+ " 'link': 'https://articulo.mercadolibre.com.co/MCO-1073571585-zapaton-impermeable-siliconado-tipo-botin-funda-para-zapatos-_JM#position=54&search_layout=stack&type=item&tracking_id=72d6401d-2868-4046-8ae9-cc0a091c474c',\n",
572
+ " \"product='moto'_info\": {'Year': 'Nuevo ',\n",
573
+ " 'Kilometrage': ' +100 vendidos',\n",
574
+ " 'Publication Date': '',\n",
575
+ " 'Location': '¡Es uno de los mejores del sitio!',\n",
576
+ " 'Pub Number': '1073571585',\n",
577
+ " 'Created At': '2024-01-16 21:40:46'}}]"
578
+ ]
579
+ },
580
+ "execution_count": 36,
581
+ "metadata": {},
582
+ "output_type": "execute_result"
583
+ }
584
+ ],
585
+ "source": [
586
+ "response.json()"
587
+ ]
588
+ },
589
+ {
590
+ "cell_type": "code",
591
+ "execution_count": 18,
592
+ "metadata": {},
593
+ "outputs": [],
594
+ "source": [
595
+ "data = \"\"\"\n",
596
+ "[{\"carro\": \"Renault Duster 1.6 Dynamique Gt 4x2\", \"price\": 47500000, \"link\": \"https://carro.mercadolibre.com.co/MCO-2151389978-renault-duster-16-dynamique-gt-_JM#position=1&search_layout=grid&type=item&tracking_id=d8d20af2-17b4-4628-a86c-b0634ab24b90\", \"carro_info\": {\"Year\": \"2015\", \"Kilometrage\": \"75300 \", \"Publication Date\": \"Publicado hace 1 d\\u00eda\", \"Location\": \"La Colina Campestre - Suba - Bogot\\u00e1 D.C.\", \"Pub Number\": \"2151389978\", \"Created At\": \"2024-01-14 15:19:57\"}}, ...]\n",
597
+ "\"\"\""
598
+ ]
599
+ },
600
+ {
601
+ "cell_type": "code",
602
+ "execution_count": 20,
603
+ "metadata": {},
604
+ "outputs": [
605
+ {
606
+ "data": {
607
+ "text/plain": [
608
+ "'\"\\\\n[{\\\\\"carro\\\\\": \\\\\"Renault Duster 1.6 Dynamique Gt 4x2\\\\\", \\\\\"price\\\\\": 47500000, \\\\\"link\\\\\": \\\\\"https://carro.mercadolibre.com.co/MCO-2151389978-renault-duster-16-dynamique-gt-_JM#position=1&search_layout=grid&type=item&tracking_id=d8d20af2-17b4-4628-a86c-b0634ab24b90\\\\\", \\\\\"carro_info\\\\\": {\\\\\"Year\\\\\": \\\\\"2015\\\\\", \\\\\"Kilometrage\\\\\": \\\\\"75300 \\\\\", \\\\\"Publication Date\\\\\": \\\\\"Publicado hace 1 d\\\\u00eda\\\\\", \\\\\"Location\\\\\": \\\\\"La Colina Campestre - Suba - Bogot\\\\u00e1 D.C.\\\\\", \\\\\"Pub Number\\\\\": \\\\\"2151389978\\\\\", \\\\\"Created At\\\\\": \\\\\"2024-01-14 15:19:57\\\\\"}}, ...]\\\\n\"'"
609
+ ]
610
+ },
611
+ "execution_count": 20,
612
+ "metadata": {},
613
+ "output_type": "execute_result"
614
+ }
615
+ ],
616
+ "source": [
617
+ "json.dumps(data)"
618
+ ]
619
+ },
620
+ {
621
+ "cell_type": "code",
622
+ "execution_count": 17,
623
+ "metadata": {},
624
+ "outputs": [
625
+ {
626
+ "data": {
627
+ "text/plain": [
628
+ "'Internal Server Error'"
629
+ ]
630
+ },
631
+ "execution_count": 17,
632
+ "metadata": {},
633
+ "output_type": "execute_result"
634
+ }
635
+ ],
636
+ "source": [
637
+ "response.text"
638
  ]
639
  },
640
  {