#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. Проблема с кодированием возникает при попытке распечатать данные. Однако вы, вероятно, можете записать эту информацию в файл без каких-либо проблем.