2017-10-05 3 views
0

Ich versuche, eine Tabelle von ESPN zu kratzen und senden Sie die Daten zu einem Pandas Datenframe, um es in Excel zu exportieren. Ich habe den größten Teil des Scrapings abgeschlossen, bin aber dabei, wie ich jedes td-Tag an eine eindeutige Datenzelle in meiner for-Schleife senden kann. (Code ist unten) Irgendwelche Gedanken? Vielen Dank!Erstellen Pandas Dataframe von WebScrapping Ergebnisse

import requests 
import urllib.request 
from bs4 import BeautifulSoup 
import re 
import os 
import csv 
import pandas as pd 

def make_soup(url): 
    thepage = urllib.request.urlopen(url) 
    soupdata = BeautifulSoup(thepage, "html.parser") 
    return soupdata 

soup = make_soup("http://www.espn.com/nba/statistics/player/_/stat/scoring- 
per-game/sort/avgPoints/qualified/false") 

regex = re.compile("^[e-o]") 

for record in soup.findAll('tr', {"class":regex}): 
    for data in record.findAll('td'): 
     print(data) 
+1

Lesen: https://Stackoverflow.com/a/1732454/4047084 –

+0

Was? Die Regex ist da, um die mehreren Header zu entfernen, die alle n Zeilen erscheinen. – johankent30

+0

Wo ist die Entfernung? Sie wenden Regex auf BeautifulSoups Parsing-Funktion 'findAll()' an. Daher der obige Link. – Parfait

Antwort

0

Ich war eigentlich vor kurzem kratzen Sport Websites arbeiten an einem täglichen Fantasy-Sport-Algorithmus für eine Klasse. Dies ist das Skript, das ich aufgeschrieben habe. Vielleicht kann dieser Ansatz für Sie arbeiten. Erstellen Sie ein Wörterbuch. Konvertieren Sie es in einen Datenrahmen.

url = http://www.footballdb.com/stats/stats.html?lg=NFL&yr={0}&type=reg&mode={1}&limit=all 

    result = requests.get(url) 
    c = result.content 

    # Set as Beautiful Soup Object 
    soup = BeautifulSoup(c) 

    # Go to the section of interest 
    tables = soup.find("table",{'class':'statistics'}) 

    data = {} 
    headers = {} 
    for i, header in enumerate(tables.findAll('th')): 
     data[i] = {} 
     headers[i] = str(header.get_text()) 

    table = tables.find('tbody') 
    for r, row in enumerate(table.select('tr')): 
     for i, cell in enumerate(row.select('td')): 
      try: 
       data[i][r] = str(cell.get_text()) 
      except: 
       stat = strip_non_ascii(cell.get_text()) 
       data[i][r] = stat 

    for i, name in enumerate(tables.select('tbody .left .hidden-xs a')): 
     data[0][i] = str(name.get_text()) 

    df = pd.DataFrame(data=data) 
+0

Ok toll, danke! – johankent30