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

时间:2013-11-13 15:21:18

标签: python proxy web-scraping

基本思想是网络应用程序获取外部网站并将其覆盖一些JavaScript,以获得更多功能。

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

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

1 个答案:

答案 0 :(得分:2)

除非您更改已删除网页上的网址(包括动态网页),否则您无法按照自己的要求进行操作。

如果客户端提供的网页指向外部网站,则您的网站将无法拦截或更改此网站,因为他们的浏览器无需访问您的网站即可离开(不是严格要求 - 阅读)。从理论上讲,你可以将事件处理程序附加到所有链接(在提供被抓取的页面之前),甚至拦截动态创建的(通过解析它们的javascript),但这可能会非常困难。您还必须停止更改URL的其他方法(如标题重定向)。

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


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

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

基本上,给我一个脚本,有人说可以解析任何网页(包括javascript)来拦截任何外部电话,我会给你一个这个脚本不适用的网页。 免责声明:我说的是拦截链接,但让网站正常运行......不只是解析页面以完全删除所有的javascript。

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

此外,您是否认为页面上的大多数javascript未嵌入,而是通过<script>标记加载,或者甚至可能从原始服务器动态加载。我假设你想区分“从原始服务器加载的东西,使页面功能和正确看起来”,“从原始服务器加载的东西用于其他东西”。你的程序如何“知道”这个?

你可以尝试解析页面并删除所有的javascript ...但即使这样也很困难,因为仍有tricky ways来解决这个问题。