2

YouTubeのindex.htmlからビデオ名を抽出する必要があります。ファイルを小さなチャンクに分割することができました。各チャンクには1つのビデオリストが含まれていますが、ビデオタイトルを抽出できないようです。私の教授は次のコマンドを提供しましたが、この状況ではそれを機能させることができないようです。

number=`expr "$s" : ".*\/\([0-9,]*\)\/"`; echo $number # will print 250,4211

完全にはわかりませんが、ビデオのタイトルと周囲のテキストの間にスペースがないため、この方法を機能させるのに問題があると思います。これは、タイトルを抽出するために必要なもののサンプルです。

<li class="video-list-item "><a href="/watch?v=9BbgvlgDQMg&amp;feature=g-sptl&amp;cid=inp-hs-edt" class="video-list-item-link yt-uix-sessionlink" data-sessionlink="ei=CMzmroaB5bICFRiXIQoda3kX5g%3D%3D&amp;feature=g-sptl%26cid%3Dinp-hs-edt" ><span class="ux-thumb-wrap contains-addto "><span class="video-thumb ux-thumb yt-thumb-default-120 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img src="http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin" data-thumb="//i2.ytimg.com/vi/9BbgvlgDQMg/default.jpg" width="120" ><span class="vertical-align"></span></span></span></span><span class="video-time">3:51</span>

このテキストのチャンクから、引用符なしで「リルバック」ゴールデンゲートウェイ「ベニスビーチカリフォルニアYAKFILMSスーパーボウル2012マドンナメンフィスジューキン」を抽出する必要があります。

4

2 に答える 2

1

bash正規表現を使用して\<img.*alt=\"([^\"]*)\"、img要素から代替テキストを抽出できます。

例:

$ cat file
<li class="video-list-item "><a href="/watch?v=9BbgvlgDQMg&amp;feature=g-sptl&amp;cid=inp-hs-edt" class="video-list-item-link yt-uix-sessionlink" data-sessionlink="ei=CMzmroaB5bICFRiXIQoda3kX5g%3D%3D&amp;feature=g-sptl%26cid%3Dinp-hs-edt" ><span class="ux-thumb-wrap contains-addto "><span class="video-thumb ux-thumb yt-thumb-default-120 "><span class="yt-thumb-clip"><span class="yt-thumb-clip-inner"><img src="http://s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif" alt="Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin" data-thumb="//i2.ytimg.com/vi/9BbgvlgDQMg/default.jpg" width="120" ><span class="vertical-align"></span></span></span></span><span class="video-time">3:51</span>

$ line="$(cat file)"

$ if [[ "$line" =~ \<img.*alt=\"([^\"]*)\" ]]
then
  echo "${BASH_REMATCH[1]}"
fi
Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin

アップデート:

使用expr

$ expr "$line" : '.*<img.*alt=\"\([^\"]*\)\".*'
Lil&#39; Buck &quot;Golden Gateway&quot; Venice Beach California YAK FILMS Super Bowl 2012 Madonna Memphis Jookin
于 2012-10-03T14:37:37.393 に答える
0

割り当てで正規表現を使用することが必須だと思います...そうでない場合は、xmlパーサーを使用します...

しかし、はいの場合は、正規表現のバディと一緒に行くことをお勧めします

RegexBuddyを使用すると、推測を行うことなく、意図したとおりの正規表現を簡単に作成できます。それでも、正規表現パターンをテストして、必要なものと一致し、不要なものと一致しないことを100%確認する必要があります。

于 2012-10-03T14:28:03.893 に答える