我在从网上抓取数据时从列表中创建熊猫df时遇到了一些麻烦。在这里,我使用beautifulsoup从localharvest.org(农场名称,城市和描述)中提取有关本地农场的一些信息。我能够有效地抓取数据,在每次传递中创建一个对象列表。我遇到的麻烦是将这些列表输出到表格df中。从列表中创建熊猫数据框的麻烦
我的完整代码如下:
import requests
from bs4 import BeautifulSoup
import pandas
url = "http://www.localharvest.org/search.jsp?jmp&lat=44.80798&lon=-69.22736&scale=8&ty=6"
r = requests.get(url)
soup = BeautifulSoup(r.content)
data = soup.find_all("div", {'class': 'membercell'})
fname = []
fcity = []
fdesc = []
for item in data:
name = item.contents[1].text
fname.append(name)
city = item.contents[3].text
fcity.append(city)
desc = item.find_all("div", {'class': 'short-desc'})[0].text
fdesc.append(desc)
df = pandas.DataFrame({'fname': fname, 'fcity': fcity, 'fdesc': fdesc})
print (df)
df.to_csv('farmdata.csv')
有趣的是,print(df)
功能表明,所有三个名单已传递到数据帧。但结果.CSV输出仅包含一列值(fcity),其中存在fname和fdesc列标签。 Interstingly,如果我做了一些疯狂的事情,比如试图强制标签描述的输出为df.to_csv('farmdata.csv', sep='\t')
,我得到一个带有混乱输出的列,但它至少会传递数据框的其他元素。
先感谢您的任何输入。
这工作完美。我认为问题来自desc领域。我注意到beautifulsoup往往会添加大量的换行符。其他人主张使用'.split()'去除换行符。这是一个很大的帮助。谢谢。 – JeremyD
如果您使用电子表格程序查看csv文件,我猜测换行符会使它看起来像单元格为空,而实际上它只显示第一个(空)行。真高兴你做到了。请考虑upvoting和/或[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)您找到有用的答案:) – zarak