【发布时间】:2019-12-15 22:43:08
【问题描述】:
这些天我正在研究网络爬虫。在那个项目中,当我的爬虫收集网站中的链接时,一些 URL 类似于; about.html,/pages,#form-login,javascript:validate();,../help,../../,./。
我已经尝试过 urllib 的 urlparse 、 urljoin 和 os 模块的 join 函数。但是下面给出的是我项目中与问题相关的部分代码。
from urllib.parse import urlparse, urljoin
base_url = input('Enter base url : ')
def make_links(link):
u = urlparse(link)
if link[:3] == 'www':
link = u['scheme'] + link
elif link[:1] == '/':
link = base_url + link
elif link[:3] == '../':
link = urljoin(base_url, link)
elif link[:2] == './':
link = urljoin(base_url, link)
link = base_url + '/' + link
print(link)
while True:
i = input("Enter your url : ")
if i == 'exit':
break
else:
make_links(i)
我除了将用户输入的相对URL的输出与用户输入的基本URL相对。当用户输入一个绝对 URL 作为base_url,然后当用户输入相对 URL 时,输出应该是用户可以通过浏览器访问网页的绝对 URL 路径。该程序还应支持任何类型的相对 URL。如果您想知道相对 URL 的表示方式,请参考这里,
http://webreference.com/html/tutorial2/3.html
当程序遇到
javascript:alert('foo-bar')之类的 URL 时,它不应该执行 javascript ???? ??? ????
【问题讨论】:
-
您有用于测试的示例用户输入吗?
标签: python url relative-path