我正在尝试与Instagram合作
所以,假设我有一个链接 https://www.instagram.com/p/Bn4Lmo_j0Jc/
我只想得到一个Bn4Lmo_j0jc
。我可以删除此ID和最后一个/
之前的所有内容
但是,如果我的链接看起来像这样呢: https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram 或此 https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson,因此没有我需要删除的确切字符数。解决这个问题的最简单方法是什么?
这个怎么样?
import urllib
url = 'https://www.instagram.com/p/Bn4Lmo_j0Jc/'
parts = urllib.parse.urlparse(url)
parts.path
'/p/Bn4Lmo_j0Jc/'
from urllib import parse
def getId(url):
return parse.urlparse(url).path[3:-1]
print(getId('https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson'))
print(getId('https://www.instagram.com/p/Bn4Lmo_j0Jc/'))
print(getId('https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram'))
输出:
Bn1GpYyBFSl
Bn4Lmo_j0Jc
Bn4Lmo_j0Jc
你可以在这里使用正则表达式。它还可以处理您的 url 是否在您关注的 ID 字段后有多个/p/
import re
a=['https://www.instagram.com/p/Bn1GpYyBFSl/?hl=en&taken-by=zaralarsson',
'https://www.instagram.com/p/Bn4Lmo_j0Jc/',
'https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram/p/12321']
[re.findall('/p/(w{1,})',i)[0] for i in a]
lst = link.split("/")
lst[-1] if not lst[-1].startswith("?") and lst[-1] else lst[-2]
其中link
是链接字符串。
(结果是lst
中的最后一个元素,如果它不是以?
开头并且不为空- 否则结果是最后一个元素,而是一个元素。
一致的格式
鉴于您将始终有一个 URL https://instagram.com/p/,您所需要的只是使用字符串解释器。
base_url = 'https://instagram.com/p/'
main = 'https://www.instagram.com/p/Bn4Lmo_j0Jc/?taken-by=instagram'
# remove your base url
# split on separator '/'
# select the ID in index [0]
main.replace(base_url,'').split('/')[0]
'Bn4Lmo_j0Jc'
用于循环
如果您有要提取和捕获的 URL 列表:
url_base = 'https://instagram.com/p/'
url_list = [url1,url2,url3]
id_list = []
for url in url_list:
id_list.append(url.replace(url_base,'').split('/')[0])