从网站上抓取可能改变的数据
scraping data from website that could change
我想创建一个 Android 应用程序,我可以在其中从特定网站抓取数据。该网站上的信息可能会改变(文本数据)。另外,我不知道 HTML 结构是否会随着时间而改变。我的问题是:
- 有没有人推荐一个特定的抓取工具或框架
(免费)?
- 我如何知道信息(文本数据)何时更改
网站以便我可以更新我的应用程序?
- 如何处理网站HTML结构的变化?
这是我第一次抓取经验,任何答案都会对我有很大帮助。
谢谢
一个更好的方法是让一个服务器来实际抓取网站然后你的应用程序将与你的服务器对话并只接收应用程序需要的数据,这样应用程序就不会每次网站更改时都会中断。
至于服务器抓取,每次网站结构发生变化时,您都需要更新抓取代码,当您的抓取代码损坏或returns 垃圾结果时,您就会知道它是否发生了变化。
您可以通过抓取网站数据并将结果与之前的结果进行比较来了解网站数据是否已更改,如果结果是新的则允许应用程序获取新数据。
如果您在应用程序中执行此操作,您将消耗大量数据,因为每次您要检查更改时都必须下载该站点。
此外,当网站结构发生变化时,您的应用程序可能会中断甚至崩溃,这会让用户感到沮丧,并且用户需要很长时间才能收到应用程序更新,其中一些根本不会更新。
这完全取决于您想从哪里进行抓取。我使用的库之一是 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 提供给您的应用程序。这样您就可以在应用程序中进行抓取时更改抓取算法。
我想创建一个 Android 应用程序,我可以在其中从特定网站抓取数据。该网站上的信息可能会改变(文本数据)。另外,我不知道 HTML 结构是否会随着时间而改变。我的问题是:
- 有没有人推荐一个特定的抓取工具或框架 (免费)?
- 我如何知道信息(文本数据)何时更改 网站以便我可以更新我的应用程序?
- 如何处理网站HTML结构的变化?
这是我第一次抓取经验,任何答案都会对我有很大帮助。 谢谢
一个更好的方法是让一个服务器来实际抓取网站然后你的应用程序将与你的服务器对话并只接收应用程序需要的数据,这样应用程序就不会每次网站更改时都会中断。
至于服务器抓取,每次网站结构发生变化时,您都需要更新抓取代码,当您的抓取代码损坏或returns 垃圾结果时,您就会知道它是否发生了变化。
您可以通过抓取网站数据并将结果与之前的结果进行比较来了解网站数据是否已更改,如果结果是新的则允许应用程序获取新数据。
如果您在应用程序中执行此操作,您将消耗大量数据,因为每次您要检查更改时都必须下载该站点。 此外,当网站结构发生变化时,您的应用程序可能会中断甚至崩溃,这会让用户感到沮丧,并且用户需要很长时间才能收到应用程序更新,其中一些根本不会更新。
这完全取决于您想从哪里进行抓取。我使用的库之一是 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 提供给您的应用程序。这样您就可以在应用程序中进行抓取时更改抓取算法。