Как загрузить данные сканирования, используя красивый суп, в AZURE BLOB STORAGE на python?

Я сканирую данные с URL-адреса и сканирую, используя красивый суп. Я хочу сохранить полученные данные в хранилище BLOB-объектов AZURE в виде большого двоичного объекта. ниже приведен мой код при сохранении данных на локальном компьютере, то же самое, что я хочу выполнить для прямой загрузки в Azure.

soup = BeautifulSoup(urlopen('www.abc.html')) 
outfile = open('C:\\Users\\ADMIN\\filename.txt','w') 
data = soup.encode("ascii","ignore") 
outfile.write(data) 
outfile.close

Этот код успешно сохраняет данные веб-сайта в моей локальной папке, пожалуйста, помогите мне сохранить данные того же веб-сайта непосредственно в хранилище BLOB-объектов Azure. У меня есть ключ и учетная запись в AZURE BLOB STORAGE.

soup=BeautifulSoup(urlopen('www.abc.html'))
data = soup.encode("ascii","ignore")        

block_blob_service.create_blob_from_text('containername', 'filename.txt', data)

Я пытаюсь выше кусок кода, но он не работает.

1 ответ

Там нет никакой информации, которая показывает, какая версия BeautifulSoup и метод urlopen происходит от urllib или же urllib2 или же urllib3 в Python 2. Просто в соответствии с вашим кодом и исходя из моего опыта, я думаю, что вы использовали BeautifulSoup4 с urllib2и я попытался воспроизвести ваш вопрос о data тип не str, но не удалось, потому что мой код ниже работает.

Вот мой пример кода.

from bs4 import BeautifulSoup 
import urllib2

soup = BeautifulSoup(urllib2.urlopen("http://bing.com"))
data = soup.encode("ascii","ignore") 
print type(data) # It's <type 'str'> here

from azure.storage.blob.blockblobservice import BlockBlobService

block_blob_service = BlockBlobService(account_name='<your-account-name>', account_key='<your-account-key>')
block_blob_service.create_container('mycontainer')
block_blob_service.create_blob_from_text('mycontainer1', 'filename.txt', data)

Даже я заменил urllib2 с urllib, data тип str, Поэтому я думаю, что вы можете попытаться использовать StringIO & block_blob_service.create_blob_from_stream для вашего кода, как показано ниже.

from StringIO import StringIO
block_blob_service.create_blob_from_stream('mycontainer', 'filename2.txt', StringIO(data))

Это также работает для меня.

Надеюсь, поможет.

Другие вопросы по тегам