2017-02-08 6 views
0

ich einen Kurs mache, die mich dies mit BeautifulSoup zu analysieren erfordert: http://python-data.dr-chuck.net/known_by_Fikret.htmlfolgenden Links in HTML mit BeautifulSoup

Die Anweisungen sind: Suchen Sie den Link an Position 3 (der erste Name ist 1). Folge diesem Link. Wiederholen Sie diesen Vorgang 4 mal. Die Antwort ist der Nachname, den Sie abrufen.

Dies ist der Code, den ich bisher habe:

import urllib.request, urllib.parse, urllib.error 
from bs4 import BeautifulSoup 
import re 

url = input('Enter - ') 
html = urllib.request.urlopen(url).read() 
soup = BeautifulSoup(html, 'html.parser') 

count = int(input('Enter count: ')) 
pos = int(input('Enter position: ')) - 1 
urllist = list() 
taglist = list() 

tags = soup('a') 

for i in range(count): 
    for tag in tags: 
     taglist.append(tag) 
    url = taglist[pos].get('href', None) 
    print('Retrieving: ', url) 
    urllist.append(url) 
print('Last URL: ', urllist[-1]) 

Das ist mein Ausgang:

Retrieving: http://python-data.dr-chuck.net/known_by_Fikret.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Montgomery.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Montgomery.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Montgomery.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Montgomery.html 
Last URL: http://python-data.dr-chuck.net/known_by_Montgomery.html 

Dies ist die Ausgabe, die soll ich bekommen:

Retrieving: http://python-data.dr-chuck.net/known_by_Fikret.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Montgomery.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Mhairade.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Butchi.html 
Retrieving: http://python-data.dr-chuck.net/known_by_Anayah.html 
Last URL: http://python-data.dr-chuck.net/known_by_Anayah.html 

Ich habe eine Weile daran gearbeitet, aber ich war immer noch nicht in der Lage, den Code richtig zu loopen. Ich bin neu im Codieren und ich suche nur nach Hilfe, um mich in die richtige Richtung zu lenken. Vielen Dank.

Antwort

0
def get_html(url): 
    html = urllib.request.urlopen(url).read() 
    soup = BeautifulSoup(html, 'html.parser') 
    return soup 

url = input('Enter - ') 
count = int(input('Enter count: ')) 
pos = int(input('Enter position: ')) - 1 

urllist = list() 

for i in range(count): 
    taglist = list() 

    for tag in get_html(url)('a'): # Needed to update your variable to new url html 
     taglist.append(tag) 

    url = taglist[pos].get('href', None) # You grabbed url but never updated your tags variable. 

    print('Retrieving: ', url) 
    urllist.append(url) 

print('Last URL: ', urllist[-1]) 
0

Sie erhalten den Link an der gleichen Position pos mehrmals. Verwenden Sie die i Schleifenzähler für den Offset, ersetzen:

url = taglist[pos].get('href', None) 

mit:

url = taglist[pos + i].get('href', None) 
0

Der Grund, warum Sie nicht die richtige Antwort bekommen Sie ist die folgende: Sie müssen nicht den Link öffnen.

Nachdem Sie auf der ersten Seite die richtige URL gefunden haben, müssen Sie die URL, die Sie gefunden haben, mit urllib.request.urlopen (URL) .read() öffnen und dort nach dem neuen Link suchen. Sie müssen das dreimal wiederholen. Ich würde eine while-Schleife dafür empfehlen.

dieser Code funktioniert der Trick:

url = 'http://python-data.dr-chuck.net/known_by_Fikret.html' 
count = 5 
pos = 2 
urllist = [] 
taglist = [] 

connections = 0 
while connections < 5 : #you need to connect five times 
    taglist = [] 
    print('Retrieving: ', url) 
    html = urllib.request.urlopen(url).read() 
    soup = BeautifulSoup(html, 'html.parser') 
    tags = soup('a') 

    for i in range(count): 
     for tag in tags: 
      taglist.append(tag) 

    url = taglist[pos].get('href', None) 
    urllist.append(url) 

    connections = connections + 1 
print ("last url:", url) 
Verwandte Themen