ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 911|回复: 5

[求助] 提取网页乱码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2015-1-7 11:37 | 显示全部楼层 |阅读模式
本帖最后由 go0517 于 2015-1-7 11:38 编辑

帮忙看一下,怎么修改,提取的数据,汉字才不会乱码。感谢。


Sub test()
    Dim strUrl As String, objHttp As Object, strRtn, arrRtn, i%, j, bytes2BSTR, TT
    strUrl = "http://www.bjciq.gov.cn:8989/data.do?cmd=query&id=1" & Replace(strUrl, "http://", "") '
    Set objHttp = CreateObject("Microsoft.XMLHTTP")
    objHttp.Open "GET", strUrl, False  
    objHttp.Send

    Rows(1).NumberFormatLocal = "@"     '第二行设置为文本格式
    strRtn = Split(objHttp.responsetext, "<table", -1, vbTextCompare)(8)    '取 "<table" 之后的内容
    strRtn = Split(strRtn, "</tr>", -1, vbTextCompare)    '以 "</tr>" 作为分隔符把数据分为行数组

    For i = 0 To UBound(strRtn)     '行循环
        arrRtn = Split(strRtn(i), "<td>", -1, vbTextCompare)        '各个字段以 "<td>" 分隔

        For j = 1 To UBound(arrRtn) '列循环
            Cells(i + 1, j + 1) = Replace(Split(arrRtn(j), "</td>", -1, vbTextCompare)(0), " ", "", 1, -1, vbTextCompare)
            Next j
    Next i
    Set objHttp = Nothing
End Sub

TA的精华主题

TA的得分主题

发表于 2015-1-7 14:02 | 显示全部楼层
用IE吧
  1. Sub test()
  2. Set ieA = CreateObject("InternetExplorer.Application")
  3. ieA.Visible = False

  4. ieA.navigate "http://www.bjciq.gov.cn:8989/data.do?cmd=query&id=1"
  5. Do Until ieA.Readystate = 4
  6.    DoEvents
  7. Loop

  8. Set tr = ieA.document.getElementsByTagName("tr")
  9. i = 0
  10. For Each t In tr
  11.     If t.Title <> "" Then
  12.        i = i + 1
  13.        For j = 0 To t.Cells.Length - 1
  14.            Cells(i, j + 1) = t.Cells(j).innertext
  15.        Next
  16. End If
  17. Next

  18. ieA.Quit
  19. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2015-1-7 14:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-1-7 14:49 | 显示全部楼层
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

网页的字符集是gb2312,

转码到 utf-8 就行了

TA的精华主题

TA的得分主题

发表于 2015-1-7 16:17 | 显示全部楼层
  1. Sub test()
  2.     Dim strUrl As String, objHttp As Object, strRtn, arrRtn, i%, j, bytes2BSTR, TT
  3.     strUrl = "http://www.bjciq.gov.cn:8989/data.do?cmd=query&id=1" & Replace(strUrl, "http://", "") '
  4.     Set objHttp = CreateObject("Microsoft.XMLHTTP")
  5.     objHttp.Open "GET", strUrl, False
  6.     objHttp.Send
  7.     Rows(1).NumberFormatLocal = "@"     '第二行设置为文本格式
  8.     strRtn = Split(StrConv(objHttp.ResponseBody, vbUnicode), "<table", -1, vbTextCompare)(8)    '取 "<table" 之后的内容
  9.     strRtn = Split(strRtn, "</tr>", -1, vbTextCompare)    '以 "</tr>" 作为分隔符把数据分为行数组

  10.     For i = 0 To UBound(strRtn)     '行循环
  11.         arrRtn = Split(strRtn(i), "<td>", -1, vbTextCompare)        '各个字段以 "<td>" 分隔

  12.         For j = 1 To UBound(arrRtn) '列循环
  13.             Cells(i + 1, j + 1) = Replace(Split(arrRtn(j), "</td>", -1, vbTextCompare)(0), " ", "", 1, -1, vbTextCompare)
  14.             Next j
  15.     Next i
  16.     Set objHttp = Nothing
  17. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2015-1-7 17:17 | 显示全部楼层
本帖最后由 go0517 于 2015-1-8 09:23 编辑

谢谢各位大神的帮忙
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 09:22 , Processed in 0.043482 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表