J'essaie d'obtenir tous les href d'un code HTML et de le stocker dans une liste pour un traitement futur tel que celui-ci:
Exemple d'URL: www.example-page-xl.com
<body>
<section>
<a href="/helloworld/index.php"> Hello World </a>
</section>
</body>
J'utilise le code suivant pour répertorier les href:
import bs4 as bs4
import urllib.request
sauce = urllib.request.urlopen('https:www.example-page-xl.com').read()
soup = bs.BeautifulSoup(sauce,'lxml')
section = soup.section
for url in section.find_all('a'):
print(url.get('href'))
Cependant, je voudrais stocker l'URL sous: www.example-page-xl.com/helloworld/index.php et pas seulement le chemin relatif qui est /helloworld/index.php
L'ajout/la jonction de l'URL avec le chemin relatif n'est pas nécessaire car les liens dynamiques peuvent varier lorsque je joins l'URL et le chemin relatif.
En un mot, je voudrais gratter l'URL absolue et non les chemins relatifs seuls (et sans se joindre)
Dans ce cas ( urlparse.urljoin vous aide. Vous devez modifier votre code comme ceci-
import bs4 as bs4
import urllib.request
from urlparse import urljoin
web_url = 'https:www.example-page-xl.com'
sauce = urllib.request.urlopen(web_url).read()
soup = bs.BeautifulSoup(sauce,'lxml')
section = soup.section
for url in section.find_all('a'):
print urljoin(web_url,url.get('href'))
ici urljoin gère les chemins absolus et relatifs.
urllib.parse.urljoin () pourrait aider. Il fait une jointure, mais il est intelligent et gère les chemins relatifs et absolus. Notez que c'est python 3 code.
>>> import urllib.parse
>>> base = 'https://www.example-page-xl.com'
>>> urllib.parse.urljoin(base, '/helloworld/index.php')
'https://www.example-page-xl.com/helloworld/index.php'
>>> urllib.parse.urljoin(base, 'https://www.example-page-xl.com/helloworld/index.php')
'https://www.example-page-xl.com/helloworld/index.php'