1
我使用Gumbo
解析CP1251
中的網頁。我已將文本轉換爲UTF-8
並將它發送給了gumbo解析器。我有問題,獲取文本里面A
鏈路與A區內的HTML文本A
node->v.text.text
我得到的輸出奇怪的符號,而源在控制檯中正確顯示。 我使用Qt 5.2
和libiconv
進行轉換。
需要我將節點文本轉換爲本地代碼頁或我做錯了什麼?
獲取頁面CP1251
QByteArray barrData = pf->getData();
size_t dstlen = 1048576;
char buf[dstlen];
memset((char*)buf, 0, dstlen);
char* pIn = barrData.data();
char* pOut = (char*)buf;
size_t srclen = barrData.size();
iconv_t conv = iconv_open("UTF-8", "CP1251");
iconv(conv, &pIn, &srclen, &pOut, &dstlen);
iconv_close(conv);
GumboOutput* output = gumbo_parse(buf);
parsePage(output->root);
gumbo_destroy_output(&kGumboDefaultOptions, output);
解析
if (node->v.element.tag == GUMBO_TAG_DIV && (_class = gumbo_get_attribute(&node->v.element.attributes, "class")))
{
if (QString(_class->value) == "catalog-item-title")
{
qDebug() << "parsePage: found product, parsing...";
GumboVector* children = &node->v.element.children;
for (int i = 0; i < children->length; ++i)
{
GumboNode* node = static_cast<GumboNode*>(children->data[i]);
GumboAttribute* href;
GumboAttribute* id;
if (node->v.element.tag == GUMBO_TAG_A &&
(href = gumbo_get_attribute(&node->v.element.attributes, "href"))
)
{
char buf[1024];
memset(buf, 0, 1024);
int i = node->v.text.original_text.length;
memcpy(buf, node->v.text.original_text.data, i);
QString strTitle = buf;
Q_ASSERT(node->v.text.original_text.length > 0);
qDebug() << "parsePage: found product" << strTitle << href->value;
break;
}
}
}
}
來源頁面文字:
<div class="catalog-item-title"><a href="/textile/postelnoe-bele/korolevskoe-iskushenie-perkal/izmir_2/">Измир 2</a></div>
出於好奇,你從哪裏找到Gumbo的文檔? GitHub頁面沒有鏈接到它,我通過Google http://matze.github.io/clib-doc/gumbo-parser/index.html找到的這個鏈接也沒有太大的幫助:例如,什麼是GumboOutput結構看起來像,我該如何使用它? – Michael 2015-04-22 17:37:34
你的代碼很有用,我不得不投票! – 2016-06-21 23:28:39