获取到静态网页后怎么处理a标签的href属性中的./ 和../ ,将链接处理成可以直接打开
时间: 2024-04-06 07:30:34 浏览: 42
获取到静态网页后,如果a标签的href属性中含有相对路径(./ 和 ../),我们需要将这些相对路径转换成绝对路径,才能正确地打开链接。下面是一种处理相对路径的方法:
1. 获取当前网页的URL。
在Python中,可以使用`urllib.parse`库中的`urlparse`方法获取当前网页的URL,例如:
```
from urllib.parse import urlparse
url = 'http://www.example.com/path/index.html'
parsed_url = urlparse(url)
base_url = parsed_url.scheme + '://' + parsed_url.netloc
```
解释一下,`urlparse`方法会将URL解析成6个部分(协议、域名、路径、参数、查询、锚点),我们只需要用`scheme`和`netloc`组合成基础URL,即`http://www.example.com`。
2. 处理相对路径。
对于`./`,直接将其替换成当前路径即可;对于`../`,需要将其替换成上一级路径。例如,当前路径为`http://www.example.com/path/index.html`,需要打开的链接为`../about.html`,则需要将其替换成`http://www.example.com/about.html`。
```
href = '../about.html'
if href.startswith('./'):
href = base_url + parsed_url.path + href[1:]
elif href.startswith('../'):
href = base_url + '/' + '/'.join(parsed_url.path.split('/')[:-1]) + '/' + href[3:]
else:
href = base_url + href
```
解释一下,如果链接以`./`开头,则将其替换成当前路径(即`base_url + parsed_url.path`加上去除`./`后的路径);如果链接以`../`开头,则将其替换成上一级路径(即`base_url`加上去除`../`后的路径);否则,直接使用链接本身。
3. 打开链接。
处理完相对路径后,就可以直接使用Python的`requests`库或者其他下载工具打开链接了。
```
import requests
response = requests.get(href)
print(response.text)
```
综上所述,这是一种可以处理相对路径的方法,可以将相对路径转换成绝对路径,从而正确地打开链接。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)