2017-08-15 11 views
0

Quelqu'un pourrait-il m'expliquer pourquoi je reçois un retour vide lors de l'exécution de ce code? J'essaie simplement d'imprimer le contenu d'un tag html en utilisant une belle soupe. Le code est ci-dessous.Web Scraping - retour vide

Merci

import urllib3 
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) 
from bs4 import BeautifulSoup 
http = urllib3.PoolManager() 

def stats(): 
url = 'https://www.flashscore.com.au/football/usa/mls/results/' 
response = http.request('GET', url) 
soup = BeautifulSoup(response.data,'lxml') 
right_table=soup.find('div',{'class':'fs-table tournament-page'}) 
print(right_table.text) 

stats()  
+0

Le problème est que la page Web est rendu côté client, de sorte que le div initialement n'a pas de contenu. Différentes technologies sont requises: https://stackoverflow.com/questions/2148493/scrape-html-generated-by-javascript-with-python –

+0

La page utilise JavaScript et un WebSocket pour charger et récupérer les données. Voir ma réponse à https://stackoverflow.com/questions/45259232/scraping-google-finance-beautifulsoup/ pour savoir comment le rendre. –

+0

@ Error-SyntacticalRemorse Terminé, merci pour l'astuce –

Répondre

0

Vous pouvez chercher et traiter plusieurs URL à l'aide PyQT5 que vous demandez dans votre commentaire comme celui-ci:

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): 
     super(Render, self).__init__() 
     self.mainFrame().loadFinished.connect(self.handleLoadFinished) 

    def start(self, urls): 
     self._urls = iter(urls) 
     self.fetchNext() 

    def fetchNext(self): 
     try: 
      url = next(self._urls) 
     except StopIteration: 
      return False 
     else: 
      self.mainFrame().load(QUrl(url)) 
     return True 

    def processCurrentPage(self): 
     print (self.mainFrame().url().toString()) 
     result = self.mainFrame().toHtml() 
     soup = bs.BeautifulSoup(result, 'lxml') 
     right_table = soup.find('div', {'class': 'fs-table tournament-page'}) 
     print(right_table.text) 

    def handleLoadFinished(self): 
     self.processCurrentPage() 
     if not self.fetchNext(): 
      app.quit() 


if __name__ == '__main__': 
    urls = ["https://www.flashscore.com.au/football/usa/mls/results/", "https://www.flashscore.com.au/football/usa/mls/fixtures/"] 
    app = QApplication(sys.argv) 
    renderer = Render() 
    renderer.start(urls) 
    sys.exit(app.exec_())