2

我在所有包含 SEO 内容的电子商务网站的页面上都有一个 div。我想计算该 div 中的单词数。它用于诊断大型爬网中的空页面。

div 始终按如下方式开始:

<div class="box fct-seo fct-text

然后它包含<h1>,<p><a>标签。

然后,显然,它以</div>

我如何使用 SED、AWK、WC 等获取 div 开头和结束 div 之间的所有代码并计算出现的单词数。如果它是 90% 准确,我很高兴。

您必须以某种方式告诉它在</div>它找到第一次关闭之前停止扫描。

这是一个可以使用的示例页面:

http://www.zando.co.za/women/shoes/

非常感激。-P

4

3 回答 3

3

当它变得更复杂时(例如嵌套在该 div 中的 div),正则表达式方法将不再起作用,您需要一个 html 解析器,就像我的Xidel 一样。然后就可以找到文字了

要么用css:

xidel http://www.zando.co.za/women/shoes/  -e 'css(".fct-seo")' | wc -w

或模式匹配:

xidel http://www.zando.co.za/women/shoes/  -e '<div class="box fct-seo fct-text">{.}</div>' | wc -w

它也只会打印文本,而不是 html 标签。(如果您/某人想要它们,您可以添加 --printed-node-format xml 选项)

于 2013-01-10T12:03:49.223 回答
1

尝试:

grep -Pzo '(?<=<div)(.*?\n)*?.*?(?=</div)' -n inputFile.html | sed 's/^[^>]*>//'
于 2013-01-10T12:40:31.777 回答
1

在 Perl 单行中,您可以使用..运算符来指定与您感兴趣的区域的开头和结尾匹配的模式:

$ perl -wne 'print if /<div class="box fct-seo fct-text/ .. /<\/div>/' shoes.html

然后,您可以用 计算单词wc -w

$ perl -wne 'print if /<div class="box fct-seo fct-text/ .. /<\/div>/' shoes.html | wc -w

如果计算 HTML 标记本身中的“单词”会影响到足以影响准确性的数字,则可以使用以下内容从计数中删除它们:

$ perl -wne 'next unless /<div class="box fct-seo fct-text/ .. /<\/div>/; s/<.*?>//g; print' shoes.html | wc -w
于 2013-01-10T11:37:48.693 回答