HTML解析 C/C++ (散分)

「已注销」 2011-10-26 10:10:20
加精
1:看着好多人在找这方面的资料,就发一版今年国庆节写的类,可以解析99%的HTML页面。由于申请过多的内存和过多的内存拷贝,效率嘛肯定不太好。注释少了些(可以说没有),代码呢也糙了些(已经在重构了)。各位将就着看吧。

2:里面用到几个WINDOWS API函数,如果想在其它系统使用,请自行更换成标准C或标准C++函数。

3:两个类:一个基础类(CHtmlHelper,解析HTML文件,生成元件链表),一个功能类(CHtmlAnalyzer,转换页面编码为程序所使的编码,再调用CHtmlHelper进行解析 )。

----顺带打一下广告:参加工作快5年了,想换一份工作,C/C++方面的。邮箱:hmm7e_z@126.com。



class CHtmlHelper
{
public:
//
static LPCTSTR SkipSpace(LPCTSTR lpszString);
static LPCTSTR SkipLetter(LPCTSTR lpszString,TCHAR cbLetter);
static LPCTSTR ArriveLetter(LPCTSTR lpszString,TCHAR cbLetter);
static UINT CalculateStringLen(LPCTSTR lpszString,TCHAR* lpszEnd);
static UINT CalculateRangeLen(LPCTSTR lpszString,LPCTSTR lpszBegin,LPCTSTR lpszEnd);
static UINT CalculateTagStringLen(LPCTSTR lpszString,TCHAR cbBegin,TCHAR cbEnd);
static UINT CalculateScriptStringLen(LPCTSTR lpszString,TCHAR cbEnd);
static void TrimString(LPCTSTR lpszString,LPCTSTR lpszClean);
protected:
struct tagHtmlTagAttribute
{
LPTSTR s_pszKey;
LPTSTR s_pszValue;
struct tagHtmlTagAttribute * s_pstNext;
};
struct tagHtmlNode
{
LPTSTR s_pszTag;
LPTSTR s_pszContent;
tagHtmlTagAttribute * s_pstTagAttribute;
struct tagHtmlNode * s_pstNext;
};
public:
CHtmlHelper(void);
virtual ~CHtmlHelper(void);
protected:
//
tagHtmlNode * AllocHtmlNode(UINT nTagLen,UINT nContentLen);
void FreeHtmlNode(tagHtmlNode * lpstNode);
void LinkHtmlNode(tagHtmlNode * lpstNode);
void CleanupHtmlNode();
//
tagHtmlTagAttribute * AllocHtmlTagAttribute(UINT nKeyLen,UINT nValueLen);
void FreeHtmlTagAttribute(tagHtmlTagAttribute * lpstTagAttribute);
void AttachHtmlTagAttribute(tagHtmlNode * lpstNode,tagHtmlTagAttribute * lpstTagAttribute);
void CleanupHtmlTagAttribute(tagHtmlNode * lpstNode);
public:
enum {CHARSET_UTF8,CHARSET_UNICODE,CHARSET_MULTIBYTE}TextCharset;
public:
//
void AutoTakeSnapshot(PBYTE lpszString,UINT nStringLen);
void TakeSnapshot(PBYTE lpszString,UINT nStringLen,UINT nFromCharset );
void DeleteSnapshot();
//
virtual void Parse();
virtual void Parse2();
protected:
//
void SplitTagAttribute(tagHtmlNode * lpstNode);

protected:
//
LPTSTR m_pszSnapshotBuffer;
UINT m_nSnapshotBufferLen;
UINT m_nSnapshotStringLen;
//
tagHtmlNode * m_pstHead;
tagHtmlNode * m_pstPrev;

};


...全文
7542 177 打赏 收藏 转发到动态 举报
写回复
用AI写文章
177 条回复
切换为时间正序
请发表友善的回复…
发表回复
星丶夜影 2014-06-07
  • 打赏
  • 举报
回复
好东西本人新手,老师正让我们做一个发帖的软件,有了这个就有了希望啊
亚巴顿 2014-01-26
  • 打赏
  • 举报
回复
完全看不懂,都是if for,不过仔细看看再说。
lvchakele 2013-11-04
  • 打赏
  • 举报
回复
这个必须学习,虽然是两年之前的帖子了,下来学习学习,多谢前辈
善古 2012-08-06
  • 打赏
  • 举报
回复
学习一下解析思路..楼主辛苦了...
善古 2012-08-06
  • 打赏
  • 举报
回复
大神啊..
METEOR_T 2012-07-12
  • 打赏
  • 举报
回复
学习了
1nullptr 2012-07-10
  • 打赏
  • 举报
回复
顶顶,学习了
Ronald_Z 2011-11-21
  • 打赏
  • 举报
回复
支持一个
Gloveing 2011-11-20
  • 打赏
  • 举报
回复
不容易啊、、
ysjyniiq 2011-11-20
  • 打赏
  • 举报
回复
xilyu 2011-11-20
  • 打赏
  • 举报
回复
good 学习了。。。。哈哈哈
chunyou128 2011-11-15
  • 打赏
  • 举报
回复
cntilab 2011-11-15
  • 打赏
  • 举报
回复
正好需要这个啊,感谢楼主啊
wuhq030710914 2011-11-01
  • 打赏
  • 举报
回复
关心lz花了多长时间呢?
xbirdl 2011-10-31
  • 打赏
  • 举报
回复
很好,学习了。
泥鳅不是鱼 2011-10-31
  • 打赏
  • 举报
回复
正在做这个!谢谢分享!
wahaha123x 2011-10-31
  • 打赏
  • 举报
回复
如果我是想解析,我保存下来的html文件。数据是不规则的。那我要怎么解析呢?
如 :http://www.lyngsat.com/ea2.html 这个网页.
我只需要类似 3975 R 这样的数据。还有 33483-7/8

愿指教
Amateur0 2011-10-31
  • 打赏
  • 举报
回复
xianmu
ppters 2011-10-31
  • 打赏
  • 举报
回复
看不懂啊!!!
加载更多回复(132)

3,055

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧