重定向抓取网页中的所有链接



基本思想是Web应用程序获取外部网站并覆盖一些JavaScript,以获得额外的功能。

但是,我获取的网页上的链接不应导航到外部网站,而应保留在我的网站上。我认为使用正则表达式(或类似方法)转换链接效率低下,因为它不会涵盖动态生成的链接,例如 AJAX 请求或其他 JavaScript 功能。 所以基本上我似乎找不到的是一种更改/拦截/重定向抓取网站所有链接的方法。

那么,什么是更改/拦截抓取网站动态生成的链接的(好)方法?最好是python方法。

除非您更改抓取网页(包括动态网页)上的 URL,否则您无法按照您的要求进行操作。

如果向客户提供一个带有指向外部站点的URL的网页,您的网站将没有机会拦截或更改它,因为他们的浏览器将导航离开甚至不转到您的网站(尽管不完全正确 - 继续阅读)。 从理论上讲,您可以将事件处理程序附加到所有链接(在提供抓取的页面之前),甚至可以拦截动态创建的链接(通过解析它们的 javascript),但这可能非常困难。 您还必须停止更改URL的其他方法(例如标头重定向)。

客户端

本身可以在其浏览器中使用代理(影响所有传出 URL),但这是客户端决定所有流量都应通过代理服务器路由。 您不能代表他们执行此操作(无需实际更改 URL)。


编辑:由于OP删除了使用Web代理的建议,因此答案详细信息略有变化,但最终结果是相同的。 出于所有实际目的,这几乎是不可能的。

你可以尝试在页面上解析javascript,并在某些页面上取得成功(或者可能使用足够复杂的脚本来处理许多典型页面);但是在页面上加入一个小eval,你需要自己的JavaScript引擎用javascript编写,以尝试找出页面上每个可能的外部请求。 ...即便如此,你也做不到。

基本上,给我一个脚本,

有人说它可以解析任何网页(包括javascript)来拦截任何外部调用,我会给你一个这个脚本不起作用的网页。免责声明:我说的是拦截链接,但让网站正常运行之后......而不仅仅是解析页面以完全删除所有JavaScript。

其他人可能能够为您提供有时在某些网页上有效的答案 - 也许这对您的目的来说已经足够了。

另外,您是否考虑过页面上的大多数javascript不是嵌入的,而是通过<script>标签加载的,或者甚至可能从原始服务器动态加载。 我假设您要区分"从原始服务器加载的内容,以使页面正常运行并正确显示"与"从原始服务器加载的内容以进行其他操作"。 您的程序如何"知道"这一点?

您可以尝试解析页面并删除所有javascript...但即使这样也会非常困难,因为仍然有棘手的方法可以解决这个问题。

最新更新