2017-07-02 77 views
0

TL; DR我需要将BS4结果集列表(单列)变成NxN数组,但怎么做?我怎样才能得到连接标题,也是BS4结果集列表?下面的代码。谢谢!将BS4结果集转换为相对于头部的NxN数组(单独的BS4结果集)

所以我试图网络刮运动数据,但我遇到麻烦将结果集转换为NxN数组。另外,我试图包含以相同的方式刮掉的头文件。这里是我到目前为止的代码:

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 

这导致在短短的td标签元素串的垂直列表(或者说是目标)。

所以,我的问题是:我怎样才能得到这个单列列表到一个NxN数组/矩阵?另外,我怎样才能连接标题?

感谢您的阅读和/或帮助!

+0

请给真正的链接这是您目前解析 –

+0

http://www.footballdb.com/players/mike-evans-evansmi03/gamelogs 感谢您! –

回答

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

德米特里,这太好了。我感谢您的帮助! –

+0

@丹尼斯,如果我的回答适合您,您可以通过打上绿色复选标记来接受它吗? –

+0

完成!再次感谢您的时间,德米特里。 –