Reputation: 81
I'm trying to do some web scraping using python requests and beautiful soup. The idea is to compare departments prices of different web sites and analize offerts.
I successfully extracted what I needed from portalinmobiliario.com, but I've been unable to do the same on toctoc.com.
With the use of wireshark and ssl decryption I was able to get the headers and the cookie on the request, and I put the same data on the headers, but it did not work, and for my surprise, I was unable to detect the code's http2 petition on wireshark.
These are the headers of the prowser petition.
And this is the code that does it.
def get_data_toctoc(link,pageNo):
headers = {
'Method': 'GET',
'Authority': 'www.toctoc.com',
'Scheme':'https',
'Path': '/Arriendo/departamento/?dormitoriodesde=0&dormitoriohasta=5&banosdesde=0&banoshasta=5&superficeDesde=&superficiehasta=&moneda=2&preciodesde=&preciohasta=&ordenarpor=relevantes&cargarmas=1&tipoOperacion=0',
'Connection': 'keep-alive',
'Cache-control': 'max-age=0',
'Sec-ch-ua': '"\\Not;A\"Brand";v="99", "Google Chrome";v="85", "Chromium";v="85"',
'Sec-ch-ua-mobile': '?0',
'Sec-fetch-user': '?1',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Dest': 'document',
'Referer': 'https://www.toctoc.com/',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'es-ES,es;q=0.9',
'Cookie': '_gcl_au=1.1.437893505.1601645096; uim=rB8taF93KiemaD4OG6kPAg==; _ga=GA1.2.391754157.1601645098; _hjid=d5e5ea3f-16b8-4733-a656-ba55275f94a7; optimizelyEndUserId=oeu1601675924372r0.9275947786520664; optimizelySegments=%7B%222204271535%22%3A%22gc%22%2C%222215970531%22%3A%22false%22%2C%222232940041%22%3A%22referral%22%7D; optimizelyBuckets=%7B%7D; mp_29ae90688062e4e2e6d80b475cef8685_mixpanel=%7B%22distinct_id%22%3A%20%22174eb531a065d7-0c6d6def72363c-333376b-1fa400-174eb531a074ca%22%2C%22%24device_id%22%3A%20%22174eb531a065d7-0c6d6def72363c-333376b-1fa400-174eb531a074ca%22%2C%22%24search_engine%22%3A%20%22google%22%2C%22%24initial_referrer%22%3A%20%22https%3A%2F%2F5puloy42zxa-496ff2e9c6d22116-0-colab.googleusercontent.com%2F%22%2C%22%24initial_referring_domain%22%3A%20%225puloy42zxa-496ff2e9c6d22116-0-colab.googleusercontent.com%22%7D; __insp_slim=1601675926416; __insp_wid=2107690165; __insp_nv=true; __insp_targlpu=aHR0cHM6Ly93d3cudG9jdG9jLmNvbS9wcm9waWVkYWRlcy9hcnJpZW5kb3BhcnRpY3VsYXJzci9kZXBhcnRhbWVudG8vc2FudGlhZ28vYXZkYS1saWJlcnRhZG9yLWJlcm5hcmRvLW8taGlnZ2lucy0zNTEtNjA2YS1zYW50aWFnby8xNTYxODMzP289cmVzdWx0YWRvX2xpc3RhX3Nlb19pbWc%3D; __insp_targlpt=RGVwYXJ0YW1lbnRvIGVuIGFycmllbmRvIGVuIFNhbnRpYWdvLCBhdmRhIExpYmVydGFkb3IgQmVybmFyZG8gT2BoaWdnaW5zIDM1MSA2MDZBLCBTYW50aWFnbw%3D%3D; __insp_norec_sess=true; _gid=GA1.2.1572256016.1601908790; _gat=1'
}
r = requests.get(link.format(pageNo), headers=headers)#, proxies=proxies)
content = r.content
soup = BeautifulSoup(content, features="html.parser")
print(soup.prettify())
When I scan the call to this function I get this.
And the code gets some base html with no usefull info.
<!DOCTYPE html>
<html data-reactroot="">
<head>
<meta content="width=device-width, initial-scale=1, shrink-to-fit=no" name="viewport"/>
<meta charset="utf-8"/>
<meta content="!" name="fragment"/>
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible"/>
<meta content="index, follow" name="robots"/>
<meta content="ES" name="language"/>
<meta content="TOCTOC.com" name="author"/>
<meta content="Septiembre, 2013" name="creationdate"/>
<meta content="global" name="distribution"/>
<meta content="general" name="rating"/>
<meta content="#41aee8" name="theme-color"/>
<meta content="summary_large_image" name="twitter:card"/>
<meta content="&#64;Toctoccom" name="twitter:site"/>
<meta content="&#64;Toctoccom" name="twitter:creator"/>
<meta content="TOCTOC.com:propiedades, casas y deptos. Asesórate antes de comprar" name="twitter:title"/>
<meta content="TOCTOC.com el sitio obligatorio antes de comprar, vender o arrendar una propiedad. Asesórate antes de tomar una decisión y encuentra toda la oferta dentro de este sitio" name="twitter:description"/>
<meta content="https://d1cfu8v5n1wsm.cloudfront.net/toctoc/img/toctoc-twitter.jpg" name="twitter:image"/>
<meta content="TOCTOC.com sitio obligatorio antes de comprar, vender o arrendar una propiedad en Chile" property="og:title"/>
<meta content="Asesórate si buscas vender, comprar o arrendar una caso o departamento. En TOCTOC.com podrás revisar información de la propiedad, valorizar tu casa, conocer tu barrio y mucho más!" property="og:description"/>
<meta content="website" property="og:type"/>
<meta content="https://www.toctoc.com/" property="og:url"/>
<meta content="TOCTOC.com" property="og:site_name"/>
<meta content="https://d1cfu8v5n1wsm.cloudfront.net/toctoc/img/logo-toctoc-200x200.jpg" property="og:image"/>
<meta content="1751414638477283" property="fb:app_id"/>
<meta content="" name="description"/>
<meta content="Resultados Busqueda" name="friendly-title"/>
<meta content="¿Buscas un departamento en venta en Ñuñoa? Revisa nuestros departamentos nuevos y usados, de entre 2 y 3 dormitorios en el listado." name="description"/>
<meta content="Arriendos de Casa en Buin, preciosa casa en amplio terreno en condominio pleno centro de Buin y lindo entorno a pasos de varios servicios. Más detalles aquí!" name="description"/>
<meta content="Venta de Casas y propiedades en TOCTOC.com. Tenemos una gran variedad de alternativas de casas y propiedades. Informate para más detalles aquí!" name="description"/>
<meta content="Ventas de Departamento en la región Metropolitana, cuando lo que necesitas es cambiarte de domicilio, sin importar el motivo. TOCTOC.com te ayudamos con este proceso!" name="description"/>
<meta content="Venta de Casas en la Florida. Por Que vender una casa en La Florida es una de las mejores alternativas de vivienda. Más detalles entra aquí!" name="description"/>
<meta content="¿Buscas departamentos en arriendo en Quinta Normal? Revisa en TOCTOC.com el listado de propiedades más completo ¡Y actualizado diariamente!" name="description"/>
<meta content="Arriendos de Departamentos en Santiago, empieza una vida independiente y busca una gran variedad de arriendos de departamentos en Santiago. Detalles aquí!" name="description"/>
<meta content="¿Buscas casas en venta en Viña del Mar? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="Arriendos de Casas en Puente Alto, una comuna que podrás hacer vida de familia. En TOCTOC tenemos variedad de arriendos de casas en Puente Alto." name="description"/>
<meta content="Ventas de Departamentos en Providencia. En TOCTOC.Com tenemos varias alternativas de ventas de departamentos en Providencia. Más detalles haz clic aquí!" name="description"/>
<meta content="Casas en arriendos en La Florida. Por que arrendar una casa en La Florida es una de las mejores alternativas de vivienda. Más detalles entra aquí!" name="description"/>
<meta content="¿Buscas casas en venta en Ñuñoa? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="¿Buscas casas en arriendo en La Reina? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas." name="description"/>
<meta content="¿Buscas casas en venta en La Reina? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="Venta de Casas en Santiago, empieza una nueva vida y busca una gran variedad de ventas de casas en Santiago, amplias y buena conectividad. Detalles aquí!" name="description"/>
<meta content="¿Buscas casas en arriendo en Santiago? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="Ventas de Casa en Peñaflor, disfrute de la tranquilidad en un exclusivo sector en la comuna de Peñaflor, busca en TOCTOC.com venta de casas en peñaflor y disfruta de tu nuevo hogar!" name="description"/>
<meta content="Arriendos de casas en Maipú, una de las comunas más grandes de la región Metropolitana. Casas en arriendo con TOCTOC.Com. Informate para más detalles aquí!" name="description"/>
<meta content="Arriendos De Casa en Ñuñoa, navega en TOCTOC.com y descubre una de las casas en arriendo que tenemos disponibles en Ñuñoa. Más información al entrar aquí!" name="description"/>
<meta content="Arriendos de casas y propiedades en TOCTOC.com. Busca todas las alternativas de casas y propiedades. Informate con nosotros al hacer clic aquí!" name="description"/>
<meta content="¿Una casa con patio para tu mascota? ¿Vecinos buena onda? Encuentra las casas en arriendo disponibles en Chillán y cámbiate a la propiedad en donde siempre has querido formar tu futuro." name="description"/>
<meta content="¿Buscas casas en venta en Puente Alto? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="Ventas de Casa en Quinta Normal, una comuna con varias alternativas de ventas de casas. En TOCTOC.com te ayudamos con la mejor opción. Informate más aquí!" name="description"/>
<meta content="Arriendos de Departamento en Concepción una ciudad reconocidad para la vida familiar. Busca arriendos de departamento en Concepción en TOCTOC.com" name="description"/>
<meta content="Arriendos de departamentos y propiedades en TOCTOC.com. Busca todas las alternativas de departamentos y propiedades. Informate con nosotros al hacer clic aquí!" name="description"/>
<meta content="¿Buscas casas en venta en Las Condes? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="¿Buscas departamentos en arriendo en Las Condes ? Revisa en TOCTOC.com el listado de propiedades más completo ¡Y actualizado diariamente!" name="description"/>
<meta content="Arriendos de Departamentos en Providencia. En TOCTOC.com tenemos varias alternativas de arriendos de departamentos en Providencia. Haz clic aquí!" name="description"/>
<meta content="Revisa el listado y encuentra las casas en ventas que se encuentran disponibles en Chillán para que hagas tu sueño de la casa propia una realidad. " name="description"/>
<meta content="¿Buscas departamentos en venta en Ñuñoa? Aquí el listado más completo, actualizado diariamente. Grandes ofertas con la información que necesitas" name="description"/>
<meta content="¿Buscas casas en arriendo en Providencia? Revisa en TOCTOC.com el listado de propiedades más completo ¡Y actualizado diariamente!" name="description"/>
<meta content="¿Buscas casas en arriendo en Talagante? Aquí el listado completo, actualizado diariamente. Grandes ofertas con la información que necesitas." name="description"/>
<meta content="Venta de Casas y propiedades en Buin que tiene una de las mejores calidades de ambientes para vivir. Venta de Casas en Buin con TOCTOC.com!" name="description"/>
<meta content="Venta de departamentos en Santiago Centro. Propiedades actualizadas, departamentos nuevos y usados." name="description"/>
<meta content="Arriendos de Local Comercial en Providencia, una de las mejores comunas para arrendar un local comercial. Busca en TOCTOC.com la variedad de alternativas. Más detalles aquí!" name="description"/>
<meta content="Arriendos de Departamentos en Maipú, si un espacio para comenzar tu nueva etapa, en TOCTOC.com busca arriendos de Departamentos en Maipú. Detalles aquí!" name="description"/>
<meta content="Venta de Casas y propiedades en Maipú, con TOCTOC podrás encontrar todas las anternativas de arriendos de casas en Maipú. Informate más aquí!" name="description"/>
<meta content="Arriendos de Departamento en La Florida, para iniciar una nueva etapa de vida mas independiente, busca arriendos de departamentos en La Florida con TOCTOC.com" name="description"/>
<meta content="Ventas de Departamentos en Las Condes. Con alto estándar en diseño, calidad y terminaciones. Los Departamentos en las Condes incluyen una maravillosa vista." name="description"/>
<meta content="¿Buscas departamentos en venta en Vitacura? Revisa aquí el listado más completo ¡Y actualizado diariamente! Ingresa aquí y encuentra lo que andas buscando." name="description"/>
<meta content="¿Buscas casas en venta en Vita
So my questions are..
I know my questions might be hard ans specific, I'm sorry for that, but internet protocols is not my strong area (neither is wireshark) and I need some help or guidence to fully understand it. I will appreciate any help I can get on this.
Ps: I also tryed to get the data using Selenium with firefox plugin using this code (driver is on the same folder)
from bs4 import BeautifulSoup
from selenium.webdriver import Firefox
import os as os
url = "https://www.toctoc.com/Arriendo/departamento/?dormitoriodesde=0&dormitoriohasta=5&banosdesde=0&banoshasta=5&superficeDesde=&superficiehasta=&moneda=2&preciodesde=&preciohasta=&ordenarpor=relevantes&cargarmas=1&tipoOperacion=0"
with Firefox(os.path.join('D:',os.sep,'Users','JPablo','Desktop','Nueva carpeta')) as driver:
driver.get(url)
element = driver.find_element_by_xpath('//*')
element = element.get_attribute('innerHTML')
soup = BeautifulSoup(element, 'html.parser')
print(soup.prettify())
Sadly I get the same html that I get with requests.
Thank you in advance.
Upvotes: 1
Views: 317
Reputation: 45402
You can get the result data by scraping the script
tag with id react-engine-props
. It gives you json data you can parse to get the list.
The following code scrape the script tag, parse the JSON and put the data into a dataframe :
import requests
from bs4 import BeautifulSoup
import json
import pandas as pd
r = requests.get("https://www.toctoc.com/Arriendo/departamento/",
params = {
"dormitoriodesde": 0,
"dormitoriohasta": 5,
"banosdesde": 0,
"banoshasta": 5,
"superficeDesde": "",
"superficiehasta": "",
"moneda": 2,
"preciodesde": "",
"preciohasta": "",
"ordenarpor": "relevantes",
"cargarmas": 1,
"tipoOperacion": 0
})
soup = BeautifulSoup(r.text, "html.parser")
data = json.loads(soup.find("script", {"id": "react-engine-props"}).text)
df = pd.DataFrame(data["dataListado"]["resultados"]["propiedades"])
print(df)
Output :
atributos id longitud latitud banosDesde ... urlFicha idTipoPlan mostrarLogo mostrarCPP region
0 [107, 108] 1391764 -70.645422 -33.447061 1 ... https://www.toctoc.com/propiedades/arriendocor... 4 1 0
1 [107, 108, 109, 110] 1351825 -70.641709 -33.448190 1 ... https://www.toctoc.com/propiedades/arriendocor... 4 1 0
2 [41, 99, 102, 110, 111, 112] 1561833 -70.641732 -33.440421 1 ... https://www.toctoc.com/propiedades/arriendopar... 4 1 0
3 [107, 108, 109] 1388115 -70.643537 -33.444455 1 ... https://www.toctoc.com/propiedades/arriendocor... 4 1 0
4 [107, 108] 1386651 -70.643537 -33.444455 1 ... https://www.toctoc.com/propiedades/arriendocor... 4 1 0
5 [41, 97, 99, 102, 108, 110, 111, 112] 1547524 -70.644989 -33.439207 1 ... https://www.toctoc.com/propiedades/arriendopar... 4 1 0
6 [4, 5, 8, 10, 13, 24, 41, 42, 43, 45, 49, 99, ... 1550673 -70.643568 -33.444025 3 ... https://www.toctoc.com/propiedades/arriendopar... 4 1 0
7 [] 1579941 -70.647282 -33.447837 1 ... https://www.toctoc.com/propiedades/arriendopar... 4 1 0
8 [23, 41, 97, 99, 10
.....
Upvotes: 1