V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
mthli
V2EX  ›  问与答

大家都是怎么解析抓取到的 HTML 文件的?

  •  
  •   mthli · 2014-09-08 18:38:30 +08:00 · 4979 次点击
    这是一个创建于 3736 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有的网站没有API接口,如果要想抓取数据的话就必须解析HTML自己提取内容了。

    一般来说我会直接遍历,找到特定的标签(或者字符),然后再自己提取内容。如果标签比较多的话就觉得有点烦,毕竟写起来自己也麻烦。所以想问一下有没有什么更好的方法(或者是那种脑洞大开的方法)?
    46 条回复    2014-09-10 11:00:17 +08:00
    ZzFoo
        1
    ZzFoo  
       2014-09-08 18:48:15 +08:00   ❤️ 1
    用Xpath吧
    mhycy
        2
    mhycy  
       2014-09-08 19:17:45 +08:00   ❤️ 1
    正则表达式
    mthli
        3
    mthli  
    OP
       2014-09-08 19:18:34 +08:00   ❤️ 1
    @ZzFoo 看上去好像很不错的样子。值得一试 :)
    mthli
        4
    mthli  
    OP
       2014-09-08 19:19:02 +08:00
    @mhycy 嗯,我原来是打算正则的。
    paulw54jrn
        5
    paulw54jrn  
       2014-09-08 19:24:49 +08:00   ❤️ 1
    xpath, xquery , xslt 都可以~
    mthli
        6
    mthli  
    OP
       2014-09-08 19:25:52 +08:00
    @paulw54jrn 嗯嗯,thx~
    Automan
        7
    Automan  
       2014-09-08 19:28:17 +08:00   ❤️ 1
    有很多HTML DOM parser,用起来比正则方便多了。。
    mthli
        8
    mthli  
    OP
       2014-09-08 19:29:35 +08:00
    @Automan 正是如此,主要我也懒得写正则,哈哈。
    paulw54jrn
        9
    paulw54jrn  
       2014-09-08 19:31:22 +08:00
    beautifulSoup 挺方便的~
    mthli
        10
    mthli  
    OP
       2014-09-08 19:40:41 +08:00
    @paulw54jrn 嗯,收下了。不过我是打算用Java。以后写Python的时候再用。
    ghy459
        11
    ghy459  
       2014-09-08 19:59:50 +08:00   ❤️ 1
    @mthli java 有类似 bs 的 htmlunit。
    lcxseima
        12
    lcxseima  
       2014-09-08 20:01:49 +08:00   ❤️ 1
    @mthli java的话jsoup也算一个。都很方便。
    ericls
        13
    ericls  
       2014-09-08 20:04:33 +08:00   ❤️ 2
    pyquery
    scusjs
        14
    scusjs  
       2014-09-08 20:06:40 +08:00   ❤️ 1
    jsoup
    belin520
        15
    belin520  
       2014-09-08 20:16:48 +08:00 via Android   ❤️ 1
    什么语言好像都有**query之类的库。
    tinyhill
        16
    tinyhill  
       2014-09-08 20:26:59 +08:00   ❤️ 1
    node + jquery
    mthli
        17
    mthli  
    OP
       2014-09-08 20:33:22 +08:00
    @ghy459 嗯,刚搜到。
    neverno
        18
    neverno  
       2014-09-08 20:37:55 +08:00   ❤️ 1
    beautifulsoup
    baka
        19
    baka  
       2014-09-08 20:47:12 +08:00 via iPhone   ❤️ 1
    在用beautifulsoup之前一直都是粗暴split的
    mthli
        20
    mthli  
    OP
       2014-09-08 20:52:40 +08:00
    @baka 啊哈哈哈。
    ccbikai
        21
    ccbikai  
       2014-09-08 20:54:29 +08:00   ❤️ 1
    wwttc
        22
    wwttc  
       2014-09-08 20:55:11 +08:00   ❤️ 1
    正则,beautifulsoup,xpath,都可以。最方便的还是xpath
    ceclinux
        23
    ceclinux  
       2014-09-08 23:02:34 +08:00   ❤️ 1
    nodejs可以用jsdom
    refresh
        24
    refresh  
       2014-09-08 23:07:07 +08:00   ❤️ 2
    node.js + cherrio,jsdom太重了
    zyx89513
        25
    zyx89513  
       2014-09-08 23:07:42 +08:00   ❤️ 1
    beautifulSoup
    Comdex
        26
    Comdex  
       2014-09-08 23:09:57 +08:00 via Android   ❤️ 1
    goquery
    lightening
        27
    lightening  
       2014-09-08 23:13:45 +08:00   ❤️ 1
    Ruby 的话就用 Nokogiri (鋸).
    cxshun
        28
    cxshun  
       2014-09-08 23:16:08 +08:00   ❤️ 1
    xpath是最好的方案,正则的话就太麻烦了。但遇到不规范的html时,这也比较杯具了,只能先处理一下再用xpath。
    txlty
        29
    txlty  
       2014-09-08 23:54:35 +08:00   ❤️ 2
    那个。。难道说拆数组,很土很落后?
    mthli
        30
    mthli  
    OP
       2014-09-09 07:23:15 +08:00 via Android
    @txlty 不是呀,也很不错呀。
    scola
        31
    scola  
       2014-09-09 08:18:23 +08:00   ❤️ 1
    python + lxml
    RangerWolf
        32
    RangerWolf  
       2014-09-09 09:19:45 +08:00   ❤️ 1
    了解到有些比价软件的页面解析用的是正则~ 不过个人一直是Java + JSoup。 再加上xpath的话,不知道哪个效率更高一点~
    djyde
        33
    djyde  
       2014-09-09 09:48:52 +08:00   ❤️ 1
    看我V2HOT的第一个版本记录,用的是Jsoup。

    https://github.com/djyde/V2HOT
    ZzFoo
        34
    ZzFoo  
       2014-09-09 10:21:28 +08:00
    对了,配合火狐的Xpath Checker插件,可以检查你的表达式选取到的结果
    binux
        35
    binux  
       2014-09-09 10:31:52 +08:00   ❤️ 1
    [如何从 WEB 页面中提取信息](http://blog.binux.me/2014/07/how-to-extract-data-from-web/)
    miao
        36
    miao  
       2014-09-09 10:42:00 +08:00   ❤️ 1
    如果是抓取到本地(win环境) 请用火车头
    mthli
        37
    mthli  
    OP
       2014-09-09 10:56:07 +08:00
    @ZzFoo 嗯哼~
    Yannis1990
        38
    Yannis1990  
       2014-09-09 11:37:36 +08:00
    pyquery +1
    master
        39
    master  
       2014-09-09 11:39:01 +08:00   ❤️ 1
    node.js + cherrio
    bigtan
        40
    bigtan  
       2014-09-09 11:41:09 +08:00
    bs4
    imn1
        41
    imn1  
       2014-09-09 11:58:03 +08:00   ❤️ 1
    网页数量很多的话(过万),建议还是尽可能用正则吧
    mthli
        42
    mthli  
    OP
       2014-09-09 12:32:07 +08:00 via Android
    @imn1 没那么多啦,最多也就10来页。
    jsq2627
        43
    jsq2627  
       2014-09-09 12:49:44 +08:00
    正则高效,xquery 容易
    jedihy
        44
    jedihy  
       2014-09-09 14:30:42 +08:00 via iPhone   ❤️ 1
    最好正则,其它库会根据html构造一棵dom树,效率极低。这些厚重的库并不是用来做这种简单的html抓取
    mthli
        45
    mthli  
    OP
       2014-09-09 15:39:33 +08:00
    @jedihy 嗯,了解。
    mucid
        46
    mucid  
       2014-09-10 11:00:17 +08:00
    xpath,不要用正则
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2550 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.