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。



  1. class CHtmlHelper
  2. {
  3. public:
  4. //
  5. static LPCTSTR SkipSpace(LPCTSTR lpszString);
  6. static LPCTSTR SkipLetter(LPCTSTR lpszString,TCHAR cbLetter);
  7. static LPCTSTR ArriveLetter(LPCTSTR lpszString,TCHAR cbLetter);
  8. static UINT CalculateStringLen(LPCTSTR lpszString,TCHAR* lpszEnd);
  9. static UINT CalculateRangeLen(LPCTSTR lpszString,LPCTSTR lpszBegin,LPCTSTR lpszEnd);
  10. static UINT CalculateTagStringLen(LPCTSTR lpszString,TCHAR cbBegin,TCHAR cbEnd);
  11. static UINT CalculateScriptStringLen(LPCTSTR lpszString,TCHAR cbEnd);
  12. static void TrimString(LPCTSTR lpszString,LPCTSTR lpszClean);
  13. protected:
  14. struct tagHtmlTagAttribute
  15. {
  16. LPTSTR s_pszKey;
  17. LPTSTR s_pszValue;
  18. struct tagHtmlTagAttribute * s_pstNext;
  19. };
  20. struct tagHtmlNode
  21. {
  22. LPTSTR s_pszTag;
  23. LPTSTR s_pszContent;
  24. tagHtmlTagAttribute * s_pstTagAttribute;
  25. struct tagHtmlNode * s_pstNext;
  26. };
  27. public:
  28. CHtmlHelper(void);
  29. virtual ~CHtmlHelper(void);
  30. protected:
  31. //
  32. tagHtmlNode * AllocHtmlNode(UINT nTagLen,UINT nContentLen);
  33. void FreeHtmlNode(tagHtmlNode * lpstNode);
  34. void LinkHtmlNode(tagHtmlNode * lpstNode);
  35. void CleanupHtmlNode();
  36. //
  37. tagHtmlTagAttribute * AllocHtmlTagAttribute(UINT nKeyLen,UINT nValueLen);
  38. void FreeHtmlTagAttribute(tagHtmlTagAttribute * lpstTagAttribute);
  39. void AttachHtmlTagAttribute(tagHtmlNode * lpstNode,tagHtmlTagAttribute * lpstTagAttribute);
  40. void CleanupHtmlTagAttribute(tagHtmlNode * lpstNode);
  41. public:
  42. enum {CHARSET_UTF8,CHARSET_UNICODE,CHARSET_MULTIBYTE}TextCharset;
  43. public:
  44. //
  45. void AutoTakeSnapshot(PBYTE lpszString,UINT nStringLen);
  46. void TakeSnapshot(PBYTE lpszString,UINT nStringLen,UINT nFromCharset );
  47. void DeleteSnapshot();
  48. //
  49. virtual void Parse();
  50. virtual void Parse2();
  51. protected:
  52. //
  53. void SplitTagAttribute(tagHtmlNode * lpstNode);

  54. protected:
  55. //
  56. LPTSTR m_pszSnapshotBuffer;
  57. UINT m_nSnapshotBufferLen;
  58. UINT m_nSnapshotStringLen;
  59. //
  60. tagHtmlNode * m_pstHead;
  61. tagHtmlNode * m_pstPrev;

  62. };


...全文
给本帖投票
7621 177 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部