将三个URL组件合并为一个URL

时间:2019-03-31 18:38:09

标签: python url

我试图编写一个将URL的三个组成部分(协议,位置和资源)组合到一个URL中的函数。

我有以下代码,它只能部分工作,返回的URL仅包含协议和资源组件,而没有位置组件。

代码:

from urllib.parse import urlparse
import os
def buildURL(protocol, location, resource):
    return urllib.parse.urljoin(protocol, os.path.join(location, 
    resource))

Example: buildURL('http://', 'httpbin.org', '/get')

这将返回http:///get。我试图调试它,以允许在URL中使用location参数。它应该返回http://httpbin.org/get

如何成功构建URL?

2 个答案:

答案 0 :(得分:2)

这是因为您将/get放在了os.path.join中。您应该像buildURL('http://', 'httpbin.org', 'get')这样称呼它。 os.path.join会将/视为从基本位置的根链接的绝对路径,它是join函数的第一个参数:location

答案 1 :(得分:1)

您根本不应该在这里使用from selenium import webdriver from selenium.webdriver import Firefox from selenium.webdriver.firefox.options import Options # Setup browser for options = Options() profile = webdriver.FirefoxProfile() driver = Firefox(executable_path='geckodriver', options=options, firefox_profile=profile) driver.get("https://agar.io") #Xpaths PLAY_BUTTON_XPATH = '//*[@id="play"]' PROXY_DENIES_CONNECTION = '//*[@id="errorLongContent"]' TIMEOUT_XPATH1 = '//*[@id="errorTryAgain"]' #checking for error def mainfunction(): while True: print("Starting") try: if driver.find_element_by_xpath(PROXY_DENIES_CONNECTION).is_enabled() and driver.find_element_by_xpath( PROXY_DENIES_CONNECTION).is_displayed(): print("Proxy denies connection") driver.quit() except: pass try: if driver.find_element_by_xpath(TIMEOUT_XPATH1).is_enabled() and driver.find_element_by_xpath( TIMEOUT_XPATH1).is_displayed(): print("Time out detected") driver.quit() except: pass try: if driver.find_element_by_xpath(PLAY_BUTTON_XPATH).is_enabled() and driver.find_element_by_xpath( PLAY_BUTTON_XPATH).is_displayed(): print("Agar.io server is loaded") break except: pass else: continue mainfunction() 。该模块用于文件系统路径,例如处理诸如os.path/usr/bin/bash之类的事情。

不是用于构建URL。它们不受用户主机操作系统的影响。

相反,请使用C:\Documents and Settings\User\中的urlunparse()urlunsplit()

urllib.parse