簡體   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