【问题标题】:check if url is relative to website检查 url 是否相对于网站
【发布时间】:2018-09-26 18:13:43
【问题描述】:

我有来自不同网站的 URL 的大 DataFrame。我想检查它与哪个网站相关。定义网站的特征是它的根 url 从额外信息中清除(例如,对于 http://www.agpu.net/,根 url 将是 agpu.net

所以主要目标是找到与给定 url 相关的根。例如,http://www.mordgpi.ru/ 应该得到标签 mordgpi.ru 而不是 gpi.ru。这也不应该仅适用于根网页 url,例如,https://www.mordgpi.ru/our-life/news/46/55116/

url 的数据集如下所示:

url
---------------------
http://pnu.edu.ru/ru/
https://www.dvfu.ru/
http://donstu.ru/
http://www.elsu.ru/
http://ivgpu.com/
http://ivanovo.ac.ru/
http://www.isuct.ru/  

对于根:

root
-------------
pnu.edu.ru/ru
dvfu.ru
donstu.ru
elsu.ru
ivgpu.com
ivanovo.ac.ru
isuct.ru

对于给定的 url,我尝试按照以下方式获取 root,但效果不佳:

root = roots['root'].str.lower().apply(lambda x: x in url).to_frame()
root = root[root.root]

我可以使用正则表达式或其他方式实现这一点吗?感谢任何帮助

【问题讨论】:

  • 看起来这个网站 pnu.edu.ru/ru 的结构与其他网站不同,因为它的末尾有额外的“/ru”,所以它会遵循单独的约定?跨度>
  • @Turo 我想_root_ 应该有一些规则,比如http(s)://(www.)_root_(/)(_smth_else_) -> _root_
  • 我只是想注意你所说的 root 在第一个示例中与其余 6 个具有不同的结构。所以这将是 2 种不同的正则表达式方法。
  • 对于像ac.ru 这样的顶级域名,只有当您拥有允许的顶级域名列表时,没有规则可以使用文本处理工具将域名的第一部分与域名区分开来。

标签: python regex pandas http url


【解决方案1】:

您可以在 python 2.7 中使用 urlparse 或在 python 3+ 中使用 urllib.urlparse

from urllib import parse
split = parse.urlsplit(url)
netloc = split.netloc
path = split.path
if netloc.startswith('www.'):
    netloc = netloc[4:]
print(netloc + path.rstrip('/'))

通过所有测试用例。

我使用urllib 的原因是因为当您有长查询字符串和高级网址格式(包括端口等)时,正则表达式可能很难看。我让urllib 处理它,以便您可以轻松获取netlocpath

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2013-05-22
    • 2015-05-26
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多