爬虫选 xpath 还是 css selector? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
51300520
V2EX    问与答

爬虫选 xpath 还是 css selector?

  • nbsp;
  •   51300520 2019-04-14 01:35:59 +08:00 4769 次点击
    这是一个创建于 2380 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    21 条回复    2019-04-15 10:06:25 +08:00
    herozzm
        1
    herozzm  
       2019-04-14 01:37:28 +08:00 via iPhone
    都要
    jquery
    正则
    json

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

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

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

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

    实现起来是比直接写死在代码里复杂了那么点,但之后维护起来那就很爽了
    bduqw
        21
    bduqw  
       2019-04-15 10:06:25 +08:00 via Android
    基本就是 CSS,不行就正则
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 09:26 PVG 17:26 LAX 02:26 JFK 05:26
    Do have faith in what you're doing.
    ubao msn 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