2017-01-30 6 views
0

Я пытаюсь автоматизировать процесс загрузки файлов imgur, и для этой цели я использую beautifulsoup, чтобы получить ссылку, но, честно говоря, я довольно потерял, почему это не работает, так как согласно моим исследованиям, он должен:Получение URL-адреса изображения на imgur

soup = BeautifulSoup("http://imgur.com/ha0WYYQ") 
    imageUrl = soup.select('.image a')[0]['href'] 

Код, указанный выше, просто возвращает пустой список и, следовательно, ошибку. Я попытался изменить его, но безрезультатно. Приветствуется всякий ввод.

+0

Это 'src' и не кажется изображение, чтобы содержать' a' ... –

+0

Я обычно просто лавировать в '.jpg 'до конца любого imgur url, и я перенаправляюсь непосредственно к изображению ...' .png' тоже работает ... – Lix

+0

Итак, если я хочу найти его через src, что мне делать? Потому что это тоже то, что я пытался, но я не мог заставить его работать. –

ответ

2
<div class="post-image"> 


         <a href="//i.imgur.com/ha0WYYQ.jpg" class="zoom"> 
            <img src="//i.imgur.com/ha0WYYQ.jpg" alt="Frank in his bb8 costume" itemprop="contentURL"> 

      </a> 


</div> 

это изображение тега, то "post-image" это одно слово, не могут быть разделены.

imageUrl = soup.select('.post-image a')[0]['href'] 

ярлык для выбора одного тега:

imageUrl = soup.select_one('.post-image a')['href'] 

Чтобы разобрать документ, передать его в конструктор BeautifulSoup. Вы можете передать в строке или открытого дескрипторе:

from bs4 import BeautifulSoup 

soup = BeautifulSoup(open("index.html")) 

soup = BeautifulSoup("<html>data</html>") 
+0

Удивительный, который, кажется, работает! Спасибо огромное! –

+0

Извините, раньше, но был предел. –

3

Есть несколько вещей неправильно с вашим подходом:

  • BeautifulSoup делает не ожидать URL, так что вы будете необходимо сначала использовать библиотеку для извлечения потока HTML; и
  • Ваш селектор кажется недействительным в зависимости от того, что я вижу, это должно быть .post-image a.
r = urllib.urlopen('http://imgur.com/ha0WYYQ').read() 
soup = BeautifulSoup(r,'lxml') 
soup.select('.post-image a')[0]['href']

Или более элегантна:

with urllib.urlopen('http://imgur.com/ha0WYYQ') as f: 
    r = f.read() 
    soup = BeautifulSoup(r,'lxml') 
    result = soup.select('.post-image a')[0]['href']
+0

Удивительный! Благодаря связке, я в настоящее время сталкиваюсь с некоторыми проблемами с файлами gifv, но не с файлами gif. Например, это: i.imgur.com/hKONDKp.gifv, похоже, что он не загружает весь файл, не понял почему? –

+0

Как вы это понимаете, это не * скачать *. Суп не будет загружать файл, он будет * извлекать * url. –

+0

Да, я плохой, я сбиваю с толку еще один вопрос, который у меня был. Извините –