Thursday, October 8, 2009

SW302 - Лабораторын ажил 4

Даалгавар
(Шалгах хугацаа - VIII долоо хоног. ~/sw302/lab04/robot.sh -д скриптээ хадгалаарай.)

Энэ ажлаар бид sed, grep болон curl командуудыг ашиглан энгийн robot маягийн програм бичих болно.

Эхлээд http://www.google.com -с "programming" үгийг агуулсан бүх сайтын линкийг эхний хуудасны үр дүнгээс аваад бүгд рүү хандаж html хариуг хүлээж аваад агуулгыг нь ~/sw302/lab04/(сайтын title tag-д байрлах нэр).html файлд хадгална.

Энэ програмыг бичихэд grep, sed, curl командууд хэрэг болох учир эхлээд эдгээрийн manpage -г уншаад үзээрэй. curl -ийн хувьд энэ нь вэб болон бусад сервэр рүү янз бүрийн (GET, POST, PUT, ...) хүсэлт илгээн мэдээлэл дамжуулж болдог нэлээн өргөн боломжтой команд юм. Бичигдэх хэлбэр нь:

curl [сонголт] [URL...]

Мөн дундаа хоосон зайтай зүйлтэй ажиллахдаа заавал "" тавьж байхгүй бол шелл ойлгохгүй шүү. Жишээ нь title tag-д байгаа үгнүүд дундаа хоосон зайтай байвал энэ нэрээ файл үүсгэхэд зөвхөн эхний үгээр л файл үүснэ.


filename="My programming"
ls > $filename # энэ мөрийг шелл ls > My progamming болгоод дараа нь ажиллуулна. Тэгэхэд ls командын  
# үр дүн My нэртэй файл руу бичигдэх болно. Тиймээс  
ls > "$filename" # гэж бичих хэрэгтэй.


Тэгэхээр эхлээд www.google.com -с programming гэдэг үгийг хайх командаа бичнэ. Энд user-agent нь Mozilla гэхгүй бол гүүгл "роботуудад үйлчлэхгүй" гэж алдаа гаргана шүү.


curl -A "Mozilla/4.0" "http://www.google.com/search?hl=en&q=programming&btnG=Google+Search&aq=f&oq=" 2> /dev/null


Ингээд ямар ч байсан тексттэй боллоо. Одоо эндээсээ бүх < а ... > < / а > tag-уудыг ялгаж авах хэрэгтэй. grep болон sed програмууд бүгд мөр хандалттай гэдгийг мартаж болохгүй. URL -аа шүүхийн тулд янз бүрийн арга ашиглаж болно. Миний энд бичсэн арга хамгийн сайн арга мэдээж биш. Эхлээд бүх


< а -гийн өмнө мөр шилжүүлэх тэмдэгт нэмнэ.

curl -A "Mozilla/4.0" "http://www.google.com/search?hl=en&q=programming&btnG=Google+Search&aq=f&oq=" 2&gt; /dev/null | sed -re "s/<а/\n<а/g"


Дараа нь


curl -A "Mozilla/4.0" "http://www.google.com/search?hl=en&q=programming&btnG=Google+Search&aq=f&oq=" 2&gt; /dev/null | sed -re "s/<а/\n<а/g" | grep "<а"


Одоо гол URL уудаа шүүж авъя. Өөрөөр хэлбэл холбоосоос зөвхөн URL-г нь авъя.

curl -A "Mozilla/4.0" "http://www.google.com/search?hl=en&q=programming&btnG=Google+Search&aq=f&oq=" 2&gt; /dev/null | sed -re "s/<а/\n<а/g" | grep "<а" | sed -re 's/.*<а href="([^"]*)"[^>]*>.*/\1/g'

Үүний дараа энэ дунд байгаа гүүглийн өөрийнх нь URL уудыг хасахын тулд


curl -A "Mozilla/4.0" "http://www.google.com/search?hl=en&q=programming&btnG=Google+Search&aq=f&oq=" 2&gt; /dev/null | sed -re "s/<а/\n<а/g" | grep "<а" | sed -re 's/.*<а href="([^"]*)"[^>]*>.*/\1/g' | grep ^http | grep -v search\? 


Энд grep -v search\? нь "search?" ороогүй буюу гүүглийн биш мөрнүүдийг ялгаж байна. Үүнээс цааш хэсгийг өөрсдөө гүйцээнэ. Асуух зүйл гарвал мөн илүү сайн хувилбар байвал comment үлдээгээрэй.

No comments:

Post a Comment