Zarysowałem dane z podanej poniżej strony. Mam problemy z podjęciem wyjścia tych danych na Excelu. Również przechowowałem tabelę, którą zeskrobałem jako słownik. Ale para kluczy i wartości nie są synchronizowane. Ktoś mógłby pomóc.

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd



url = requests.get("http://stats.espncricinfo.com/ci/content/records/307847.html" )
soup = bs(url.text, 'lxml')
soup_1 = soup.find(class_ = "recordsTable")
soup_pages = soup_1.find_all('a', href= True)

state_links =[]

for link in soup_pages:
state_links.append(link['href'])


for i in state_links:
parse_link = "http://stats.espncricinfo.com"+i
url_new = requests.get(parse_link)
soup_new = bs(url_new.text, 'lxml')
soup_table = soup_new.find(class_="engineTable")
results = {}
newdict = dict()

for col in soup_table.findAll('th'):
    colname = (col.text).lstrip().rstrip()

for row in soup_table.findAll("td"):
    rowname = row.text.lstrip().rstrip()

newdict[col.text] = row.text
print (newdict)
0
Shreya Agarwal 20 luty 2019, 09:05

2 odpowiedzi

Najlepsza odpowiedź

Masz 2 pętle, ale nie przechowywałem Colname i Rowname, aby dodać do Newdict. Oto moje rozwiązanie. Proszę pamiętać o wielkości przypadku Val_list> Rozmiar klucza_list

# create 2 lists to store key and value
key_list = []
val_list = []
newdict = dict()
for col in soup_table.findAll('th'):
    key_list.append((col.text).lstrip().rstrip())

for row in soup_table.findAll("td"):
    val_list.append(row.text.lstrip().rstrip())

index = 0
# loop key_list and add key pair to dict
for key in key_list:                    
    newdict[key] = val_list(index)
    index += 1
print(newdict)
2
Trung NT Nguyen 20 luty 2019, 07:31

ITeresting lista i przechowywasz w tej samej zmiennej, która zastąpi za każdym razem, gdy się czujesz. Wypróbuj poniższy kod, myślę, że będzie działać.

from bs4 import BeautifulSoup as bs
import requests
import pandas as pd

url =requests.get("http://stats.espncricinfo.com/ci/content/records/307847.html" )
soup = bs(url.text, 'lxml')
soup_1 = soup.find(class_ = "recordsTable")
soup_pages = soup_1.find_all('a', href= True)

state_links =[]
state_id =[]
for link in soup_pages:
    state_links.append(link['href'])
    state_id.append(link.getText())

Total_dict = dict()

for a,year in zip(state_links,state_id):
    parse_link = "http://stats.espncricinfo.com"+a
    url_new = requests.get(parse_link)
    soup_new = bs(url_new.text, 'lxml')
    soup_table = soup_new.find(class_="engineTable")
    newdictlist = list()
    col_name =list()
    row_name =list()
    for col in soup_table.findAll('th'):
        col_name.append((col.text).lstrip().rstrip())
    for row in soup_table.findAll("td"):
        row_name.append(row.text.lstrip().rstrip())
    no_of_matches = len(row_name)/len(col_name)
    row_count=0
    for h in range(int(no_of_matches)):
        newdict = dict()
        for i in col_name:
            newdict[i] = row_name[row_count]
            row_count=row_count+1
        newdictlist.append(newdict)
    print(newdictlist)
    Total_dict[year] = newdictlist
print(Total_dict)

Iuput: {'1877': [{'Team 1': "Australia", "Team 2": "Anglia", "Zwycięzca": "Australia", "margines": '45 biegnie "," ziemi ":" Melbourne "," Data meczu ":" Mar 15-19, 1877 "," ScoreCard ":" Test # 1 '}, {' 'Team 1': "Australia", "Team 2": "Anglia", "Zwycięzca": "Anglia", "margines": "4 bramki", "ziemia": "Melbourne", "Data meczu": '31-kwietnia 4, 1877', "ScoreCard": "Test # 2 '}], [' ' 1879 ': [{' Team 1 ': "Australia", "Team 2": "Anglia", "Zwycięzca": "Australia", "Marginia": '10 Furts', 'Ground': 'Melbourne', Match Match Data ":" 2-4 Jan 2-4, 1879 "," ScoreCard ":" Test # 3 '}], ............}

2
Manoj biroj 20 luty 2019, 07:00