2016-11-23 45 views
0

的這樣的代碼,我可以得到一個CSV文件,但我得到了一些錯誤:「數據幀」對象不是可調用的函數

對方的回答也解決不了我的問題。

'DataFrame' object is not callable

Dataframe Object is not callable

import requests,datetime,re,time,pandas 
from bs4 import BeautifulSoup 

session=requests.Session() 
headers={ 
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.101 Safari/537.36', 
    'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4', 
    'Accept-Encoding':'gzip, deflate, sdch' 
} 

today=datetime.date.today() 
yesterday = today - datetime.timedelta(days=1) 

url_dict={'SafariPark':'http://ticket.lvmama.com/scenic-100417', 
     'Paradise':'http://ticket.lvmama.com/scenic-120604', 
     'WaterPark':'http://ticket.lvmama.com/scenic-123120', 
     'BirdsPark':'http://ticket.lvmama.com/scenic-104830', 
    'InternationalCircus':'http://ticket.lvmama.com/scenic-120603', 
     'OceanKingdom':'http://ticket.lvmama.com/scenic-159567', 
     'HengqinTheatre':'http://ticket.lvmama.com/scenic-159568', 
     'SZHappyValley':'http://ticket.lvmama.com/scenic-104960', 
     'SHdisneyrestort':'http://ticket.lvmama.com/scenic-175649', 
     'HKdisneyland':'http://ticket.lvmama.com/scenic-105907', 
     'Octeast':'http://ticket.lvmama.com/scenic-122400', 
     'HKOceanPark':'http://ticket.lvmama.com/scenic-103686' 
    } 

def get_id(url): 
    place_id = url.split('-')[-1] 
    return place_id 

def get_review(url): 
    place_id=get_id(url) 
    urls=['http://ticket.lvmama.com/vst_front/comment/newPaginationOfComments?type=all&currentPage={}&totalCount=1&placeId={}&productId=&placeIdType=PLACE&isPicture=&isBest=&isPOI=Y&isELong=N'.format(i,str(place_id)) for i in range(1,6)] 
    review_list = [] 
    for u in urls: 
     res=requests.get(u) 
     soup = BeautifulSoup(res.text,'lxml') 
     all_div = soup.find_all('div', {'class', 'comment-li'}) 
     for t in all_div: 
      data = { 
       'name': t.select(' div.com-userinfo > p > a')[0].text, 
       'date': t.select('div.com-userinfo > p > em')[0].text, 
       'review': re.sub('(|\n+|\r+)','',t.find('div', {'class', 'ufeed-content'}).text), 
       'tourist_type': t.find('a', {'class', 'com-proTit'}).text, 
      } 
      review_list.append(data) 
    return review_list 

def final_data(url): 
    review_list=get_review(url) 
    df=pandas.DataFrame(review_list) 
    data = df[df.date == str(yesterday)] 
    if data.empty: 
     return 'No review' 
    else: 
     final_data=data.drop_duplicates() 
     return final_data 

for name,url in url_dict.items(): 
    final_data=final_data(url) 
    if type(final_data)==str: 
     print name+'empty' 
    else: 
     final_data.to_csv(name+'_{}.csv'.format(yesterday),encoding='utf-8') 
      time.sleep(8) 

錯誤:

Traceback (most recent call last): 
    File "D:/project/������ȡ/lvmama.py", line 61, in <module> 
    final_data=final_data(url) 
TypeError: 'DataFrame' object is not callable 
+0

在url_dict.items()中爲'name,url的第二次迭代得到這個錯誤:'-loop? – Rojan

+0

是的,我只收到一個csv文件。 – pang2016

+1

您應該更改返回對象的名稱,例如:'final = final_data(url)' – Chr

回答

4

在第二次迭代,final_data不被認爲是一個函數。 您應該更改返回對象的名稱。

if __name__ == '__main__': 
    for name, url in url_dict.items(): 
     final = final_data(url) 
     if type(final) == str: 
      print name + 'empty' 
     else: 
      final.to_csv(name+'_{}.csv'.format(yesterday),encoding='utf-8') 
      time.sleep(8) 
相關問題