下载外部html内容客户端,发送到django服务器,将处理后的数据发送回客户端

Posted

技术标签:

【中文标题】下载外部html内容客户端,发送到django服务器,将处理后的数据发送回客户端【英文标题】:Download external html content client side, send to django server, send processed data back to client 【发布时间】:2013-05-21 02:24:41 【问题描述】:

这就是我想做的。我是 javascript 和 django 的新手。请让我知道我该怎么做:

    客户端点击网页上的按钮,javascript从外部网站下载html内容。 Javascript 将 html 内容(可能是网页)发送到 django 服务器。 Django 服务器对 html 内容执行特定函数,并返回
      一个 JSON 序列化的数据和 下载的 html 内容的修改版本。
    Javascript 显示 1 和 2 客户端。

我该怎么做呢?我怀疑我需要 JQuery AJAX 1),但我似乎无法让它与外部 html 一起使用。对于 2)-4) 我完全迷失了。请帮助,原谅我的新手。

更新:出于某种原因,我不想从服务器获取 html 内容。如果我对很多用户这样做,我从中获取内容的网站将阻止服务器进一步下载。

【问题讨论】:

你想要docs.python-requests.org/en/latest这将允许django直接下载外部网页。然后,您可以使用 BeautifulSoup 来修改 html。无需 Javascript 不,这不是我想要的。我需要从客户端请求 html 内容是有原因的。 【参考方案1】:

为什么不把它缩短一点:

1)访问者点击网页上的按钮,您的网页将html页面的地址发送到您的django服务器。

2) Django 使用 urrlib2(例如)执行 web 请求并自行下载网页。

3) Django 对内容执行该函数并返回 a) 和 b)

4) javascript 显示 a 和 b。

那么你需要什么:

1) jQuery ajax 将 url 发送到您的服务器。

2) 查找 django urllib2 的一些基本示例,了解关于 hot 的 web 请求。它也非常简单易行。

3) 获取http://www.crummy.com/software/BeautifulSoup/bs4/doc/ 用于解析您使用urllib2 下载的html。使用它修改和解析 html 文档非常简单。如果您查找示例并尝试它们,您将自己看到它。

4) 然后使用 django 自己的 Http 方法返回 html 和/或 json。

艾伦

【讨论】:

谢谢,但实际上我有充分的理由不执行来自服务器的 url 请求。如果所有请求都来自服务器,那么我从中获取 html 内容的站点将阻止服务器的 IP 地址。所以在这种情况下,所有的 html 内容都必须从客户端下载。否则你的解决方案将是完美的。关于如何回答我原来的问题有什么想法吗? 好吧,您不能从浏览器发出不指向不是内容来源的服务器的 javascript 请求:en.wikipedia.org/wiki/Same_origin_policy。我非常怀疑您的 IP 是否会根据 http 请求被阻止。 一些谷歌搜索指出了这个链接:james.padolsey.com/javascript/cross-domain-requests-with-jquery。我仍然建议在服务器端执行此操作,因为使用 python 的 html 解析比使用 javascript 快得多。此外,如果您担心 ip-banned/blocked,那么您可以将 html 保存到数据库中以减少您执行的请求数量。 Odif 我会试试这个,虽然到目前为止我还没有成功使用这些方法。 这就是为什么我建议你改用 urllib2。我非常怀疑是否有人因 http 请求而禁止使用 ip。

以上是关于下载外部html内容客户端,发送到django服务器,将处理后的数据发送回客户端的主要内容,如果未能解决你的问题,请参考以下文章

如何从服务器端下载 zip 文件到客户端(django 做出反应)

Django基础02

线程只能在 Django Channels 中启动一次

python---django请求-响应的生命周期(FBV和CBV含义)

使用 Http Post 发送图像

如何防止外部实体拒绝来自测试服务器的电子邮件?