Como corrigir links relativos quebrados em páginas da web offline?
-
26-09-2019 - |
Pergunta
Eu escrevi um script python simples para baixar uma página da web para visualização offline. O problema é que os links relativos estão quebrados. Portanto, o arquivo offline "C: temp webpage.html" possui um href = "index.aspx", mas quando aberto em um navegador, ele resolve "arquivo: /// c: /temp/index.aspx" em vez de "http://myorginalwebsite.com/index.aspx".
Então, imagino que teria que modificar meu script para corrigir cada um dos links relativos, para que ele aponte para o site original. Existe uma maneira mais fácil? Caso contrário, alguém tem algum código Python de amostra que pode fazer isso? Eu sou um novato em Python para que todos os ponteiros sejam apreciados.
Obrigado.
Solução
Se você apenas deseja que seus links relativos consultem o site, basta adicionar uma tag base na cabeça:
<base href="http://myoriginalwebsite.com/" />
Outras dicas
lxml simplifica este BrainDead!
>>> 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']
A partir daí, você pode escrever o DOM para disco como um arquivo.
Então você quer verificar todos os links que começam com http://
Mas qualquer um que você não queira anexar http://myoriginalwebsite.com
para a frente da string e depois teste a conexão?
Parece fácil o suficiente. Ou é o código Python adequado que você está tendo problemas?