【问题标题】:How to find all (possibly relative) urls on a website?如何在网站上找到所有(可能是相对的)网址?
【发布时间】:2020-06-10 21:54:48
【问题描述】:

作为一项编程练习,我正在制作一个小型 Python 工具来在本地下载整个网站。为了能够在本地浏览网站,我需要将所有 URL 转换为相对 URL。否则,资源文件(.js、.css)将从原始网站下载,而不是使用本地下载的版本。由于我需要重写 URL,我想我也可以更改文件层次结构。这导致了这个稍微更笼统的问题:

我怎样才能找到网站中的所有 URL? 基于 http://domain.tld/path 的正则表达式不会删除它,因为 href 属性可能包含相对 URL。

到目前为止,我已经确定了以下几点:

HTML

  • href=<url>(引用)
  • src=<url>(引用)
  • srcset=<list>
  • action=<url>(引用)
  • background=<url>(引用)

CSS

  • url('<url>')url(<url>)(可以引用也可以不引用)
  • @import(<url>)

JS

  • 对于 JS,我认为不存在完美的解决方案。使用正则表达式查找完整 URL 似乎是唯一的方法(例如 http://example.tld/path

[编辑] 另请参阅 this post 以获取一些正则表达式以查找 url。不完整,因为那里没有使用srcset

【问题讨论】:

  • ^(?!mailto:)(?:(?:https?|ftp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::\d{2,5})?(?:\/[^\s]*)?$
  • <a href="//example.com/index.html">link</a>@Edward

标签: html regex url web-scraping w3c


【解决方案1】:

也许是一个好的开始?

mech-dump --links 'https://stackoverflow.com/questions/62313765

检索:

  • 邮寄给
  • http(s) 链接
  • 图片

此命令与 模块一起安装:WWW::Mechanize

基于 Debian 的发行版的包 libwww-mechanize-perl

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2013-05-24
    • 1970-01-01
    • 2015-05-07
    • 2014-10-21
    • 2020-11-05
    相关资源
    最近更新 更多