2012-10-17 8 views
5

Mój kod zwraca tylko pusty ciąg i nie mam pojęcia dlaczego.Program do zdrapywania obrazów w Pythonie nie działa zgodnie z przeznaczeniem

import urllib2 

def getImage(url): 
    page = urllib2.urlopen(url) 
    page = page.read() #Gives HTML to parse 

    start = page.find('<a img=') 
    end = page.find('>', start) 

    img = page[start:end] 

return img 

Zwróci tylko pierwszy znaleziony obraz, więc nie jest to bardzo dobry skrobak obrazu; powiedział, moim głównym celem jest znalezienie obrazu. Nie jestem w stanie.

Odpowiedz

0

Wyodrębnianie informacji o obrazie w ten sposób nie jest dobrym pomysłem. Istnieje severaly lepsze opcje, w zależności od swojej wiedzy i motywacji, aby dowiedzieć się czegoś nowego:

+0

wiedząc jak używać regex jest przydatna umiejętność, ale to nie jest „lepszym rozwiązaniem” dla sieci skrobanie w jakikolwiek sposób. – root

2

Należy użyć biblioteki dla tego i istnieje kilka tam, ale aby odpowiedzieć na pytanie, zmieniając kod pokazał nam ...

Twoim problemem jest to, że starają się znaleźć obrazy , ale obrazy nie używają znacznika <a ...>. Używają tagu <img ...>. Oto przykład:

<img src="smiley.gif" alt="Smiley face" height="42" width="42"> 

Co należy zrobić, to zmienić linię start = page.find('<a img=') do start = page.find('<img ') tak:

def getImage(url): 
    page = urllib2.urlopen(url) 
    page = page.read() #Gives HTML to parse 

    start = page.find('<img ') 
    end = page.find('>', start) 

    img = page[start:end+1] 
    return img 
+0

Po prostu wypróbowałem moją sugerowaną funkcję 'getImage' na stronie http://yahoo.com i otrzymałem:' ' – bohney

2

Rozważ użycie BeautifulSoup do analizowania kodu HTML:

from BeautifulSoup import BeautifulSoup 
import urllib 
url = 'http://www.google.com' 
html = urllib.urlopen(url).read() 
soup = BeautifulSoup(html) 
for img in soup.findAll('img'): 
    print img['src'] 
0

Niektóre instrukcje to może być pomocne:

  1. Użyj Google Chrome. Ustaw mysz nad obrazem i kliknij prawym przyciskiem myszy. Wybierz "Sprawdź element". Otworzy się sekcja, w której będziesz mógł zobaczyć html w pobliżu obrazu.

  2. pomocą Piękne Soup do analizowania html:

    from BeautifulSoup import BeautifulSoup 
    
    request = urllib2.Request(url) 
    response = urllib2.urlopen(request) 
    html = response.read() 
    soap = BeautifulSoap(html) 
    imgs = soup.findAll("img") 
    items = [] 
    for img in imgs: 
        print img['src'] #print the image location 
        items.append(img['src']) #store the locations for downloading later 
    
Powiązane problemy