Goquery 和 Gokogiri 解析问题
用https://github.com/PuerkitoBio/goquery 解析HTML,
想得到 “abc”这个值
<meta name="format-detection" content="telephone=no, address=no">
<meta name="description" content="abc”/>
参考了文章 http://1.guotie.sinaapp.com/?p=501 ,Find(“meta[name]”)后,只能得到第一meta name的值”telephone=no, address=no”,加个.Next()也不行。
dhead := doc.Find("head")
dcharset := dhead.Find("meta[name]")
charset, _ := dcharset.Attr("content")
求指点,谢谢!
共 9 个回复
sdrzlyz
恰巧用过这个库。。。
因为存在多个元素,需要用each依次取出
或者先
dhead.Find("meta[name]").Sizes()
得到个数.然后使用Eq(i)配合循环来完成
yue
谢谢@sdrzlyz 这么快解答!
我用each依次取出,但是好像只能按照顺序卡位Eq(i)获得值,并不能按照 name=”description” 获得值:(
比如,我要解析个任意淘宝地址 https://item.taobao.com/item.htm?id=520553762082
它的meta name 有好多,如果不能直接指定name取出来,害怕html一但有变化,程序就会卡错位了~
我的测试代码:
嗯,估计一般网站上的meta也不能总变,再次感谢楼上~还学会了size()
David
@yue 你可以用
s.Attr("name")
判断一下是"description"
了以后再取出来,这样就不依赖于顺序了。yue
@David 哇,果然呀,谢谢大神指点迷津~嗯,我是小白依葫芦画瓢啊,这次明白了~谢谢!
qq277049
不用这么复杂,直接使用Eq()方法就可以
也可以这样用
yue
@qq277049 谢谢,原来可以这样直接查,学习了~
再继续请教,查找<script>中内容,比如上面的例子:
我用doc.Find(“script”).Eq(0) 定位后,想继续解析出 pageId 的值 52055376208,怎么试都试不出来了,是不是这里只能用正则操作字符串提出来呢?
谢谢,菜鸟问题比较多啊!
fsyx
不错,有学习了
yue
oh,楼上又把这贴顶起来了~
那再来请教,哪位前辈用过 github.com/moovweb/gokogiri 呢?
因为我在用 goquery时,解析某些网页时碰到了 “ stopped after 10 redirects“ 错误
所以学习使用 googiri ,但这个介绍文档好少呀,只有这篇 《gokogiri 的使用小试》 ,想求些更精准解析的例子,比如解析html:
我用
nodetile, err := doc.Search("//title")
解析得到的是<title> hello world </title>
而不是hello world
;或者,
nodeimage, err := doc.Search("//img[@id='bigImage']")
解析得到的是<img id="bigImage" alt="" src="http://abc.com/123.jpg">
, 而不是我想要的http://abc.com/123.jpg
请熟悉gokogiri 的前辈指点迷津,感觉不应该再去用正则提取字符串那么麻烦,谢谢!
yue
哦,是这样的: