繁体   English   中英

在Django / Python中从网站抓取图像的有效方法

[英]Efficient way to scrape images from website in Django/Python

首先,我想我应该说我还是Django / Python新手。 我在一个允许用户输入URL的项目中,该网站从该页面抓取内容并返回一定大小的图像和页面标题标签,以便用户随后可以选择要在其上使用的图像轮廓。 我认为这是一个非常标准的方案。 我通过使用Selenium(无头Chrome浏览器)来抓取目标页面内容,使用一些python确定文件大小,然后在我的Django视图中将所有内容都放入模板中来进行工作。 然后,我将其编码为用户选择的图像将在本地下载和存储。

但是,我严重怀疑它的可伸缩性,它目前仅在本地运行,并且我非常担心如果有很多用户同时运行,这将如何应对。 每次发出听起来效率不高的请求时,我都会启动该无头chrome浏览器,我必须下载该图像以确定其大小,以便可以确定它是否足够大。 从我提交URL到向用户显示结果花了12秒,而通过www.kit.com放置的相同目标URL(它们具有非常相似的Web抓取功能)花费了3秒。

我没有提供任何代码,因为我所拥有的代码应做的事,但是我认为这种方法是不正确的。 总结一下我想要的是:

  • 为了允许用户输入URL并使其返回该页面上超过一定大小(宽度/高度)的所有图像(或仅这些图像的URL)和页面标题。

  • 为了使它成为最有效的解决方案,考虑到它将在多个用户之间同时并发运行。

  • 为了使其能够在Django(2.0)/ Python(3+)环境中工作。

如果存在第三方服务,我并不完全反对使用该API,但这是我最不喜欢的选择。

任何帮助/指针将不胜感激。

您可以使用2种python解决方案:
1) BeautifulSoup是一个很好的答案,如何使用它下载图像。 您只需要使其成为一个单独的函数,然后将site作为参数传递给它即可。 但是,也很容易按照您所说的那样仅解析图像链接 -取决于您所需的速度(显然,抓取文件(特别是当文件数量很多时,抓取文件的速度)比链接要慢得多)。 该工具仅用于解析和抓取页面内容。

2) Scrapy-这是功能更强大的工具,框架,通过它,您可以将Spider连接到Django模型,并使用其内置的图像管道更加有效地处理图像。 它具有许多功能,可以更灵活地处理报废的数据。 我不确定您是否需要在您的项目中使用它,并且在您的情况下它是否没有被超越。

另外,我的建议是在某些后台任务(例如QueueCelery )中运行蜘蛛程序,并通过AJAX调用结果,因为解析内容可能需要一些时间-因此不要让用户等待响应。

PS在某些情况下,您甚至可以结合使用这两种工具:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM