2016-04-25 11 views
2

Diese Frage bezieht sich auf eine benotete Zuweisung. In der Aufgabe werde ich gebeten, eine Web-Seite zu bekommen, eine HTML-Adresse zu finden, zur Adresse zu gehen, eine andere Adresse zu finden, zu dieser Adresse zu gehen und n-mal zu wiederholen. Ich möchte jeden Einblick, warum mein Code eine URL nicht lädt. Ich möchte verstehen, was ich falsch mache, aber nicht unbedingt die Antwort bekommen. Ich bin völlig neu, aber schnell besessen. Ich hoffe, dass diese Frage in Form und Umfang für dieses Forum geeignet ist.BeautifulSoup Python 2.7 Problem beim Laden einer URL aus dem Skript

Die Klasse erfordert Python 2.7, BeautifulSoup 3 und urllib,

MAIN FRAGE: Bin ich auf dem richtigen Weg zu denken, dass die gespeicherte URL in "url =" falsch ist Typ für Urlib?

Traceback Punkte auf Linien in urllib.py, dass es nicht in der Lage vorschlagen, ist zu analysieren (nicht sicher, ob dies das richtige Wort ist) Linien 87, 185 und 1077 aufgrund von Problemen mit Objekttyp.

Ich beginne mit:

  url = ('http://some.known.website.html') 
     # Then get web-page: 
     html = urllib.urlopen(url).read() 
     # I use a "for" loop to iterate through the "tags": 
     for tag in tags: 
      # Then convert to string: 
      urlname = str(tag) 
      # Extract url with findall: 
      url = re.findall('href="(http://.*)"',urlname) 
      # load new "url" by looping back: 
      html = urllib.urlopen(url).read() 

      # This is the contents of "url" (obfuscated) as printed 
      # to the terminal by a "print 'URL : ',url" staement: 
      URL : ['http://some.website.html'] 

Dies ist die Fehlermeldung:

 Traceback (most recent call last): 
     File "12-4test.py", line 17, in <module> 
      html = urllib.urlopen(url).read() 
     File "/usr/lib/python2.7/urllib.py", line 87, in urlopen 
      return opener.open(url) 
     File "/usr/lib/python2.7/urllib.py", line 185, in open 
      fullurl = unwrap(toBytes(fullurl)) 
     File "/usr/lib/python2.7/urllib.py", line 1077, in unwrap 
      url = url.strip() 
     AttributeError: 'list' object has no attribute 'strip' 
+1

es ist schwer, den Code zu folgen, kopieren tatsächliche Schnipsel und Ihre Kommentare Kommentare machen. – vittore

+0

Zunächst möchte ich allen danken, die sich die Zeit genommen haben, diese Frage zu beantworten. Ich werde die Vorschläge versuchen und mit Ergebnissen zurückkommen. Ich zögerte, zu viel Code zu posten, weil es eine benotete Aufgabe war. –

+0

Noch einmal möchte ich meine extreme Dankbarkeit ausdrücken. Mehrere Bereiche der Mehrdeutigkeit sind verschwunden. Antworten auf Fragen, die ich nicht gestellt hatte, blieben in meinem Hinterkopf. Die Umsetzung ist ein interessanter und lohnender Prozess. –

Antwort

0

re.findall kehrt Liste von Strings mit Streichhölzern. Sie müssen über sie, um iterieren tatsächliche URL zu erhalten, die Sie weitergeben können an urllib.urlopen

urls = re.findall('href="(http://.*)"',urlname) 
for url in urls: 
    html = urllib.urlopen(url).read() 

oder

pages = [urlib.urlopen(url).read() for url in urls] 
0

Das eigentliche Problem ist, dass Sie Urls nicht reguläre Ausdrücke verwenden müssen, um zu extrahieren . BeautifulSoup ‚s Tag objects allow a dictionary-like access to element attributes:

for tag in tags: 
    url = tag.get("href") 
    print(url) 
+0

Das hat funktioniert. Vielen Dank. Ich werde die Variationen versuchen, die andere vorgeschlagen haben. Ich habe bemerkt, dass im Terminal diese URL ohne eckige Klammer oder einfache Anführungszeichen gedruckt hat. –