Даалгавар
(Шалгах хугацаа - 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-д байгаа үгнүүд дундаа хоосон зайтай байвал энэ нэрээ файл үүсгэхэд зөвхөн эхний үгээр л файл үүснэ.
(Шалгах хугацаа - 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" # гэж бичих хэрэгтэй.
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> /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> /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> /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> /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