2013-01-10 11 views
2

我在所有持有SEO內容的電子商務網站的頁面上都有一個div。我想要統計該div中的單詞數量。它用於診斷大型爬網中的空白頁面。BASH - 選擇多行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

回答

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 
+0

很好的回答。答案中的最後一行完美地完成了工作。還有一個問題,我試圖將你的代碼片段集成到BASH循環中。我有一個for循環,其中$ i是被掃描的URL。如何將該URL提供給PERL行? –

+0

您需要一個下載網頁並在標準輸出中發送其內容的命令。你有'GET','wget'或'curl'可用嗎? – Smylers

3

當它得到更加複雜(比如嵌套在該分區的div)正則表達式的方法won't work anymore和你在我Xidel需要一個HTML解析器,等等。然後,你可以找到文本

或者與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節點格式的XML選項)

+0

嗨。從來沒有聽說過xidel,所以謝謝你的介紹。 –

1

嘗試:

grep -Pzo '(?<=<div)(.*?\n)*?.*?(?=</div)' -n inputFile.html | sed 's/^[^>]*>//' 
+0

感謝anishsane,我嘗試了無數greps,從YouTube頻道評論中清除長篇副本/粘貼頁面(gdata api一次只會獲得1個vid,而頁面源不顯示線索評論),只有你的腳本做到了。對我來說,這是一個很好的回顧和學習。謝謝! – p1nesap