Python 如何遍历列表中的列表,然后在最后创建csv?

Python 如何遍历列表中的列表,然后在最后创建csv?,python,pandas,dataframe,web-scraping,beautifulsoup,Python,Pandas,Dataframe,Web Scraping,Beautifulsoup,我有一个代码,可以生成刮取的数据,并将其放在4个数据列表中,但我想将它们作为一个数据帧放在一起,并将最终结果输出为csv。 此外,guest列包含多个人,因此如何遍历该列表? 我不知道为什么我当前的代码不起作用,但它可能很简单。 谢谢 你有一些错误。这是您的代码的固定版本 import requests import pandas as pd from bs4 import BeautifulSoup import numpy as np df = pd.DataFrame(columns=(

我有一个代码,可以生成刮取的数据,并将其放在4个数据列表中,但我想将它们作为一个数据帧放在一起,并将最终结果输出为csv。 此外,guest列包含多个人,因此如何遍历该列表? 我不知道为什么我当前的代码不起作用,但它可能很简单。 谢谢


你有一些错误。这是您的代码的固定版本

import requests
import pandas as pd
from bs4 import BeautifulSoup
import numpy as np

df = pd.DataFrame(columns=(['NoInSeason', 'Guests', 'Winner', 'OriginalAirDate']))
page = requests.get("https://en.wikipedia.org/wiki/List_of_QI_episodes")
soup = BeautifulSoup(page.content, "lxml")
my_tables = soup.find_all("table",{"class":"wikitable plainrowheaders wikiepisodetable"})
for table in my_tables:
    table_rows = table.find_all("tr")
    for tr in table_rows:
        td = tr.find_all("td")
        if len(td) == 5:
            NoInSeason = td[0].find(text=True)
            Guests = td[2].find(text=True)
            Winner  = td[3].find(text=True)
            OriginalAirDate = td[4].find(text=True) 
            df = df.append({'NoInSeason': NoInSeason, 'Guests' : Guests, 'Winner': Winner, 'OriginalAirDate' : OriginalAirDate}, ignore_index=True)
print(df)
df.to_csv("output.csv")
将td[2]。find(text=True)更改为td[2]。get_text()。find正在查找第一个文本元素get_text()查找所有文本元素。注意输出是utf-8,如果您想要其他编码,您必须更改它。
import requests
import pandas as pd
from bs4 import BeautifulSoup
import numpy as np

df = pd.DataFrame(columns=(['NoInSeason', 'Guests', 'Winner', 'OriginalAirDate']))
page = requests.get("https://en.wikipedia.org/wiki/List_of_QI_episodes")
soup = BeautifulSoup(page.content, "lxml")
my_tables = soup.find_all("table",{"class":"wikitable plainrowheaders wikiepisodetable"})
for table in my_tables:
    table_rows = table.find_all("tr")
    for tr in table_rows:
        td = tr.find_all("td")
        if len(td) == 5:
            NoInSeason = td[0].find(text=True)
            Guests = td[2].find(text=True)
            Winner  = td[3].find(text=True)
            OriginalAirDate = td[4].find(text=True) 
            df = df.append({'NoInSeason': NoInSeason, 'Guests' : Guests, 'Winner': Winner, 'OriginalAirDate' : OriginalAirDate}, ignore_index=True)
print(df)
df.to_csv("output.csv")