2016-04-19 6 views
1

Ich denke, ich habe die Anweisungen so weit genug übersetzt, aber jetzt bin ich verloren. Ich habe nicht viel Programmierkenntnisse oder Fähigkeiten.folgende webscraping in Python-Tutorial verwenden sie urllib im mit Hilfe Anfragen übersetzen

import requests 
from bs4 import BeautifulSoup 



def make_soup(url): 
    thepage = requests.get(url) 
    soupdata = BeautifulSoup(thepage.text, "html.parser") 
    return soupdata 


i = 1 
soup = make_soup("https://uwaterloo.ca") 

for img in soup.findAll('img'): 
    temp = img.get('src') 
    if temp[:1]=="/": 
     image = "https://uwaterloo.ca" + temp 
    else: 
     image = temp 

    nametemp = img.get('alt') 
    if len(nametemp) == 0: 
     filename = str(i) 
     i = i + 1 
    else: 
     filename = nametemp 

das ist, wo ich verloren, was den Inhalt zu tun ersetzen

imagefile = open(filename + ".jpeg", 'wb') 
imagefile.write(urllib.request.urlopen(image).read() 
imagefile.close() 

Antwort

1

einfach die urllib Logik mit requests.get und schreiben in Datei:

with open(filename + ".jpeg", 'wb') as f:   
    f.write(requests.get(image).content) 

f.write(requests.get(image).content) entspricht dem, was der Urllib-Code tut. Wenn Sie den Kontextmanager mit verwenden, wird Ihre Datei automatisch geschlossen.

Wir können auch den Code ein wenig verbessern kann eine CSS-Selektor und str.format mit:

import requests 
from bs4 import BeautifulSoup 
from urlparse import urljoin 

def make_soup(url): 
    thepage = requests.get(url) 
    soupdata = BeautifulSoup(thepage.text, "html.parser") 
    return soupdata 

soup = make_soup("https://uwaterloo.ca") 
i = 1 
for img in soup.select('img[src]'): 
    temp = img["src"] 
    alt = img["alt"] 
    if not alt: 
     alt = i 
     i += 1 
    if temp.startswith("/"): 
     temp = urljoin("https://uwaterloo.ca", temp) 
    with open("{}{}.jpeg".format(alt, i), 'wb') as f: 
     f.write(requests.get(temp).content)