2017-07-02 3 views
0

TL; DR Ich muss eine BS4-Resultset-Liste (einzelne Spalte) in ein NxN-Array umwandeln, aber wie? Und wie bekomme ich Kopfzeilen, die auch BS4 Ergebnisliste sind? Code unten. Vielen Dank!Konvertierung von BS4-Resultset in NxN-Array relativ zu den Headern (separates BS4-Resultset)

Also versuche ich Sport Daten zu kratzen, aber ich habe Probleme beim Konvertieren der Ergebnismenge in ein NxN-Array. Außerdem versuche ich, Header einzubeziehen, die auf die gleiche Weise abgekratzt wurden. Hier ist mein Code so weit:

import requests 
from bs4 import BeautifulSoup 
from __future__ import print_function 
import numpy as np 

url=input("Paste player link and specific year ") 
r= requests.get(url) 
html_content=r.text 
soup=BeautifulSoup(html_content,"lxml") 

body = soup.body 
table=body.table 
tbody=table.tbody 

headers = table.find_all("th") 
statistics = tbody.find_all("td") 

def string_stats(): 
    for stat in statistics: 
     print (stat.string) 

def string_headers(): 
    for head in headers: 
     print (head.string) 

string_stats_list = string_stats() 
string_stats_list 

Dies führt zu einer vertikalen Liste nur die td-Tag Elemente als Strings (oder das war das Ziel).

Meine Fragen sind also: Wie kann ich diese einzelne Spalte Liste in eine NxN-Array/Matrix? Wie kann ich außerdem die Header anhängen?

Vielen Dank für das Lesen und/oder die Hilfe!

+0

bitte echte Links geben, die Sie zur Zeit –

+0

Parsen sind http://www.footballdb.com/players/mike-evans-evansmi03/gamelogs Dank! –

Antwort

1
import pandas as pd 
import requests 
from bs4 import BeautifulSoup 

url='http://www.footballdb.com/players/mike-evans-evansmi03/gamelogs' 
r= requests.get(url) 
html_content=r.content 
soup=BeautifulSoup(html_content,"lxml") 

body = soup.body 
table=body.table 

headers = table.find_all("th") 

headers_list = [i.text for i in headers] 

string_stats_list = [] 
row = [] 
for i in table.select('tr')[1:]: 
    for j in i.select('td'): 
     row.append(j.text) 
    string_stats_list.append(row) 
    row = [] 

df = pd.DataFrame(data=string_stats_list, columns=headers_list) 
+0

Dmitriy, das ist großartig. Ich schätze Ihre Hilfe! –

+0

@Dennis, wenn meine Antwort Ihnen passt, können Sie es bitte annehmen, indem Sie grünes Häkchen setzen? –

+0

Fertig! Nochmals vielen Dank für deine Zeit, Dmitriy. –

Verwandte Themen