我正在尝试弄清楚如何抓取我的抓取数据并使用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
这会导致错误。任何帮助表示赞赏。我是这方面的新秀。
答案 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
输出将是您想要的数据帧:
<强>更新强>
如果要查看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格式的数据。