Advertisement
FRIKIdelTO

NO FUNCIONA BIEN

May 8th, 2024
782
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.68 KB | Source Code | 0 0
  1. # módulos de Python
  2. import os
  3. # módulos de terceros
  4. import requests
  5. from bs4 import BeautifulSoup
  6.  
  7. def datos_contratos():
  8.     base_url = 'https://contrataciondelestado.es'
  9.     sesion = requests.Session()
  10.     sesion.headers = {
  11.         '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.7',
  12.         'Accept-Encoding': 'gzip, deflate, br, zstd',
  13.         'Accept-Language': 'es-ES,es;q=0.9,en-US;q=0.8,en;q=0.7',
  14.         'Cache-Control': 'no-cache',
  15.         'Connection': 'keep-alive',
  16.         'Host': 'contrataciondelestado.es',
  17.         'Pragma': 'no-cache',
  18.         'Sec-Fetch-Dest': 'document',
  19.         'Sec-Fetch-Mode': 'navigate',
  20.         'Sec-Fetch-Site': 'none',
  21.         'Sec-Fetch-User': '?1',
  22.         'Upgrade-Insecure-Requests': '1',
  23.         'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
  24.         'sec-ch-ua': '"Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"',
  25.         'sec-ch-ua-mobile': '?0',
  26.         'sec-ch-ua-platform': '"Windows"'
  27.     }
  28.     url = base_url + '/wps/portal/!ut/p/b0/04_Sj9CPykssy0xPLMnMz0vMAfGjzOJNXP2dnd08jAwsgo1dDIx8XEJDzTyAXHcj_YJsR0UAIk-WfA!!'
  29.     # primera petición (GET)
  30.     print("Petición inicial (GET)")
  31.     req = sesion.get(url, timeout=20)
  32.     print("Content-Location:", req.headers.get("content-location"), end="\n\n")
  33.     guardar_y_cargar_html(req.text, "indice_0.html")
  34.     indice = 1
  35.     # vamos a por las siguientes páginas (POST)
  36.     for n in range(3):
  37.         soup = BeautifulSoup(req.text, "html.parser")
  38.         next_url = base_url + soup.find(id="viewns_Z7_BS88AB1A0GSM10A6E365201G25_:liciRecientes").attrs.get("action")
  39.         data = {
  40.             "viewns_Z7_BS88AB1A0GSM10A6E365201G25_:liciRecientes": "viewns_Z7_BS88AB1A0GSM10A6E365201G25_:liciRecientes",
  41.             "viewns_Z7_BS88AB1A0GSM10A6E365201G25_:liciRecientes:viewns_Z7_BS88AB1A0GSM10A6E365201G25_:liciRecientes:siguienteLink": "Siguiente+>>",
  42.             "javax.faces.ViewState": f"j_id{indice}:j_id{indice+1}"
  43.         }
  44.         print(f'Petición POST #{n+1}: {next_url}')
  45.         req = sesion.post(next_url, data=data, timeout=20)
  46.         print("Content-Location:", req.headers.get("content-location"), end="\n\n")
  47.         guardar_y_cargar_html(req.text, f'indice_{indice}.html')
  48.         indice+= 2
  49.  
  50. def guardar_y_cargar_html(html, nombre_archivo):
  51.     with open(nombre_archivo, "w", encoding="utf-8") as f:
  52.         f.write(html)
  53.     os.system(nombre_archivo)
  54.  
  55. # MAIN #######################################################
  56. if __name__ == '__main__':
  57.     datos_contratos()
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement