Hướng dẫn python get base url - python lấy url cơ sở

Tôi đang cố gắng xác định cơ sở của URL, hoặc mọi thứ ngoài trang và tham số. Tôi đã thử sử dụng Split, nhưng có cách nào tốt hơn là chia nó thành từng mảnh không? Có cách nào tôi có thể loại bỏ mọi thứ từ lần cuối '/' không?

Cho điều này: http://127.0.0.1/asdf/login.php

Tôi muốn: http://127.0.0.1/asdf/

hỏi ngày 25 tháng 2 năm 2016 lúc 1:13Feb 25, 2016 at 1:13

Hướng dẫn python get base url - python lấy url cơ sở

6

Cách tốt nhất để làm điều này là sử dụng

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
2.

Từ các tài liệu:

Mô -đun đã được thiết kế để phù hợp với RFC Internet trên các bộ định vị tài nguyên đồng nhất tương đối. Nó hỗ trợ các sơ đồ url sau:

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
3,
>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
4,
>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
5,
>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
6, ____17 ,
from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/
5,
from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/
6,
from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/
7,
from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/
8.

Bạn muốn làm điều gì đó như thế này bằng cách sử dụng URLSplit và UrlunSplit:

from urllib.parse import urlsplit, urlunsplit

split_url = urlsplit('http://127.0.0.1/asdf/login.php?q=abc#stackoverflow')

# You now have:
# split_url.scheme   "http"
# split_url.netloc   "127.0.0.1" 
# split_url.path     "/asdf/login.php"
# split_url.query    "q=abc"
# split_url.fragment "stackoverflow"

# Use all the path except everything after the last '/' 
clean_path = "".join(split_url.path.rpartition("/")[:-1])

# "/asdf/"

# urlunsplit joins a urlsplit tuple
clean_url = urlunsplit(split_url)

# "http://127.0.0.1/asdf/login.php?q=abc#stackoverflow"


# A more advanced example 
advanced_split_url = urlsplit('http://foo::5000/asdf/login.php?q=abc#stackoverflow')

# You now have *in addition* to the above:
# advanced_split_url.username   "foo"
# advanced_split_url.password   "bar"
# advanced_split_url.hostname   "127.0.0.1"
# advanced_split_url.port       "5000"

Đã trả lời ngày 25 tháng 2 năm 2016 lúc 1:27Feb 25, 2016 at 1:27

Hướng dẫn python get base url - python lấy url cơ sở

Dalanmillerdalanmillerdalanmiller

3.3474 Huy hiệu vàng29 Huy hiệu bạc37 Huy hiệu đồng4 gold badges29 silver badges37 bronze badges

3

Vâng, đối với một, bạn chỉ có thể sử dụng

from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/
9:

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'

Nó không rõ ràng cho các URL, nhưng nó xảy ra với chúng (ngay cả trên Windows), nó không để lại dấu vết dấu vết (bạn có thể tự thêm nó trở lại).

Bạn cũng có thể muốn xem

base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
0 để phân tích phân tích hạt mịn hơn; Nếu URL có chuỗi truy vấn hoặc băm liên quan, bạn muốn phân tích thành từng mảnh, cắt phần
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
1 được trả về bằng cách phân tích cú pháp, sau đó tái tổ hợp, do đó đường dẫn được cắt mà không mất thông tin truy vấn và băm.

Cuối cùng, nếu bạn muốn tách thành phần sau lần cắt cuối cùng, bạn có thể thực hiện

base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
2 với
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
3 của
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
4 và giữ thành phần đầu tiên:

>>> 'http://127.0.0.1/asdf/login.php'.rsplit('/', 1)[0]
'http://127.0.0.1/asdf'

Đã trả lời ngày 25 tháng 2 năm 2016 lúc 1:18Feb 25, 2016 at 1:18

Hướng dẫn python get base url - python lấy url cơ sở

ShadowrangershadowrangerShadowRanger

133K12 Huy hiệu vàng172 Huy hiệu bạc247 Huy hiệu Đồng12 gold badges172 silver badges247 bronze badges

4

Có giải pháp ngắn nhất cho Python3 với việc sử dụng thư viện Urllib (không biết nếu nhanh nhất):

from urllib.parse import urljoin

base_url = urljoin('http://127.0.0.1/asdf/login.php', '.')
# output: http://127.0.0.1/asdf/

Hãy nhớ rằng thư viện Urllib hỗ trợ tương thích URI/URL với từ khóa của HTML. Điều đó có nghĩa là URI/URL kết thúc với '/' có nghĩa là khác nhau mà không giống như ở đây https://stackoverflow.com/a/1793282/7750840/:

base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/

Đây là liên kết đến Urllib cho Python: https://pythonprogramming.net/urllib-tutorial-python-3/

Đã trả lời ngày 12 tháng 7 năm 2019 lúc 12:37Jul 12, 2019 at 12:37

Bukasbukasbukas

1512 Huy hiệu bạc2 Huy hiệu đồng2 silver badges2 bronze badges

Đồng ý rằng cách tốt nhất để làm điều đó là với

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
2

Cụ thể, bạn có thể phân tách URL bằng

base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
0 và sau đó thay thế mọi thuộc tính khác ngoài
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
7 và
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
8 bằng một chuỗi trống. Nếu bạn muốn giữ thuộc tính
base_url = urljoin('http://127.0.0.1/asdf/', '.')
# output: http://127.0.0.1/asdf/

base_url = urljoin('http://127.0.0.1/asdf', '.')
# output: http://127.0.0.1/
1 (như trong câu hỏi của bạn), bạn có thể làm như vậy với một bước phân tích cú pháp chuỗi bổ sung. Chức năng ví dụ dưới đây:

import urllib.parse
def base_url(url, with_path=False):
    parsed = urllib.parse.urlparse(url)
    path   = '/'.join(parsed.path.split('/')[:-1]) if with_path else ''
    parsed = parsed._replace(path=path)
    parsed = parsed._replace(params='')
    parsed = parsed._replace(query='')
    parsed = parsed._replace(fragment='')
    return parsed.geturl()

Examples:

>>> base_url('http://127.0.0.1/asdf/login.php', with_path=True)
'http://127.0.0.1/asdf'
>>> base_url('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1'

Đã trả lời ngày 31 tháng 12 năm 2019 lúc 17:51Dec 31, 2019 at 17:51

Rodmsrodmsrodms

3513 Huy hiệu bạc12 Huy hiệu Đồng3 silver badges12 bronze badges

Không cần sử dụng Regex, bạn chỉ có thể sử dụng

import urllib.parse
def base_url(url, with_path=False):
    parsed = urllib.parse.urlparse(url)
    path   = '/'.join(parsed.path.split('/')[:-1]) if with_path else ''
    parsed = parsed._replace(path=path)
    parsed = parsed._replace(params='')
    parsed = parsed._replace(query='')
    parsed = parsed._replace(fragment='')
    return parsed.geturl()
0:

>>> url = 'http://127.0.0.1/asdf/login.php'
>>> url.rsplit('/', 1)[0]
'http://127.0.0.1/asdf'

Đã trả lời ngày 25 tháng 2 năm 2016 lúc 1:19Feb 25, 2016 at 1:19

Hướng dẫn python get base url - python lấy url cơ sở

pp_pp_pp_

3.3874 Huy hiệu vàng18 Huy hiệu bạc27 Huy hiệu đồng4 gold badges18 silver badges27 bronze badges

Khi bạn sử dụng URLSplit, nó sẽ trả về một đối tượng Splitresult:

from urllib.parse import urlsplit
split_url = urlsplit('http://127.0.0.1/asdf/login.php')
print(split_url)

>>> SplitResult(scheme='http' netloc='127.0.0.1' path='/asdf/login.php' query='' fragment='') 

Bạn có thể tạo đối tượng splitresult () của riêng bạn và chuyển nó qua UrlunSplit. Mã này sẽ hoạt động cho nhiều phân tách URL, bất kể độ dài của chúng, miễn là bạn biết phần tử đường dẫn cuối cùng bạn muốn là gì.

from urllib.parse import urlsplit, urlunsplit, SplitResult

# splitting url:
split_url = urlsplit('http://127.0.0.1/asdf/login.php')

# editing the variables you want to change (in this case, path):    
last_element = 'asdf'   # this can be any element in the path.
path_array = split_url.path.split('/')

# print(path_array)
# >>> ['', 'asdf', 'login.php']

path_array.remove('') 
ind = path_array.index(last_element) 
new_path = '/' + '/'.join(path_array[:ind+1]) + '/'

# making SplitResult() object with edited data:
new_url = SplitResult(scheme=split_url.scheme, netloc=split_url.netloc, path=new_path, query='', fragment='')

# unsplitting:
base_url = urlunsplit(new_url)

Đã trả lời ngày 24 tháng 11 năm 2019 lúc 2:05Nov 24, 2019 at 2:05

Hướng dẫn python get base url - python lấy url cơ sở

Có được sự xuất hiện đúng nhất của chém; Sử dụng lát chuỗi thông qua vị trí đó trong chuỗi ban đầu. +1 giúp bạn chém cuối cùng vào cuối.+1 gets you that final slash at the end.

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
0

Đã trả lời ngày 25 tháng 2 năm 2016 lúc 1:19Feb 25, 2016 at 1:19

Hướng dẫn python get base url - python lấy url cơ sở

3.3874 Huy hiệu vàng18 Huy hiệu bạc27 Huy hiệu đồngPrune

Khi bạn sử dụng URLSplit, nó sẽ trả về một đối tượng Splitresult:14 gold badges57 silver badges76 bronze badges

1

Bạn có thể tạo đối tượng splitresult () của riêng bạn và chuyển nó qua UrlunSplit. Mã này sẽ hoạt động cho nhiều phân tách URL, bất kể độ dài của chúng, miễn là bạn biết phần tử đường dẫn cuối cùng bạn muốn là gì.

>>> os.path.dirname('http://127.0.0.1/asdf/login.php')
'http://127.0.0.1/asdf'
1

Đã trả lời ngày 24 tháng 11 năm 2019 lúc 2:05Aug 31, 2018 at 7:49

Hướng dẫn python get base url - python lấy url cơ sở

bzd111bzd111bzd111

Có được sự xuất hiện đúng nhất của chém; Sử dụng lát chuỗi thông qua vị trí đó trong chuỗi ban đầu. +1 giúp bạn chém cuối cùng vào cuối.3 silver badges5 bronze badges