Android+Jsoup,为网站自定义api - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
dichengsiyu
V2EX    程序员

Android+Jsoup,为网站自定义api

  •  
  •   dichengsiyu 2013-10-22 14:19:13 +08:00 4017 次点击
    这是一个创建于 4374 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求:在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调用?

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

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

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

    2. 维护成本是这个方法的硬伤。@icyflash的推荐的YQL感觉很有意思,可以看看~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1152 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:50 PVG 01:50 LAX 10:50 JFK 13:50
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86