Come risolvere i collegamenti relativi rotti a pagine web non in linea?
-
26-09-2019 - |
Domanda
ho scritto un semplice Python script per scaricare una pagina web per la visualizzazione offline. Il problema è che i relativi collegamenti sono rotti. Quindi il file non in linea "c: \ temp \ webpage.html" ha un href = "index.aspx", ma quando viene aperto in un browser si risolve a "file: /// C: /temp/index.aspx" invece di " http://myorginalwebsite.com/index.aspx ".
Quindi, immagino che avrei dovuto modificare il mio script per risolvere ciascuno dei relativi collegamenti in modo che punti al sito originale. C'è un modo più semplice? In caso contrario, qualcuno ha un po 'di codice Python di esempio che può fare questo? Sono un principiante Python in modo che qualsiasi puntatori sarà apprezzato.
Grazie.
Soluzione
Se si desidera solo il tuo link relativi a visitare il sito Web, è sufficiente aggiungere un tag base nella testa:
<base href="http://myoriginalwebsite.com/" />
Altri suggerimenti
lxml rende questo braindead semplice!
>>> import lxml.html, urllib
>>> url = 'http://www.google.com/'
>>> e = lxml.html.parse(urllib.urlopen(url))
>>> e.xpath('//a/@href')[-4:]
['/intl/en/ads/', '/services/', '/intl/en/about.html', '/intl/en/privacy.html']
>>> e.getroot().make_links_absolute()
>>> e.xpath('//a/@href')[-4:]
['http://www.google.com/intl/en/ads/', 'http://www.google.com/services/', 'http://www.google.com/intl/en/about.html', 'http://www.google.com/intl/en/privacy.html']
Da lì si può scrivere il DOM su disco come file.
Così si desidera controllare tutti i link che cominciano con http://
, ma quelle che non lo fanno si desidera aggiungere http://myoriginalwebsite.com
verso la parte anteriore della stringa, quindi prova per il collegamento?
Sembra abbastanza facile. O è il codice Python corretta hai problemi con?