Web结果到数据框架

时间:2017-06-08 03:00:07

标签: python

我正在尝试弄清楚如何抓取我的抓取数据并使用pandas将其转换为数据框,

我从杂货店网站上删除数据作为实验。使用美丽的汤,一旦我导入URL并使用美丽的汤我然后创建一个循环,以使用div标签在某个类中拉出任何东西。然后我使用下面的代码来提取下面的数据:

import urllib2
import requests
import pandas as pd
from bs4 import BeautifulSoup
import pickle

link=requests.get("https://www.iga.net/en/online_grocery/frozen_grocery")
soup = BeautifulSoup(link.content, 'html.parser')
##print soup.prettify()
bowl=soup.find_all('div',class_='js-product js-equalized js-addtolist-container js-ga')

for bowls in bowl:
    list=bowls.get('data-product')
    print list

列表打印:

{'ProductId':'00000_000000005500059917','BrandName':'Nestle','FullDisplayName':'10 Pack Mini Rolo Bars','IsAgeRequired':false,'SizeLabel':'','Size':'10 x 45 ml','ProductUrl':'/en/product/mini-rolo-bars10-pack/00000_000000005500059917','ProductImageUrl':'https://az836796.vo.msecnd.net/media/image/product/en/medium/0005500059917.jpg','HasNewPrice':false,'PromotionName':null,'RegularPrice':6.49000,'SalesPrice':null}
{'ProductId':'00000_000000005574253356','BrandName':'Compliments','FullDisplayName':'100% Pure Frozen Concentrate Pulp Free Juice','IsAgeRequired':false,'SizeLabel':'','Size':'283 ml','ProductUrl':'/en/product/juice100--pure-frozen-concentrate-pulp-free/00000_000000005574253356','ProductImageUrl':'https://az836796.vo.msecnd.net/media/image/product/en/medium/0005574253356.jpg','HasNewPrice':false,'PromotionName':null,'RegularPrice':1.79000,'SalesPrice':null}

我正在尝试以产品ID,尺寸和常规价格为例,并将其转储到表格中。我甚至可以将整个键和值转储到数据框中,这样我就可以在excel中使用它。

我已尝试执行以下操作,但收到错误(在最后一个块的数据框中添加:

import urllib2
import requests
import pandas as pd
from bs4 import BeautifulSoup
import pickle

link=requests.get("https://www.iga.net/en/online_grocery/frozen_grocery")
soup = BeautifulSoup(link.content, 'html.parser')
##print soup.prettify()
bowl=soup.find_all('div',class_='js-product js-equalized js-addtolist-container js-ga')

for bowls in bowl:
    list=bowls.get('data-product')
    df = pd.DataFrame(list)
    print df

这会导致错误。任何帮助表示赞赏。我是这方面的新秀。

1 个答案:

答案 0 :(得分:3)

您需要将每个data-product转换为有效的python字典,然后将它们全部合并到一个字典中,之后,您可以转换为数据帧,如下所示:

import urllib2
import requests
import pandas as pd
from bs4 import BeautifulSoup
import pickle
import json
import collections

link=requests.get("https://www.iga.net/en/online_grocery/frozen_grocery")
soup = BeautifulSoup(link.content, 'html.parser')
##print soup.prettify()
bowl=soup.find_all('div',class_='js-product js-equalized js-addtolist-container js-ga')

super_dict = collections.defaultdict(list)

for bowls in bowl:
    data=bowls.get('data-product')
    data = data.replace("\'","\"") #json.loads accepts only double quotes for json properties, so replace ' with "
    dict_data = json.loads(data) #convert to valid python dictionary 
    for k, v in dict_data.iteritems():  # d.items() in Python 3+
        super_dict[k].append(v) #merge all dictionary
df = pd.DataFrame(dict(super_dict))
df

输出将是您想要的数据帧:

enter image description here

<强>更新

如果要查看excel文件中的数据框,可以使用以下代码写入excel文件:

writer = pd.ExcelWriter('pandas_simple.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')

# Close the Pandas Excel writer and output the Excel file.
writer.save()

然后您可以打开文件pandas_simple.xlsx以检查excel格式的数据。