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

爬虫选 xpath 还是 css selector?

  •  
  •   51300520 · 188 天前 · 1928 次点击
    这是一个创建于 188 天前的主题,其中的信息可能已经有所发展或是发生改变。

    解析 html 元素用哪个更好?我不要什么性能,爬虫最重要的是稳定,如果考虑网页改变这种可能性,哪个选择器的适应性更强? 我意思是网页如果改变了,但是不是那种大改,哪个更容易在不改爬虫代码的情况下更可能适应?

    21 回复  |  直到 2019-04-15 10:06:25 +08:00
        1
    herozzm   188 天前 via iPhone
    都要
    jquery
    正则
    json

    必须好的
        2
    51300520   188 天前
    我只想知道几率大小而已,虽然没有哪种可以百分之百不改代码,因为我以前一直是用 css 没用过 xpath,想找大家了解下,如果 xpath 适应性更强我就换成 xpath 的
        3
    51300520   188 天前
    @herozzm
    很多时候只要一样就可以,我以前没用 xpath,一直用 css,基本没有定位不到的,既然如此我要选一个更健壮的
        4
    herozzm   188 天前 via iPhone
    @51300520 需要多样性 不然适配部分网站
        5
    binux   188 天前 via Android   ♥ 1
    是否健壮和用什么工具无关
        6
    51300520   188 天前
    @binux
    是吗?假如我现在页面里面有一个 class 叫 test, 那我用 css 选就是 css(.test),但是它的路径是页面第三个元素,那我用 xpath 就可以用路径来选 html[3], 这两种情况健壮性怎么可能不一样呢,假如人家网页维护,test 类变成 demo 类,css 就选不到了,假如他路径没变,xpath 依然可以选到
        7
    herozzm   188 天前 via iPhone
    jquery 方式可以
        8
    binux   188 天前 via Android
    @51300520 那你不会在 CSS selector 中用 nth-child 吗?
        9
    loginbygoogle   188 天前 via Android
    无论什么 html 爬虫框架,如果网站本身的结构变了,都得改,没有一劳永逸的。
        10
    51300520   188 天前
    刚看了下 xpath,发现这个问题提得多余了,这玩意和 css 功能绝大部分是重叠的,一个不行的话那另一个也不行
        11
    crab   188 天前
    直接正则也是可以。
        12
    Leigg   187 天前 via iPhone
    当然是都用。
        13
    Leigg   187 天前 via iPhone
    也并不复杂,一两天就学会了。
        14
    Leigg   187 天前 via iPhone
    大部分情况下用 css 的表达式很简单。
        15
    wedoub   187 天前 via iPhone
    正则表达式更好用我觉得
        16
    iyaozhen   187 天前 via Android
    页面变了,用啥都得改

    我一般自动化测试用 css selector,方便和前端沟通
        17
    charlie21   187 天前
    用 CSS 选择器,当遇到 CSS 做不到的东西 的时候 再考虑 XPath
        18
    dsg001   187 天前
    混用,哪个方便用哪个
        19
    baitei   187 天前
    我是首先 css selector,简单。
    页面变了大概率得改程序,做不到想一劳永逸。
    程序代码适应性很差的,以后要是爬虫用上了深度学习,会智能很多哈。
        20
    hakono   187 天前 via Android
    正则就算了吧。。。。写出来过段时间都不知道写的表达式是什么玩意。。。加注释也没用

    老老实实 css 选择器就行,稳定性这个无解。因为你不知道对方网站前端下次会把网页结构改成什么样子

    解决办法其实挺简单的,把 css 选择器的字符串从代码中剥离,塞入单独的文件里,txt 啊,json 啊,数据库啊都行,从这些地方读取提取规则再匹配

    实现起来是比直接写死在代码里复杂了那么点,但之后维护起来那就很爽了
        21
    bduqw   186 天前 via Android
    基本就是 CSS,不行就正则
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1307 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 31ms · UTC 00:01 · PVG 08:01 · LAX 17:01 · JFK 20:01
    ♥ Do have faith in what you're doing.