2017-08-11 2 views
0

私はPythonの初心者です。 私はYelpを練習するために自分のWebクローラーを作りました。Webクローラー--- TypeError:Unicodeに強制する:必要な文字列またはバッファー、NoneTypeが見つかりました

私はこのエラーを取得し、最初のページを乗り越えることができないように保つ

:ここ

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 26, in yelpSpider 
    TypeError: coercing to Unicode: need string or buffer, NoneType found 

は私のコードです:

import requests 
from BeautifulSoup import BeautifulSoup 
def yelpSpider(maxPages): 
    page = 0 
    listURL = [] 
    listRATE = [] 
    listAREA = [] 
    listADDRESS = [] 
    listType = [] 
    while page <= maxPages: 
     url = 'https://www.yelp.com/search?find_desc=Restaurants&find_loc=Manhattan,+NY&start=0' + str(page) 
     sourceCode = requests.get(url) 
     plainText = sourceCode.text 
     soup = BeautifulSoup(plainText) 
     for bizName in soup.findAll('a',{'class':'biz-name js-analytics-click'}): 
      href = 'https://www.yelp.com.com' + bizName.get('href') 
      listURL.append(href) 
     for rating in soup.findAll('img',{'class':'offscreen'}): 
      stars = rating.get('alt') 
      listRATE.append(stars) 
     for area in soup.findAll('span',{'class':'neighborhood-str-list'}): 
      listAREA.append(area.string) 
     for type in soup.findAll('span',{'class':'category-str-list'}): 
      listType.append(type) 
     for tracker in range(int(page),int(page) + 10): 
      print(listURL[tracker]) 
      print(' ') 
      print(listAREA[tracker] + ' | ' + listRATE[tracker]) 
     page += 10 

yelpSpider(20) 

感謝あなたの助けをあなたに!

+0

の変更のように、最後の印刷に変更されます実行し、印刷する前に、あなたのlistRATEを修正することです: ' format(listAREA [tracker]、listRATE [tracker])) 'print(' {} | {} ' –

答えて

0

問題がprint(listAREA[tracker] + ' | ' + listRATE[tracker])

で発生しているそして、あなたのlistRATEはあなたがtracker: 10インデックスがNone見ることができるように

['4.5 star rating', 
'4.5 star rating', 
'4.5 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'5.0 star rating', 
'4.5 star rating', 
'4.0 star rating', 
None, 
None, 
'4.0 star rating', 
'4.5 star rating', 
'4.0 star rating', 
'3.0 star rating', 
'4.0 star rating', 
'3.5 star rating', 
'4.5 star rating', 
'4.5 star rating', 
'5.0 star rating', 
'4.0 star rating', 
None, 
None] 

ように出てくるときに起こります。また、文字列連結ではNoneを使用できません。

異なる方法を使用する場合は、or条件を使用して ''で置き換えます。

print((listAREA[tracker] or '') + ' | ' + (listRATE[tracker] or '')) 

次のオプションになりますあなたのコードは

listRATE = list(map(lambda text: text if text is not None else 'N/A', listRATE)) 

をした後、あなたの配列上記に下記

['4.5 star rating', 
'4.5 star rating', 
'4.5 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'4.0 star rating', 
'5.0 star rating', 
'4.5 star rating', 
'4.0 star rating', 
'N/A', 
'N/A', 
'4.0 star rating', 
'4.5 star rating', 
'4.0 star rating', 
'3.0 star rating', 
'4.0 star rating', 
'3.5 star rating', 
'4.5 star rating', 
'4.5 star rating', 
'5.0 star rating', 
'4.0 star rating', 
'N/A', 
'N/A'] 
関連する問題