2017-01-27 5 views
0

Ich bin neu in Python und kann ein wenig Hilfe verwenden. Ich versuche ein Skript zu schreiben, das auf eine bestimmte Website geht und mehrere .gif-Bilder an verschiedenen Stellen dieser Website herunterlädt. Kann mir jemand in die richtige Richtung helfen? Dies ist die erste, die ich versucht habe zu machen.Probleme mit meinem Python-Skript

Hier ist, was ich bisher bekommen habe.

from http:// import http://folkworm.ceri.memphis.edu/heli/heli_bb_ag/ as bs 
import urlparse 
from urllib2 import urlopen 
from urllib import urlretrieve 
import os 
import sys 

def main(url, out_folder="C:\Users\jerry\Desktop\Heli/"): 
"""Downloads all the images at 'url' to /test/""" 
http://folkworm.ceri.memphis.edu/heli/heli_bb_ag/ = bs(urlopen(url)) 
parsed = list(urlparse.urlparse(url)) 

for image in   http://folkworm.ceri.memphis.edu/heli/heli_bb_ag/.findAll("gif"): 
    print "gif: %(src)s" % image 
    filename = gif["src"].split("/")[-1] 
    parsed[2] = gif["src"] 
    outpath = os.path.join(out_folder, filename) 
    if gif["src"].lower().startswith("http"): 
     urlretrieve(gif["src"], outpath) 
    else: 
     urlretrieve(urlparse.urlunparse(parsed), outpath) 

def _usage(): 
print "usage: python dumpimages.py  http:folkworm.ceri.memphis.edu/heli/heli_bb_ag/ [outpath]" 

if __name__ == "__main__": 
url = sys.argv[-1] 
out_folder = "/test/" 
if not url.lower().startswith("http"): 
    out_folder = sys.argv[-1] 
    url = sys.argv[-2] 
    if not url.lower().startswith("http"): 
     _usage() 
     sys.exit(-1) 
main(url, out_folder) 
+0

Was ist falsch an dem von Ihnen geposteten Code? – csmckelvey

+0

Was ist Ihre Frage? Das ist viel zu weit wie es ist. – Carcigenicate

+0

[Lesen Sie dies] (http://StackOverflow.com/Help/Mcve) und umrahmen Sie Ihre Frage? Wir können nicht genau sagen, womit Sie im Code kämpfen. – Fruitspunchsamurai

Antwort

1

Hier ist die Grundidee.

>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> item = requests.get('http://folkworm.ceri.memphis.edu/heli/heli_bb_ag/') 
>>> page = item.text 
>>> soup = BeautifulSoup(page, 'lxml') 
>>> links = soup.findAll('a') 
>>> for link in links: 
...  if '.gif' in link.attrs['href']: 
...   print (link.attrs['href']) 
...   break 
...  
CCAR_HHZ_AG_00.2017012700.gif?v=1485534942 

Die Pause Aussage ist es nur das Skript zu unterbrechen, so dass es nicht alle Namen der Gifs druckt. Der nächste Schritt wäre es, dieser Schleife Code hinzuzufügen, um die in requests.get erwähnte URL mit dem Namen jedes Gifs zu verketten und ein requests.get dafür zu machen. Diesmal würden Sie jedoch sagen, image = item.content, um das Bild in Bytes zu erhalten, das Sie in eine Datei Ihrer Wahl schreiben könnten.

EDIT: Ausgefeilt. Beachten Sie, dass Sie immer noch einen Dateinamen für jede Ausgabedatei angeben müssen.

>>> import requests 
>>> from bs4 import BeautifulSoup 
>>> URL = 'http://folkworm.ceri.memphis.edu/heli/heli_bb_ag/' 
>>> item = requests.get(URL) 
>>> page = item.text 
>>> soup = BeautifulSoup(page, 'lxml') 
>>> links = soup.findAll('a') 
>>> for link in links: 
...  if '.gif' in link.attrs['href']: 
...   print (link.attrs['href']) 
...   pic = requests.get(URL + link.attrs['href']) 
...   image = pic.content 
...   open('pic.gif', 'wb').write(image) 
...   break 
...  
CCAR_HHZ_AG_00.2017012700.gif?v=1485535857 
100846 
Verwandte Themen