scraping python html beautifulsoup html-parsing

python - scraping - BeautifulSoup html perdido



install beautifulsoup python 3 (1)

Este sitio web depende en gran medida de Javascript. Mucha de la información que ve en su navegador no viene en la primera solicitud que realiza en el sitio web, pero se agrega mediante el siguiente Javascript que realiza solicitudes adicionales.

Intenta usar su API en su lugar o usa algo como Selenium que emula un navegador web.

Estoy tratando de obtener la URL del enlace para descargar datos históricos de Yahoo Finance para un activo durante un período de tiempo específico. 1 de enero de 1999 hasta la actualidad.

Entonces, por ejemplo, si voy aquí: https://finance.yahoo.com/quote/XLB/history?period1=915177600&period2=1498633200&interval=1d&filter=history&frequency=1d

Me gustaría adquirir esto (desde el enlace "Descargar datos" sobre la tabla de datos):

"https://query1.finance.yahoo.com/v7/finance/download/XLB?period1=915177600&period2=1498633200&interval=1d&events=history&crumb=iX6bJ6LfGxc"

Estoy usando BeautifulSoup y me encuentro con el problema de la etiqueta requerida que impide que href aparezca en el html. Al principio, pensé que BeautifulSoup simplemente no funcionaba correctamente después de no obtener resultados al tratar de usar find_all (''a'') y de iterar a través de children / descendants. Pero cuando hice un volcado de texto del html, el elemento html (junto con todo lo demás dentro del elemento principal) no estaba allí. ¿Alguien puede explicar lo que está pasando? Con lo que estoy trabajando actualmente se detalla a continuación.

from bs4 import BeautifulSoup import datetime as dTime import requests """ asset = "Materials" assetSignal = "XLB" today = dTime.datetime.now() startTime = str(int(dTime.datetime(1999, 1, 1, 0, 0, 0).timestamp())) endTime = str(int(dTime.datetime(today.year, today.month, today.day, 0, 0, 0).timestamp())) url = "https://finance.yahoo.com/quote/" + assetSignal + "/history?period1=" + startTime + "&period2=" + endTime + "&interval=1d&filter=history&frequency=1d" """ url = "https://finance.yahoo.com/quote/XLB/history?period1=915177600&period2=1498633200&interval=1d&filter=history&frequency=1d" page = requests.get(url) data = page.content #soup = BeautifulSoup(data, "html.parser") soup = BeautifulSoup(data, "lxml") #soup = BeautifulSoup(data, "xml") #soup = BeautifulSoup(data, "html5lib") #Link not found for link in soup.find_all("a"): print(link.get("href")) #Span is empty? span = soup.find(class_="Fl(end) Pos(r) T(-6px)") print(span) print(span.string) print(span.contents) for child in span.children: print(child) #Other span has children. Target span doesn''t div = soup.find(class_="C($finDarkGray) Mt(20px) Mb(15px)") print(div) for child in div.descendants: print(child) #Is the tag even there? with open("soup.txt", "w") as file: file.write(page.text)