【发布时间】:2020-09-23 11:18:07
【问题描述】:
我需要将 HTML 页面中的相对 URL 转换为绝对 URL。我正在使用 pyquery 进行解析。
例如,这个页面http://govp.info/o-gorode/gorozhane在源代码中有相对URL,比如
<a href="o-gorode/gorozhane?page=2">2</a>
(这是页面底部的分页链接)。我正在尝试使用make_links_absolute():
import requests
from pyquery import PyQuery as pq
page_url = 'http://govp.info/o-gorode/gorozhane'
resp = requests.get(page_url)
page = pq(resp.text)
page.make_links_absolute(page_url)
但这似乎破坏了相关链接:
print(page.find('a[href*="?page=2"]').attr['href'])
# prints http://govp.info/o-gorode/o-gorode/gorozhane?page=2
# expected value http://govp.info/o-gorode/gorozhane?page=2
如您所见,最终 URL 中间有双倍的o-gorode,肯定会产生 404 错误。
pyquery 内部使用标准urllib.parse 模块中的urljoin,有点像这样:
from urllib.parse import urljoin
urljoin('http://example.com/one/', 'two')
# -> 'http://example.com/one/two'
没关系,但是有很多网站都有,嗯,不寻常具有完整路径的相对链接。
在这种情况下,urljoin 会给我们一个无效的绝对链接:
urljoin('http://govp.info/o-gorode/gorozhane', 'o-gorode/gorozhane?page=2')
# -> 'http://govp.info/o-gorode/o-gorode/gorozhane?page=2'
我认为这样的相对链接不是很有效,但谷歌浏览器处理它们没有问题;所以我想这在网络上是很正常的。
有什么建议可以解决这个问题吗?我尝试了furl,但它执行相同的连接。
【问题讨论】:
标签: python relative-url pyquery