[英]GUI in web (Django) for Python script
我有一個程序,該程序從用戶那里獲取1個URL,對整個站點進行爬網,並返回所有URL的列表以及每個URL的一些已解析數據。
一切看起來像:
class Crawl(url_from_user):
self.result = [<Page object at 1>, <Page object at 2>, <Page object at 3>]
class Page(url):
self.data_1 = "string_1"
self.data_2 = "string_2"
self.data_3 = "string_3"
Crawl
類-處理線程和每頁的所有公共輸入/數據。
class Page
為每個頁面存儲唯一數據並處理解析HTML。
我想把這個程序變成一個網站。 使用Django,我想創建使用url_from_user
並開始抓取網站的頁面。 我想將結果存儲在SQL數據庫中,以便能夠將其傳遞給不同的視圖。
問題是,如何在搜尋過程中動態顯示結果,而尚未完成? 在抓取中間,我可以在控制台中將結果顯示給“ stdout”。 我可以在HTML頁面中顯示未完成的結果嗎?
我的第一個想法是JQuery,但是JQuery可以掛鈎到stdout輸出(或者,如果它可以使用Page的所有方法訪問結果列表本身,那就更好了-那么當列表仍在增長時,我將能夠操縱列表的各個元素與運行抓取)?
這是您要做的:
添加一個呈現表單的視圖(您所需的url輸入功能)並啟動腳本。 實際上有兩個可以解決的問題:
3.1在主要工作中啟動腳本-凍結用戶的網站,直到抓取完成,但更容易完成
3.2通過celery或cron安排爬行作業-全面更好,不凍結任何東西,允許更多的靈活性,允許查看當前進度等,但是需要設置作業隊列,並且通常很難做到第一次。
使您的腳本將抓取的網址和所需的信息放到django正在從中獲取數據的同一數據庫中。
現在,對於動態進度顯示,我絕不是專家,但是我看到了一些方法:
對於動態進度顯示,您仍然需要某種異步方法。 您可以通過長時間輪詢來實現 :通過AJAX GET在django側輪詢django上創建一個js腳本,以使新信息大約每秒鍾顯示一次。 這項技術最近已經過時了(因為它向服務器發送大量昂貴的請求),但是它仍然有效並且非常簡單。
我認為最好的選擇是讓celery作業將爬網的數據和日志放入數據庫中,讓django向用戶顯示日志和數據並接受用戶輸入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.