2014-07-15 32 views
8

Próbuję dostać moje stopy mokre z BS. Próbowałem przedrzeć się przez dokumentację, ale już pierwszy krok napotkałem już na problem.Odpowiedzi BeautifulSoup z błędem

To jest mój kod:

from bs4 import BeautifulSoup 
soup = BeautifulSoup('https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5....1b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description') 

print(soup.prettify()) 

To jest odpowiedź uzyskać:

Warning (from warnings module): 
File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/bs4/__init__.py", line 189 
'"%s" looks like a URL. Beautiful Soup is not an HTTP client. You should probably use an  
HTTP client to get the document behind the URL, and feed that document to Beautiful Soup.' % markup) 
UserWarning: "https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5...b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description" 
looks like a URL. Beautiful Soup is not an HTTP client. You should 
probably use an HTTP client to get the document behind the URL, and feed that document  
to Beautiful Soup. 
https://api.flickr.com/services/rest/?method=flickr.photos.search&api;_key=5...b&per;_page=250&accuracy;=1&has;_geo=1&extras;=geo,tags,views,description 

Czy dlatego, że staram się wywołać http ** y ** czy jest to inny problem? Dzięki za pomoc!

+0

Zapisz stronę w internecie lokalnie następnie użyć zupę na tym pliku. – suspectus

Odpowiedz

10

Podajesz URL jako ciąg. Zamiast tego trzeba uzyskać źródło strony poprzez urllib2 lub requests:

from urllib2 import urlopen # for Python 3: from urllib.request import urlopen 
from bs4 import BeautifulSoup 

URL = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=5....1b&per_page=250&accuracy=1&has_geo=1&extras=geo,tags,views,description' 
soup = BeautifulSoup(urlopen(URL)) 

Należy pamiętać, że nie trzeba zadzwonić read() na skutek urlopen(), BeautifulSoup pozwala pierwszy argument będzie obiektem plikopodobnym, urlopen() zwraca obiekt podobny do pliku.

2

Błąd mówi wszystko, przekazujesz adres URL do pięknej zupy. Najpierw musisz pobrać zawartość witryny, a dopiero potem przekazać zawartość do BS.

Aby pobrać zawartość można użyć urlib2

import urllib2 
response = urllib2.urlopen('http://www.example.com/') 
html = response.read() 

a później

soup = BeautifulSoup(html) 
+0

Hej, próbowałem dowiedzieć się, która odpowiedź została wysłana jako pierwsza, a ona odpowiedziała zarówno "odpowiedziała 29 minut temu". Więc pomyślałem, że zrobiłem jedną i zaakceptowałem drugą. Nie byłem pewien, jak to poprawnie. Chciałem zaakceptować odpowiedź, która była pierwsza. – Stophface

Powiązane problemy