tutorial script scraping examples code python python-3.x web web-scraping beautifulsoup

script - web scraping python



Scraping Google Finance(BeautifulSoup) (2)

A la mayoría de los propietarios de sitios web no les gustan los raspadores porque toman los datos de los valores de la compañía, agotan un montón de tiempo de servidor y ancho de banda, y no dan nada a cambio. Las grandes empresas como Google pueden tener equipos enteros que emplean una gran cantidad de métodos para detectar y bloquear bots que intentan eliminar sus datos.

Hay varias formas de evitar esto:

  • Raspe de otro sitio web menos seguro.
  • Vea si Google u otra compañía tiene una API para uso público.
  • Use un raspador más avanzado como el Selenio (y probablemente aún esté bloqueado por Google).

Intento eliminar Google Finance y obtener la tabla "Stocks relacionados", que tiene el id "cc-table" y la clase "gf-table" basada en el inspector de página web en Chrome. (Enlace de muestra: https://www.google.com/finance?q=tsla )

Pero cuando ejecuto .find ("tabla") o .findAll ("tabla"), esta tabla no aparece. Puedo encontrar objetos que parecen JSON con los contenidos de la tabla en el contenido HTML en Python, pero no sé cómo obtenerlos. ¿Algunas ideas?


La página se representa con JavaScript. Hay varias formas de renderizarlo y rasparlo.

Puedo rasparlo con Selenio. Primero instala Selenio:

sudo pip3 install selenium

A continuación, obtenga un controlador https://sites.google.com/a/chromium.org/chromedriver/downloads

import bs4 as bs from selenium import webdriver browser = webdriver.Chrome() url = ("https://www.google.com/finance?q=tsla") browser.get(url) html_source = browser.page_source browser.quit() soup = bs.BeautifulSoup(html_source, "lxml") for el in soup.find_all("table", {"id": "cc-table"}): print(el.get_text())

Alternativamente PyQt5

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWebKit import * from PyQt5.QtWebKitWidgets import QWebPage from PyQt5.QtWidgets import QApplication import bs4 as bs import sys class Render(QWebPage): def __init__(self, url): self.app = QApplication(sys.argv) QWebPage.__init__(self) self.loadFinished.connect(self._loadFinished) self.mainFrame().load(QUrl(url)) self.app.exec_() def _loadFinished(self, result): self.frame = self.mainFrame() self.app.quit() url = "https://www.google.com/finance?q=tsla" r = Render(url) result = r.frame.toHtml() soup = bs.BeautifulSoup(result,''lxml'') for el in soup.find_all("table", {"id": "cc-table"}): print(el.get_text())

Alternativamente Dryscrape

import bs4 as bs import dryscrape url = "https://www.google.com/finance?q=tsla" session = dryscrape.Session() session.visit(url) dsire_get = session.body() soup = bs.BeautifulSoup(dsire_get,''lxml'') for el in soup.find_all("table", {"id": "cc-table"}): print(el.get_text())

todos los resultados:

Valuation▲▼Company name▲▼Price▲▼Change▲▼Chg %▲▼d | m | y▲▼Mkt Cap▲▼TSLATesla Inc328.40-1.52-0.46%53.69BDDAIFDaimler AG72.94-1.50-2.01%76.29BFFord Motor Company11.53-0.17-1.45%45.25BGMGeneral Motors Co...36.07-0.34-0.93%53.93BRNSDFRENAULT SA EUR3.8197.000.000.00%28.69BHMCHonda Motor Co Lt...27.52-0.18-0.65%49.47BAUDVFAUDI AG NPV840.400.000.00%36.14BTMToyota Motor Corp...109.31-0.53-0.48%177.79BBAMXFBAYER MOTOREN WER...94.57-2.41-2.48%56.93BNSANYNissan Motor Co L...20.400.000.00%42.85BMMTOFMITSUBISHI MOTOR ...6.86+0.091.26%10.22B