Nie mogę znaleźć, jak uzyskać pełny adres strony internetowej: Dostaję na przykład "/ Wiki / Main_page" zamiast "https://en.wikipedia.org/wiki / Main_page ". Nie mogę po prostu dodać adresu URL do linku, ponieważ dałoby: "HTTPS: // en. wikipedia.org/wiki/wkik/wiki/main_page ", który jest nieprawidłowy. Moim celem jest, aby działało na każdą stronę internetową, więc szukam rozwiązania ogólnego.

Oto kod:

from bs4 import BeautifulSoup
import requests

url ="https://en.wikipedia.org/wiki/WKIK"
r  = requests.get(url)
data = r.text
soup = BeautifulSoup(data)

for link in soup.find_all('a', href=True):
    print "Found the URL:", link['href']

Oto część tego, co powraca:

>Found the URL: /wiki/WKIK_(AM)
>Found the URL: /wiki/WKIK-FM
>Found the URL: /wiki/File:Disambig_gray.svg
>Found the URL: /wiki/Help:Disambiguation
>Found the URL: //en.wikipedia.org/w/index.php?
>title=Special:WhatLinksHere/WKIK&namespace=0
1
Anh-Vu Nguyen 25 czerwiec 2017, 14:44

3 odpowiedzi

Najlepsza odpowiedź

Gdy bierzesz linki z elementu, atrybut href. - prawie zawsze będziemiemy link lubi / wiki / main_page.

Ponieważ adres URL bazowy jest zawsze taki sam "https://en.wikipedia.org". Więc to, czego potrzebujesz, to:

base_url = 'https://en.wikipedia.org'
search_url ="https://en.wikipedia.org/wiki/WKIK"
r  = requests.get(search_url)
data = r.content
soup = BeautifulSoup(data)

for link in soup.find_all('a', href=True):
    print ("Found the URL:", link['href'])
    if link['href'] != '#' and link['href'].strip() != '':
       final_url = base_url + link['href']
1
Marine Fighter 25 czerwiec 2017, 12:50

Pozostałe odpowiedzi mogą wpłynąć na problemy z pewnymi względnymi adresami URL, takimi jak te, które obejmują okresy (../page).

Biblioteka Pythona {x0} URL:

requests.compat.urljoin(currentPage, link)

Więc jeśli jesteś na https://en.wikipedia.org/wiki/WKIK i jest link na stronie z href /wiki/Main_Page, ta funkcja zwróciłaby https://en.wikipedia.org/wiki/Main_Page.

1
Pikamander2 29 styczeń 2019, 08:41

Może coś takiego pasuje:

for link in soup.find_all('a', href=True):
if 'en.wikipedia.org' not in link['href']:
    print("Found the URL:", 'https://en.wikipedia.org'+link['href'])
elif 'http' not in link['href']:
    print("Found the URL:", 'https://'+link['href'])
else:    
    print("Found the URL:", link['href'])
1
Dmitriy Fialkovskiy 25 czerwiec 2017, 12:07