对于一些背景信息,我是 Go 的新手(3 或 4 天),但我开始习惯了。
我正在尝试用于goquery解析网页。(最终我想将一些数据放入数据库中)。对于我的问题,一个例子将是解释它的最简单方法:
<html>
<body>
<h1>
<span class="text">Go </span>
</h1>
<p>
<span class="text">totally </span>
<span class="post">kicks </span>
</p>
<p>
<span class="text">hacks </span>
<span class="post">its </span>
</p>
<h1>
<span class="text">debugger </span>
</h1>
<p>
<span class="text">should </span>
<span class="post">be </span>
</p>
<p>
<span class="text">called </span>
<span class="post">ogle </span>
</p>
<h3>
<span class="statement">true</span>
</h3>
</body>
<html>
我想:
提取内容<h1..."text"。
将此提取的内容插入(并连接)到<p..."text".
仅对紧跟在标签之后的<p>标签执行此操作。<h1>
这样做对所有的的<h1>页面上的标签。
所以这就是我想要的样子:
<html>
<body>
<p>
<span class="text">Go totally </span>
<span class="post">kicks </span>
</p>
<p>
<span class="text">hacks </span>
<span class="post">its </span>
</p>
<p>
<span class="text">debugger should </span>
<span class="post">be </span>
</p>
<p>
<span class="text">called </span>
<span class="post">ogle</span>
</p>
<h3>
<span class="statement">true</span>
</h3>
</body>
<html>
我知道我可以阅读<h1..."text":
h3_tag := doc.Find("h3 .text")
我也知道,我可以添加的内容<h1..."text",以内容<p..."text"与此:
doc.Find("p .text").Before("h3 .text")
^但这命令插入从内容的每一个的情况下,<h1..."text"之前的每一个的情况下<p..."text"。
然后,我发现了如何更接近我想要的:
doc.Find("p .text").First().Before("h3 .text")
^此命令仅在第一个case of (这更接近我想要的)之前插入来自每个单个case of的内容。<h1..."text" <p..."text"
我也尝试过使用goquery'sEach()函数,但是我无法通过该方法更接近我想要的东西(尽管我确定有一种方法可以使用Each(),对吗?)
我最大的问题是我无法弄清楚如何将每个实例<h1..."text"与<p..."text"紧随其后的实例相关联。
如果有帮助,<h1..."text"是永远其次<p..."text"在网页上,我试图解析。
我的脑子没水了。有没有围棋天才知道如何做到这一点并愿意解释它?提前致谢。
慕后森
相关分类