Thursday, September 8, 2011

HTML Parser


HTML кодыг боловсруулж тэр дундаас ямар нэгэн мэдээлэл гаргаж авах ажил надад нэлээн олон удаа тохиолдож байв. Тэрний 1 болох Андройд дээр хийсэн ТВ хөтөлбөрийн програмыг дурдаж болно. Энэ апп нь гөгө-гийн нэг хуудсан дах мэдээллийг авч боловсруулаад утасны санах ойд хадгалснаар интернетгүй үед ажиллаж чаддаг.

Нэг ийм зүйл надад тохиолдсон юм. Хэдэн сарын өмнө програм маань ажиллахаа болив. Гайхаад үзтэл нэг мэдээ оруулагч нь "&" тэмдгийг мэдээн дотроо оруулсан, тэгээд HTML хуудас маань алдаатай боллоо. Апп дээр маань энэ алдаатай XML байна гээд ажиллагаагүй таг зогсов. Тэр үед нэг хэрэглэгч маань уг нь их гоё програм байна, сүүлд ажиллахаа больчихлоо засаад өгөөч гэсэн хүсэлт ирсэн боловчиг би засаагүй. Ийм амархан эвдэрдэг юмыг би засаад яах билээ? дараа нэг нөхөр мэдээ оруулж байхдаа ENTER дарчихвал миний апп дахиад ажиллахаа больчихно.

HTML-ээс мэдээ гаргаж авах үед асуудал ийм л болдог. Тэгээд 1 жижигхэн боловсруулагч таг-нд анхаарал хандуулахгүйгээр хийх гээд оролдсон юм. Уг нь их дажгүй, код нь жижигхэн, ашиглахад амархан.

Энэ хуудсан дээрээс мэдээлэл авах гээд үзье л дээ. Цаана нь байгаа кодыг нь харалгүйгээр. Тэгвэл эхлээд би ямар нэгэн ордны нэрийг хайж олно, дараа нь ард нь байгаа арай уртхан хэмжээний текстийг хайна.

Ммм, тэгвэл телевизийн мэдээтэй хуудсыг бодъё. Эхлээд хэд дэх өдөр, ямар нэгэн телевизийн нэр хайна, тэгээд цаг, хөтөлбөрийн нэр.


Тэгвэл валютын ханшийг веб хуудсан дээрээс авъя. Эхлээд ямар нэгэн валютын нэр хайж олно, ойролцоо нь ямар нэгэн тоо байна уу? хайна, олдсонгүйэ оронд нь дахиад нэг валютын нэр олчихлоо. Энэ нэрний хажууд 2 тоо байна. Бодвол авах, зарах нь юм шиг байна.


Тэгэхлээр та миний хэлэх гээд байгаа санааг ойлгосон байх. Веб сайт дээрх үгнүүд өөр хоорондоо холбоотой. Эдгээр үгнүүдийн холбоосыг нь тодорхойлж өгч болох юм бол бид тэрхүү хуудаснаас хэрэгцээтэй мэдээллээ авч болно. Тэгээд энэ санаагаа хэрэгжүүлэхээр пайтон скрипт бичсэн юм. Энэ скрипт маань бид нарын хайж байгаа үгийг олоод цааш нь лавшруулж мөн дараа нь тааралдаж болох үгнүүдийг хайдаг. Гэхдээ та хайж байгаа үгээ REGEX-ээр тодорхойлж өгөх ёстой. Оллоо.мн-ий нүүр хуудсан дээрээс цаг агаарын мэдээ авах замыг тодорхойлъё:

Нүүр хуудаснаас нь бид нар эхлээд "Цаг агаар" гэдэг үгийг хайна. Харамсалтай нь "Цаг агаар" гэдэг үгний оронд "Цаг агаар" гэсэн бичигтэй зураг байна. Уйлаад яахав хажууханд нь "Улаанбаатар хотод" гэсэн текст байна. Доор нь "Х сарын Х" баруун талд нь урдаа тэмдэгтэй хоёр тоо байна. Regex-ээр бичвэл:

"Улаанбаатар хотод" ----> "\d{1,2} сарын \d{1,2}" ----> "[+-]\d+" ----> "[+-]\d+"

Сүүлийн хоёр тоо нь харгалзан өдөр шөнийг заана. Кодыг маань сонирхож байгаа хүн байвал энэ линкээр ороод татаж аваад "example.sh"-ийг ажиллуулаад үзээрэй.

7 comments:

  1. Тулга блогынхоо нууц үгийг санав бололтой. Би энд нэг вэб кашын проблем нухаад л сууж байна. Тэгэхээр пайтон скриптээрээ уншиж аваад тэрийгээ xml/json хөрвүүлээд нэг url дээр гаргаад тэрийгээ апп-аасаа дуудахаар зохион байгуулж байгаамуу.

    ReplyDelete
  2. Саяхан саналаа :P Ер нь бол 1 тиймэрхүү бодол байна. Parser-аа кодын аргаар биш баазаар удирддаг болгоод кэштэй прокси хийж үздиймүү гээд л.

    ReplyDelete
  3. Gogo дээрээс юм байна тээ? тэгэхээр Gogo-өөс зөвшөөрөл авсан байх тиймүү? тэрний оронд xml гаргаж өгдөг нэг сервис маягын юм үүсгүүл арай хялбар болох байсан гэж бодогдоод болдоггүй

    ReplyDelete
  4. Янзтай. Татаад авчихлаа. Та 2ын regex бичих чадварыг шүтэж амьдрах юмдаа хэхэ

    ReplyDelete
  5. @Hurelhuyag зөвшөөрөл аваагүй. оюуны өмч гэдгийг оюуны бүтээл гэж ойлгодийшд би. би XML-нд дургүй :P
    @Amka Thanks!
    @Өнөржаргал Thanks.

    ReplyDelete
  6. Эрхий хуруу бостол сэрэл хөдөлгөсөн сайхан санаа байна. Бүх зүйлд зориулсан html parser хийж махаа зулгаадаг байсан чинь юу вэ одоо :D

    ReplyDelete