Android+Jsoup,为网站自定义api

2013-10-22 14:19:13 +08:00
 dichengsiyu
需求:在Android应用开发中,对于没有API的网站,如果想通过抓数据的形式组织数据。

1. Android+Jsoup,在客户端直接抓取数据解析,使用Jsoup.parse的方法产生document类,很慢。考虑进行预处理,例如v2ex.com/recent?p=1,如果为了组织列表数据,只需要读取id=Main的div下面的数据,多余的数据并不需要传入parse方法进行解析。针对网站可能会改版,可以将对于节点的访问采用selector或正则的方式与具体解析分离,将这部分规则打成包单独维护。

2. Android+网络爬虫程序中转请求。还是用v2ex.com/recent举例,如果希望访问列表数据,可以写一个服务端程序,用于接收客户端访问,然后抓取数据,解析产生json数据返回。有没有现成的服务可以将定制数据转换为json和xml调用?

对于预处理,或者其他的方法,大家有什么建议么?欢迎讨论。
3652 次点击
所在节点    程序员
6 条回复
westlinkin
2013-10-22 14:21:13 +08:00
我最近正在做这个事情,朝方法2努力
dichengsiyu
2013-10-22 14:28:45 +08:00
@westlinkin 第二种方案在简单客户端开发中感觉性价比不高。即便解析服务定制后可通用,但是无形中把对于目标站的访问压力又复制到爬虫服务上。
oa414
2013-10-22 16:02:13 +08:00
我做过这种事情

1的缺点是耗流量,速度可能会慢。但是我爬的网站最后在客户端的抓取和解析速度还不错。此外,网站改版几乎是致命的,必须修改客户端。LZ的将解析规则分离想法不错,不过不知道实践起来能不能切合改版后的网站,因为之前没办法知道网站会改版成什么样,没办法调试

2用脚本爬网站比在客户端上调试爬取解析方便多了,我觉得主要问题是自己要增加一个服务器的维护成本。我最近在试验用PHP写,客户端第一次请求的时候去抓取,结果缓存到本地,第二次直接返回本地结果,好处是PHP虚拟空间便宜又多,也不用专门开VPS
icyflash
2013-10-22 16:05:06 +08:00
YQL ?
dichengsiyu
2013-10-22 19:29:45 +08:00
dichengsiyu
2013-10-22 19:33:02 +08:00
@oa414
1. 想是可以把规则做成“正则表达式字符串”,然后可以动态的做成一个表,通过一个固定的api可以访问,做一下简单的版本管理,每次加载的时候读取一下规则数据,如果有变化重新加载。不过还没有具体试验。我使用Jsoup解析,感觉很慢。我想即便是采用这种方式也需要做好预处理,其实有很多信息在构建parser树的时候是不需要的。

2. 维护成本是这个方法的硬伤。@icyflash的推荐的YQL感觉很有意思,可以看看~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/86443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX