2011-03-31 131 views
1

我有一個python爬蟲每隔幾分鐘爬一些網頁。我現在試圖實現通過Web訪問的用戶界面,並顯示抓取工具獲取的數據。我將使用php/html作爲接口。無論如何,用戶界面需要某種按鈕,這會觸發抓取工具立即抓取特定網站(而不是等待下一次抓取迭代)。從PHP腳本將數據傳遞給Python Web爬蟲

現在,有沒有辦法將數據從php腳本發送到正在運行的python腳本?我正在考慮標準輸入/輸出,但是找不到這樣做的方式(從一個進程寫入另一個進程stdin)。然後我想着使用php寫入和python讀取的共享文件。但是後來我需要一些方法讓python腳本知道,新的數據已經寫入文件,並且讓php腳本知道抓取工具何時完成任務。另一種方法是套接字 - 但是我認爲,這將會有點過分,並且不是那麼簡單。

你有任何建議讓一切儘可能簡單,但仍然允許我從一個PHP腳本發送數據到正在運行的Python進程?

在此先感謝您的任何想法!

編輯:我應該注意到,爬蟲將獲取的數據保存到一個sql數據庫中,php可以訪問。所以將數據從python爬蟲傳遞到php腳本是沒有問題的。這是相反的。

回答

0

因爲我不太瞭解python的工作原理,所以只是把它當作瘋狂的想法。

  • 在服務器上創建一個XML它是由Python和PHP
  • 在PHP端的訪問,你可以插入新的節點,以這種XML有關的新網址用於processed=false標誌
  • 的Python來看看對於未處理任務,然後獲取數據,並把源到你的數據庫
  • 成功抓取之後,切換processed標誌
  • 當下次PHP觸摸這個XML,刪除節點與processed=true屬性

希望它能以某種方式幫助你。

+0

雖然這將是一個工作方法,但它不能解決兩個問題:1)如果更改時間,抓取工具需要每隔幾秒檢查一次。 2)PHP腳本必須每隔幾秒讀取一次並檢查標誌是否設置爲true。 – Philipp 2011-03-31 12:24:31

+0

@Philipp如果你喜歡cron,你可以每分鐘/秒運行你的Python腳本。 – fabrik 2011-03-31 12:26:31

+0

感謝您的意見。我已經結束了使用套接字。爬蟲現在有一個專用線程監聽特定端口。我現在可以使用php套接字使用web界面發送命令。雖然這不是我最喜歡的解決方案,但它完成了這項工作。 – Philipp 2011-04-02 22:09:29

1

最好的方法,以消除不同語言工作的依賴性是使用消息隊列庫(如RabbitMQ的ActiveMQ的或)

通過使用這個,你可以從PHP直接發送消息給Python或反之亦然...

如果你想要一個簡單的出路,你需要修改你的python腳本(更多的是fabrik說的)來輪詢一個數據庫(或文件)的任何新的工作......並處理它,如果它發現一個...

0

我有使用標準的XML-RPC Python庫提供簡單的RPC接口的良好經驗。 您只需在Python腳本中啓動另一個線程,該腳本將處理來自PHP代碼的XML-RPC請求。 PHP對http://phpxmlrpc.sourceforge.net/有相當成熟的XML-RPC支持。