簡體   English   中英

從網站上抓取可能更改的數據

[英]scraping data from website that could change

我想創建一個Android應用程序,可以在其中從特定網站抓取數據。 該網站上的信息可能會更改(文本數據)。此外,我也不知道HTML結構是否會隨着時間而改變。 我的問題是:

  1. 是否有人推薦用於刮擦的特定工具或框架(免費)?
  2. 我如何知道何時在網站上更改信息(文本數據)以便更新我的應用程序?
  3. 如何處理網站HTML結構上的更改?

這是我的第一次刮擦經驗,任何答案都可以為我帶來很大幫助。 謝謝

更好的方法是讓服務器進行實際的網站抓取,然后您的應用將與您的服務器進行對話,並僅接收應用所需的數據,這樣,應用不會在每次訪問網站時都不會中斷變化。

至於服務器抓取,每次網站結構更改時,您都需要更新您的抓取代碼,當您的抓取代碼損壞或返回垃圾結果時,您將知道它是否已更改。

您可以通過將其抓取並將結果與​​以前的結果進行比較來了解網站數據是否已更改,如果結果是新的,則允許應用程序獲取新數據。

如果在應用程序中執行此操作,則會消耗大量數據,因為每次要檢查更改時都必須下載該站點。 此外,當網站結構發生變化時,您的應用程序甚至可能崩潰甚至崩潰,這將使用戶感到沮喪,並且用戶需要很長時間才能收到應用程序更新,其中有些根本無法更新。

這完全取決於您要從哪里進行刮取。 我使用的庫之一是Jsoup,它允許您連接到URL並像這樣獲取html:

Connection.Response page = Jsoup.connect("http://example.com").method(Method.GET).execute();
Document pDoc = page.parse();

然后,您可以使用Jsoup的方法來解析頁面,該方法非常簡單,並且由於Jsoup 1.10,您可以使用CSS選擇器,如下所示:

Element element = pDoc.select(".class-in-html-element");

您總是可以進行抓取服務器端的操作,並將其提供給您的應用程序,這樣您就可以在網站更改后對抓取算法進行更改,但是如果用戶過多,您將通過相同的ip(您的服務器ip )。

我建議在應用中進行抓取,但要使用來自服務器的變量。 例如,在服務器上保留一個JSON文件,其值應類似於"title_of_scrapped_page":"css_selector_to_use_in_app"並在每次啟動時將此json提供給您的應用。 這樣,您就可以在應用中進行抓取時更改抓取算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM