我需要将相对URL从HTML页面转换为绝对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的中间有一个双倍的^ {CD2>},肯定会产生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'
我相信这样的相对链接不是很有效,但谷歌Chrome在处理它们方面没有问题;所以我想这在网络上是很正常的
如何解决这个问题有什么建议吗?我尝试了^{
在这种情况下,相关页面包含
指示浏览器使用此选项解析任何相对链接。
<base>
元素是可选的,但如果它存在,则必须使用它而不是页面的实际URL为了像浏览器那样操作,请提取base href并在
make_links_absolute()
中使用它印刷品
这似乎是正确的
相关问题 更多 >
编程相关推荐