C++:
การวิเคราะห์ HTML
วิธีการ:
C++ ไม่มีความสามารถในการแยกวิเคราะห์ HTML มาให้เบื้องต้น คุณจะต้องใช้ไลบรารีเช่น Gumbo-parser โดย Google หรืออย่างอื่นที่คล้ายคลึงกัน นี่คือตัวอย่างอย่างรวดเร็วโดยใช้ Gumbo-parser:
#include <iostream>
#include <gumbo.h>
void search_for_links(GumboNode* node) {
if (node->type != GUMBO_NODE_ELEMENT) {
return;
}
if (node->v.element.tag == GUMBO_TAG_A) {
GumboAttribute* href = gumbo_get_attribute(&node->v.element.attributes, "href");
if (href) {
std::cout << href->value << std::endl;
}
}
GumboVector* children = &node->v.element.children;
for (unsigned int i = 0; i < children->length; ++i) {
search_for_links(static_cast<GumboNode*>(children->data[i]));
}
}
int main() {
const char* html = "<html><body><a href='https://example.com'>Link</a></body></html>";
GumboOutput* output = gumbo_parse(html);
search_for_links(output->root);
gumbo_destroy_output(&kGumboDefaultOptions, output);
return 0;
}
ผลลัพธ์ตัวอย่าง:
https://example.com
ศึกษาลึกลงไป
การแยกวิเคราะห์ HTML ไม่เคยเป็นเรื่องง่ายใน C++ ในอดีต โปรแกรมเมอร์จะใช้ regex หรือ parser ที่เขียนด้วยมือซึ่งทั้งคู่มีโอกาสเกิดข้อผิดพลาดและใช้งานยาก ในปัจจุบัน ไลบรารีที่มีความเขี้ยวเล็บเช่น Gumbo-parser จัดการกับความซับซ้อนของการแยกวิเคราะห์ ทำให้ง่ายและมีความน่าเชื่อถือมากขึ้น
ทางเลือกอื่น ๆ รวมถึง Tidy, MyHTML, หรือแม้กระทั่งการรวม C++ กับ BeautifulSoup ของ Python ผ่านฟังก์ชัน system
ของ C++ หรือตัวถอดรหัสที่ฝังอยู่
ในด้านการใช้งาน, ไลบรารีเหล่านี้แปลง HTML ไปเป็นต้นไม้ของ Document Object Model (DOM) การเดินทางและจัดการ DOM อนุญาตให้ผู้ใช้สามารถดึงและทำงานกับข้อมูลได้เช่นที่แสดงในส่วนวิธีการ