BeautifulSoup возвращает мне пустой объект

#python #beautifulsoup

#python #beautifulsoup

Вопрос:

Я пытаюсь удалить некоторый URL с помощью BeautifulSoup. URL-адреса, которые я очищаю, поступают из вызова API Google Analytics, некоторые из них не работают должным образом, поэтому мне нужно найти способ пропустить их.

Вот мой первоначальный скрипт, который работает должным образом, когда у меня нет неправильного URL :

 rawdata = []
urllist = []
sharelist = []
mystring = 'http://www.blablabla.com'
def print_results(results):
  # Print data nicely for the user.

  if results:
    for row in results.get('rows'):
      rawdata.append(row[0])
  else:
    print 'No results found'

  urllist = [mystring   x for x in rawdata]

  for row in urllist:  
            # query the website and return the html to the variable 'page'
    page = urllib2.urlopen(row)
    soup = BeautifulSoup(page, 'html.parser')

                # Take out the <div> of name and get its value
    name_box = soup.find(attrs={'class': 'nb-shares'})
    share = name_box.text.strip() # strip() is used to remove starting and trailing

    # save the data in tuple
    sharelist.append((row,share))

  print(sharelist)
  

После ответа из stack у меня была эта строка для обработки неправильного URL :

 if name_box is None:
  continue
  

Затем у меня была эта строка :

 import sys
reload(sys)
sys.setdefaultencoding('utf-8')
  

В верхней части моего скрипта для устранения этой ошибки 'ascii' codec can't encode character u'u200b' in position 22: ordinal not in range(128)

но теперь мой скрипт возвращает мне пустой объект.

Вот мой окончательный сценарий :

 import sys
reload(sys)
sys.setdefaultencoding('utf-8')
{...my api call here...}
rawdata = []
urllist = []
sharelist = []
mystring = 'http://www.blablabla.com'
def print_results(results):
  # Print data nicely for the user.

  if results:
    for row in results.get('rows'):
      rawdata.append(row[0])
  else:
    print 'No results found'

  urllist = [mystring   x for x in rawdata]

  for row in urllist:  
            # query the website and return the html to the variable 'page'
    page = urllib2.urlopen(row)
    soup = BeautifulSoup(page, 'html.parser')

                # Take out the <div> of name and get its value
    name_box = soup.find(attrs={'class': 'nb-shares'})
    if name_box is None:
      continue
    share = name_box.text.strip() # strip() is used to remove starting and trailing

    # save the data in tuple
    sharelist.append((row,share))

  print(sharelist)
  

Комментарии:

1. Где вы увидели reload(sys) логику?

2. нигде 🙂 просто беру это из некоторых решений, которые я нашел по другим вопросам.

3. Любого или чего-либо, что советует вам делать это, следует избегать как чумы! Какую ОС и какое приложение в вашей операционной системе вы используете для запуска кода? Также, какая именно строка вызывает ошибку, печать?

4. Я на OS X el capitan запускаю код со своего терминала

5. Проблема с кодированием возникает при попытке распечатать данные. Однако вы, вероятно, можете записать эту информацию в файл без каких-либо проблем.