下载外部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 内容的修改版本。
我该怎么做呢?我怀疑我需要 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 做出反应)