我想创建一个Android应用程序,我可以从特定网站上抓取数据。该网站上的信息可能会改变(文本数据)。另外,我不知道HTML结构是否会随着时间而改变。我的问题是:从网站抓取数据可能会改变
- 有没有人推荐特定的工具或框架刮 (免费)?
- 如何知道何时信息(文本数据)在 网站上发生变化,以便我可以更新我的应用程序?
- 如何处理网站HTML结构的变化?
这是我的第一次抓取经验,任何答案可以帮助我很多。 谢谢
我想创建一个Android应用程序,我可以从特定网站上抓取数据。该网站上的信息可能会改变(文本数据)。另外,我不知道HTML结构是否会随着时间而改变。我的问题是:从网站抓取数据可能会改变
这是我的第一次抓取经验,任何答案可以帮助我很多。 谢谢
一个更好的方法来做到这一点将是有一个服务器,实际上刮网站,然后你的应用程序将与此服务器对话,并只接收应用程序需要的数据,这种方式应用程序每次网站改变时都不会中断。
至于服务器抓取,每当网站结构发生变化时,您都需要更新您的抓取代码,您会知道在您的刮码代码中断或返回垃圾结果时它是否发生了变化。
如果结果是新的,那么您可以通过将其废弃并将结果与以前的结果进行比较来了解网站数据是否已更改,然后允许应用程序获取新数据。
如果您在应用程序中执行此操作,您将消耗大量数据,因为您每次要检查更改时都必须下载该站点。 当网站结构发生变化时,您的应用程序也会中断甚至崩溃,这会让用户感到沮丧,而且用户需要很长时间才能收到应用程序更新,而其中一些更新根本不会更新。
这一切都取决于你想从哪里进行刮擦。一个我用的是李raries的是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)发出太多请求。
我会建议在应用程序中进行刮擦,但使用来自服务器的变量。 例如,在您的服务器上使用"title_of_scrapped_page":"css_selector_to_use_in_app"
等值来保存JSON文件,并在每次启动时向您的应用程序提供此json文件。通过这种方式,您可以在应用程序中进行更改刮取算法。
检查网站是否提供使用的API。另外检查这些链接:http://stackoverflow.com/questions/2861/options-for-html-scraping和http://stackoverflow.com/questions/2530285/how-to-know-if-the-website-being -scraped-has-changed – Denny