listen for en Python webapplikasjon feil

stemmer
0

Jeg er ny på området, er jeg ikke sikker på om dette er riktig sted å spørre python spørsmål, hvis ikke gi meg beskjed og jeg vil re-poste dette til riktig sted. Jeg trenger litt hjelp med en kode som jeg jobbet med i min Coursera klasse, er målet som følger: Finn lenken i posisjon 18 (fornavnet er en). Følg denne linken. Gjenta denne prosessen 7 ganger. Svaret er det siste navnet som du hente. Hint: Det første tegnet i navnet på den siste siden du vil legge i, er: J fra linken :( http://py4e-data.dr-chuck.net/known_by_Shannon.html )

Jeg har skrevet en kode for denne oppgaven, men det virker som det bare jobbet for det første elementet, og hvert område siden den første, den kodeliste feil. Min idé er å få HTML-koden og legge inn url i en liste, og deretter finne den 18. element fra listen, og deretter omdirigere hele løkken med den nye url og slette den gamle listen. Gjenta prosessen for 7 ganger. Jeg seriøst forveksles med om hvor koden som gikk galt. Takk på forhånd.

    import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
import re
term_counter = (0)
file = list()
regex = list()
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = input('Enter - ')
for I in range(7) :
    html = urllib.request.urlopen(url, context=ctx).read()
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup('a')
    del file[:]
    file = list()
    for tag in tags :
        file.append(tag)
        print(tag.contents[0])
        url = tag.get('href')
        print (url)
    for items in range(17,18) :
        print(file[items])
Publisert på 02/09/2018 klokken 05:22
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Virker for meg, ber klassens spørsmålet for en rekursiv metode:

import bs4
import requests

url = 'http://py4e-data.dr-chuck.net/known_by_Shannon.html'

def get_url(url):
     page_response = requests.get(url)
     soup = BeautifulSoup(page_response.content, "html.parser")
     return soup.find_all('a')[17].get('href')

def routine(url, counter):
    if counter > 0:
    url = get_url(url)
    print(url)
    counter -= 1
    routine(url, counter)

routine(url, 7)

produksjon:

http://py4e-data.dr-chuck.net/known_by_Stacey.html
http://py4e-data.dr-chuck.net/known_by_Zoya.html
http://py4e-data.dr-chuck.net/known_by_Haiden.html
http://py4e-data.dr-chuck.net/known_by_Ayrton.html
http://py4e-data.dr-chuck.net/known_by_Leilan.html
http://py4e-data.dr-chuck.net/known_by_Thorben.html
http://py4e-data.dr-chuck.net/known_by_Jahy.html

Det første tegnet i den siste url navn er bekreftet til å begynne med en 'J'.

Svarte 02/09/2018 kl. 16:33
kilden bruker

stemmer
0

Problemet er at selv om du skriver ut den 18. tagsposten, trenger du ikke sette urldenne verdien. Dessverre, du bruker urlogså innenfor tagsloop, slik at du ikke legger merke til denne feilen. I koden din, urler fortsatt satt til den siste oppføringen av tags. Hvis du skriver ut Imed den faktiske urlbrukes i loop (uncomment tilhørende linjer), vil du se dette:

0 http://py4e-data.dr-chuck.net/known_by_Shannon.html
['Riya', 'Terri', 'Coban', 'Oswald', 'Codie', 'Arshjoyat', 'Carli', 'Aieecia', 'Ronnie', 'Yelena', 'Abid', 'Prithvi', 'Ellenor', 'Shayla', 'Chala', 'Nelson', 'Chaitanya', 'Stacey', 'Karis', 'Mariyah', 'Jamie', 'Breeanna', 'Kendall', 'Adelaide', 'Aimiee', 'Manwen', 'Dennys', 'Benjamyn', 'Reynelle', 'Jesuseun', 'Malik', 'Brigitte', 'Farah', 'Youcef', 'Ruqayah', 'Mili', 'Caitaidh', 'Raul', 'Katelyn', 'Yakup', 'Cohan', 'Lylakay', 'Dougray', 'Silvana', 'Roxanne', 'Tanchoma', 'Andie', 'Aarman', 'Kyalah', 'Tayyab', 'Malikah', 'Bo', 'Oona', 'Daniil', 'Wardah', 'Jessamy', 'Karly', 'Tala', 'Ilyaas', 'Maram', 'Ruaidhri', 'Donna', 'Liza', 'Aileigh', 'Muzzammil', 'Chi', 'Serafina', 'Abbas', 'Rhythm', 'Jonny', 'Niraj', 'Ciara', 'Kylen', 'Demmi', 'Christianna', 'Tanzina', 'Brianna', 'Kevyn', 'Hariot', 'Maisie', 'Naideen', 'Nicolas', 'Suvi', 'Areeb', 'Kiranpreet', 'Rachna', 'Umme', 'Caela', 'Miao', 'Tansy', 'Miah', 'Luciano', 'Karolina', 'Rivan', 'Cavan', 'Benn', 'Haydn', 'Zaina', 'Rafi', 'Ahmad']
<a href="http://py4e-data.dr-chuck.net/known_by_Stacey.html">Stacey</a>
1 http://py4e-data.dr-chuck.net/known_by_Ahmad.html
['Tilhi', 'Rachel', 'Latif', 'Deryn', 'Pawel', 'Anna', 'Blake', 'Brehme', 'Jo', 'Laurajane', 'Khayla', 'Declyan', 'Graidi', 'Foosiya', 'Nabeeha', 'Otilija', 'Dougal', 'Adeena', 'Alfie', 'Angali', 'Lilah', 'Saadah', 'Kelam', 'Kensey', 'Tabitha', 'Peregrine', 'Abdisalam', 'Presley', 'Allegria', 'Harish', 'Arshjoyat', 'Hussan', 'Sammy', 'Ama', 'Leydon', 'Anndra', 'Anselm', 'Logyne', 'Fion', 'Jacqui', 'Reggie', 'Mounia', 'Pedro', 'Hussain', 'Raina', 'Inka', 'Shaylee', 'Riya', 'Phebe', 'Uzayr', 'Isobella', 'Abdulkadir', 'Johndean', 'Charlotte', 'Moray', 'Saraah', 'Liana', 'Keane', 'Maros', 'Robi', 'Rowanna', 'Wesley', 'Maddox', 'Annica', 'Oluwabukunmi', 'Jiao', 'Nyomi', 'Hamish', 'Bushra', 'Marcia', 'Rimal', 'Kaceylee', 'Limo', 'Dela', 'Cal', 'Rhudi', 'Komal', 'Stevey', 'Amara', 'Nate', 'Roma', 'Fatou', 'Marykate', 'Abiya', 'Bay', 'Kati', 'Carter', 'Niraj', 'Maisum', 'Jaz', 'Coban', 'Harikrishna', 'Armani', 'Muir', 'Ilsa', 'Benjamyn', 'Russel', 'Emerson', 'Rehaan', 'Veronica']
<a href="http://py4e-data.dr-chuck.net/known_by_Adeena.html">Adeena</a>

For å unngå dette problemet, må du sette urlpå neste løkke til det 18. oppføring:

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl
#import re
term_counter = (0)
file = list()
#regex = list()
# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

url = input('Enter - ')
for _I in range(7) :
    #print(_I, url) <- this prints out the _I value of the loop and the url used in this round
    html = urllib.request.urlopen(url, context=ctx).read()
    soup = BeautifulSoup(html, 'html.parser')
    tags = soup('a')
    #print([item.contents[0] for item in tags]) <- this prints out a list of all names on this page
    file = list()
    for tag in tags :
        file.append(tag)
        #this is the last url you used in your code for the next _I loop
        url = tag.get('href') 
    #so we have to redefine url as the 18th entry in your list for the next _I loop round
    url = file[17].get("href")
    print("The next url we will use is {}".format(url))
Svarte 02/09/2018 kl. 09:42
kilden bruker

stemmer
0

Du kan prøve dette:

import bs4
import requests

url = 'http://py4e-data.dr-chuck.net/known_by_Shannon.html'

for I in range(7) :
    session = requests.get(url)
    soup = bs4.BeautifulSoup(session.text, "html.parser")
    target_list = soup.findAll("li")[17]
    href = target_list.find("a").get("href")
    link_name = target_list.find("a").text

    if(I == 6):
        print('Solution is ' + link_name)
    else:
        print('Name is: ' + link_name)
        print('Going to web is: ' + href)
        url = href

Svaret vil være den siste LINK_NAME skrives ut.

REDIGERE:

skriv bildebeskrivelse her

Svarte 02/09/2018 kl. 09:42
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more