2017-04-25 3 views
0

Ich versuche, die URL für Bilder auf einer Webseite zu erhalten und diesen Code verwenden:Kann nicht filtern beautifulsoup Ergebnisse für Bilder

import httplib2 
from BeautifulSoup import BeautifulSoup, SoupStrainer 

http = httplib2.Http() 
status, response = http.request('URL') 
for link in BeautifulSoup(response, parseOnlyThese=SoupStrainer('img')): 
     if "visibility:hidden" not in link: 
       print "IMAGE PATH: "+link['src'] 

Und ich will die Links unsichtbare Bilder wie filtern:

img style="position:absolute;z-index:-3334;top:0px;left:0px;visibility:hidden;" src="https://..... 

Aber ich bin nicht in der Lage, auf die Variable "Link" zu filtern. Wenn immer passieren.

Welcher Typ ist die Linkvariable? Schnur? Kann ich es in einen String-Typ konvertieren? Wie soll ich das bitte machen? Danke.

Edit: Danke M. Leung Ich versuchte, den Konstruktor Sie gab: BeautifulSoup (Antwort, 'html.parser', parse_only = SoupStrainer ('img') aber nicht für mich: Traceback (letzter Aufruf zuletzt): Datei "getLinksFromPage3.py", Zeile 10, in für Link in BeautifulSoup (Antwort, 'html.parser', parse_only = SoupStrainer ('img')): Datei "/ usr/lib/python2.7/dist-packages/BeautifulSoup.py ", Zeile 1522, in init BeautifulStoneSoup. init (selbst, * args, ** kwargs) Typeerror: init() bekam ein unerwartetes Stichwort Argument 'parse_only'

+0

in der if-Anweisung: haben Sie versucht '' link ['style'] ''? –

+0

Bitte teilen URL –

+0

In der BeautifulSoup Dokumentation: https://www.crummy.com/software/BeautifulSoup/bs4/doc/ Sie haben ein klares Beispiel, dass der catched Inhalt ein Wörterbuch ist, so denke ich, dass mit "link [' style '] '' sollte das Problem lösen. –

Antwort

0

Verwenden tag.attrs zuerst die attrs auf dem Tag zu bekommen, dann attr filtern. Der folgende Code funktioniert.

Auch sollten Sie definieren, welcher Parser für den Fall geeignet ist, ein besseres Ergebnis wird gemacht.

for link in BeautifulSoup(response, 'html.parser', parse_only=SoupStrainer('img')): 
    if 'style' in link.attrs: 
     if "visibility:hidden" not in link['style']: 
      print link['src'] 
    else: 
     print link['src'] 
+0

Vielen Dank für Ihre Hilfe. Ich werde es so schnell wie möglich testen. Was meinst du meine Art von Parser? Ist html.parser nicht der richtige zu verwenden? Was empfehlen Sie ? – chris3389

+0

BeautifulSoup (Antwort, 'html.parser', parse_only = SuppeStrainer ('img')): schlägt für mich fehl: TypeError: __init __() hat ein unerwartetes Schlüsselwort Argument 'parse_only' Welche Version verwenden Sie? – chris3389

0

Vielen Dank M. Leung. Ich musste auch zu bs4 wechseln.

import httplib2 
from bs4 import BeautifulSoup, SoupStrainer 

http = httplib2.Http() 
status, response = http.request('URL') 

for link in BeautifulSoup(response, 'html.parser', parse_only=SoupStrainer('img')): 
    if 'style' in link.attrs: 
     if "visibility:hidden" not in link['style']: 
      print link['src'] 
    else: 
     print link['src'] 
Verwandte Themen