2017-02-13 3 views
-1

Вот код, который я получил из Интернета, когда я его выполняю. Он говорит о следующей ошибке: я новичок в веб-скребке, так что совершенно смущен Это. Может ли кто-нибудь сказать мне, где мой код поступил не так? Благодарим за помощь!Python New York Times Web Scaping Error («bytes to string»)

from nytimesarticle import articleAPI 
api = articleAPI('a0de895aa110431eb2344303c7105a9f') 


articles = api.search(q = 'Obama', 
    fq = {'headline':'Obama', 'source':['Reuters','AP', 'The New York Times']}, 
    begin_date = 20111231) 


def parse_articles(articles): 
    news = [] 
    for i in articles['response']['docs']: 
     dic = {} 
     dic['id'] = i['_id'] 
     if i['abstract'] is not None: 
      dic['abstract'] = i['abstract'].encode("utf8") 
     dic['headline'] = i['headline']['main'].encode("utf8") 
     dic['desk'] = i['news_desk'] 
     dic['date'] = i['pub_date'][0:10] # cutting time of day. 
     dic['section'] = i['section_name'] 
     if i['snippet'] is not None: 
      dic['snippet'] = i['snippet'].encode("utf8") 
     dic['source'] = i['source'] 
     dic['type'] = i['type_of_material'] 
     dic['url'] = i['web_url'] 
     dic['word_count'] = i['word_count'] 
     # locations 
     locations = [] 
     for x in range(0,len(i['keywords'])): 
      if 'glocations' in i['keywords'][x]['name']: 
       locations.append(i['keywords'][x]['value']) 
     dic['locations'] = locations 
     # subject 
     subjects = [] 
     for x in range(0,len(i['keywords'])): 
      if 'subject' in i['keywords'][x]['name']: 
       subjects.append(i['keywords'][x]['value']) 
     dic['subjects'] = subjects 
     news.append(dic) 
    return(news) 

def get_articles(date,query): 
    all_articles = [] 
    for i in range(0,100): #NYT limits pager to first 100 pages. But rarely will you find over 100 pages of results anyway. 
     articles = api.search(q = query, 
       fq = {'source':['Reuters','AP', 'The New York Times']}, 
       begin_date = date + '0101', 
       end_date = date + '1231', 
       sort='oldest', 
       page = str(i)) 
     articles = parse_articles(articles) 
     all_articles = all_articles + articles 
    return(all_articles) 

Amnesty_all = [] 
for i in range(1980,2014): 
    print ('Processing' + str(i) + '...') 
    Amnesty_year = get_articles(str(i),'Amnesty International') 
    Amnesty_all = Amnesty_all + Amnesty_year 

import csv 
keys = Amnesty_all[0].keys() 
with open('amnesty-mentions.csv', 'wb') as output_file: 
    dict_writer = csv.DictWriter(output_file, keys) 
    dict_writer.writeheader() 
    dict_writer.writerows(Amnesty_all) 

Это выход, когда я запускаю его на питона 3.4: -

ВЫВОД:

Traceback (most recent call last): 
    File "/Users/niharika/Documents/nyt.py", line 7, in <module> 
    begin_date = 20111231) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nytimesarticle.py", line 111, in search 
    API_ROOT, response_format, self._options(**kwargs), key 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nytimesarticle.py", line 84, in _options 
    v = _format_fq(v) 
    File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/nytimesarticle.py", line 69, in _format_fq 
    d[k] = '"' + v + '"' 
TypeError: Can't convert 'bytes' object to str implicitly 
>>> 

источник кода: http://dlab.berkeley.edu/blog/scraping-new-york-times-articles-python-tutorial

+0

Возможный дубликат [Python3 Error: TypeError: Невозможно преобразовать объект 'bytes' в str неявно] (http://stackoverflow.com/questions/16699362/python3-error-typeerror-cant-convert-bytes-object -to-str-implicitly) –

ответ

0

ошибка говорит вам конвертировать v (объект bytes) к строке явно.

+0

Да, пожалуйста, скажите мне, как это сделать. –

+0

Потому что вы потратили нулевое усилие, чтобы узнать себя? –

+0

Резкий, но не совсем верно. –

0

В основном я скопировал code из NYTimesArticleAPI/NYTimesArticleAPI/search_api.py и заменить его с моим установленным nytimesarticle файл nytimesarticle.py

Таким образом удаляется

def _utf8_encode(self, d): ......

мешавший nytimesarticle модуль для работы с Python3, метание TypeError:must be str,not bytes на функции поиска из api.

Смежные вопросы