链接分享的简单思考

链接分享可以说是一个非常常用的功能了,本次网页链接分享做一些简单的探索;

基本链接分享

最基本的链接分享功能很简单,
场景:用户通过发送链接给其他人分享当前页面
解决方案:这种分享不涉及任何逻辑,直接复制浏览器地址栏中的链接即可;

带跳转功能的链接

  • 场景:有一个页面很长,用户滚轮滚了半天到了一个页面的中部,希望将当前的页面以及当前页面的位置分享给其他人;

  • 分析在页面中添加适当的锚点, 也就是在适当的位置为 html标签设置id,如下

    <p id="test"></p>
    

这样就可以通过在链接默认添加 ‘#’+id作为跳转链接了
http://url.com#test

  • 解决方案:预先在页面中设置好锚点,分享时在分享链接中加上’#’+id,这种也一般直接复制浏览器地址栏链接即可

带页面逻辑的链接分享

  • 场景:用户打开了一个据由较为复杂逻辑的页面,进行一些如条件筛选,编辑等操作后,希望将编辑后的页面分享给其他用户
  • 分析:
    • 这个场景下,一般都需要有一个账号密码系统来保存用户的操作结果,那么就意味着,其他用户无法访问当前用户的操作数据(否则用户隐私还如何保障呢?)
    • 更为复杂的是,用户分享了页面后,继续进行其他操作,但是希望分享之后的操作不会影响之前分享的页面
  • 思路:既然有了账号系统,并且页面的内容是随着用户的操作而改变的,那么我们可以将链接分为两部分:页面操作,在用户分享页面时,将当前的操作行为记录下来作为参数添加到链接中,这样其他用户打开链接时,自动重复一遍该操作即可
  • 缺点:若页面的操作行为较为复杂,链接参数会较多,导致链接较长,影响用户体验

带页面逻辑的短链接分享

  • 场景:既需要携带用户操作行为,又希望有一个较短的链接
  • 思路:
    • 可以先使用一个长链接,然后将该长连接存入数据库,将数据库key值作为链接参数, 打开链接时通过数据库Key值获取真实的长链接
      http://url.com?key=123456
    • 也可以通过将用户操作记录下来,存入数据库中,然后打开链接时使用key值获取用户操作记录

    这里提到的用户操作记录,本质上是页面逻辑的参数

  • 注意:这里记录用户操作时,不要使用递增的数据库记录数,这样会导致链接中的参数较为有规律,容易导致信息泄露,简单点的办法是使用用户操作记录的信息生成hash值作为key值
  • 拓展:这样生成的链接还是较长的,如 www.baidu.com?key=12345678,可以再短一些吗?答案是可以;我们生成的hash值,本质上就是一个10进制的数值,若我们将他转为更高进制的表示方式,那么单个字符可以表示的数值就越大,对应生成的高进制hash值就越短,比如可以使用 0-9a-zA-Z作为62进制编码,将hash值转为一个更短的字符串

带账号验证的链接分析

  • 场景: 用户分享链接后需要密码进行验证,如百度网盘
  • 思路:基本思路和上面的 带页面逻辑的短链接分享一致,只是分享的链接先定向到一个公共的验证页面,然后这个验证页面依据参数跳转到真实的页面
### 小红书分享链接中提取用户ID的方法 对于希望从小红书分享链接中解析并提取用户ID的需求而言,了解小红书URL结构以及处理这些URL的方式至关重要。通常情况下,小红书的分享链接会包含特定参数来标识不同的资源对象,比如用户、帖子或者商品等。 在分析这类链接时,重点在于识别那些能够唯一表示用户的字段。根据已有的实践案例,在涉及小红书API交互或是通过其他方式获取的数据包里,存在一些关键性的标识符用于区分不同实体[^3]。例如`qr_id`和`code`这两个属性虽然主要用于描述二维码的信息,但是它们的存在形式——作为唯一的动态生成字符串——给人们提供了思考的方向:类似的机制也可能应用于定义用户的身份标识。 为了实现从小红书分享链接中抽取用户ID的目标,可以考虑采用如下策略: 1. **正则表达式匹配**:利用Python中的re模块编写模式串去查找可能代表用户身份的部分。假设目标链接遵循某种固定的格式,则可以通过预设好的规则快速定位所需片段。 2. **解析查询参数**:如果用户ID是以GET请求的一部分出现在URL路径后面的话(形如?uid=12345),那么可以直接访问query string部分并通过字典映射得到对应的value值。 下面给出一段简单的演示代码,该函数接收一个完整的HTTP(S) URL作为输入,并尝试从中分离出潜在的用户ID成分: ```python import re from urllib.parse import urlparse, parse_qs def extract_user_id_from_url(url): parsed_result = urlparse(url) # 方法一:基于path路径进行简单切割判断 path_segments = parsed_result.path.strip('/').split('/') possible_uids_by_path = [segment for segment in path_segments if re.match(r'^\d+$', segment)] # 方法二:针对query component里的特殊key-value pair query_parameters = parse_qs(parsed_result.query) explicit_uid_keys = ['user_id', 'id'] # 假定某些平台会在query里面明示这样的键名 possible_uids_by_query = [] for key in explicit_uid_keys: if key in query_parameters and query_parameters[key]: possible_uids_by_query.extend(query_parameters[key]) all_possible_ids = set(possible_uids_by_path + possible_uids_by_query) return list(all_possible_ids) if __name__ == "__main__": test_urls = [ "https://www.xiaohongshu.com/user/profile/abcdefg", "http://example.com/?user_id=7890&other_param=value" ] for url in test_urls: print(f"From {url}, found user IDs: ", extract_user_id_from_url(url)) ``` 上述方法并非绝对可靠,因为实际应用环境中URL的设计可能会更加复杂多变;然而这提供了一个基本框架供进一步优化调整。值得注意的是,当涉及到自动化抓取第三方网站内容的行为时,请务必遵守相关法律法规和服务条款的规定[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值