Attribute VB_Name = "mdlWebQueryIETable" Option Explicit Sub WebQueryIETable() Dim objIE As Object Dim objIEDOM As Object Dim objTable As Object Dim objTR As Object Dim strURL As String Dim lngRow As Long Dim intTbRow As Integer Dim intCol As Integer Dim intPage As Integer strURL = "http://data.10jqka.com.cn/market/ggsyl/" & "field/syl/order/desc/page/" '把网页赋值给变量strURL Set objIE = CreateObject("InternetExplorer.Application") '创建ie浏览器 objIE.Visible = False '隐藏ie浏览器 Cells.ClearContents '清空用于保存数据的工作表 For intPage = 1 To 5 '使用for...next循环爬取前5个网页的数据 Debug.Print intPage With objIE .Visible = False .navigate strURL & intPage '使用ie对象navigate访问网页,strURL & intPage用于构建网页URL Do Until .readyState = 4 '用do...loop循环等待网页加载完毕 DoEvents Loop Set objIEDOM = .document '用ie对象document属性返回浏览器加载的文档对象,并赋值给对象变量objIEDOM End With Set objTable = objIEDOM.getElementsByTagName("table")(1) '定位网页中待抓取的数据表格 For intTbRow = IIf(intPage = 1, 0, 1) To objTable.Rows.Length - 1 '用for...next循环遍历网页中表格的单元格 Set objTR = objTable.Rows(intTbRow) lngRow = lngRow + 1 For intCol = 0 To objTR.Cells.Length - 1 Cells(lngRow, intCol + 1) = objTR.Cells(intCol).innerText '将网页中表格单元格的innertext属性返回的字符写入工作表中 Next intCol Next intTbRow Next intPage '由于每个网页的查询结果中都有标题行,但是在工作表中保存数据时,只需要保留第一个标题行,因此代码的循环变量的起始值会有所不同。 objIE.Quit Set objIE = Nothing '关闭ie浏览器 Set objIEDOM = Nothing '释放系统资源 Set objTable = Nothing Set objTR = Nothing End Sub
时间: 2023-02-07 21:12:22 浏览: 181
这是一个 VBA 子程序,其中包含了定义变量的语句以及对 Internet Explorer 对象的引用。它似乎是用于从网站获取数据表并将其存储到工作表中。
这个子程序使用了五个变量:objIE、objIEDOM、objTable、objTR、strURL。objIE 和 objIEDOM 是对 Internet Explorer 对象的引用,objTable 和 objTR 是对 HTML 表格和表格行的引用,strURL 是存储要抓取数据的网址的字符串变量。
lngRow 和 intTbRow 是用来跟踪行数的变量,intCol 是用来跟踪列数的变量,intPage 是用来跟踪页面数的变量。
在这个子程序中,网址存储在 strURL 中,然后使用了 CreateObject 函数来创建 Internet Explorer 对象,并将其存储在 objIE 中。接下来,使用了 objIE.document 属性来访问文档对象模型 (DOM),并将其存储在 objIEDOM 中。之后,使用了 objIEDOM.getElementsByTagName("table") 方法来获取页面中的表格,并将其存储在 objTable 中。
然后,使用了循环来遍历表格中的每一行。对于每一行,使用了循环来遍历该行中的每一个单元格。最后,使用了 ActiveSheet.Cells(lngRow, intCol) 语句来将单元格中的数据存储到当前工作表中。
相关问题
AttributeError: 'DataFrame' object has no attribute 'dim'
这个错误通常是因为 `pandas.DataFrame` 没有 `dim` 属性而导致的。可能是代码中出现了 `dim`,但应该使用 `shape` 属性来获取 DataFrame 的形状。你可以将 `dim` 替换为 `shape`,例如:
```python
import pandas as pd
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4], 'C': [5, 6]})
print(df.shape) # 输出 (2, 3)
```
如果你想要获取 DataFrame 的行数和列数,可以使用 `shape` 属性获取元组 (行数, 列数),然后分别取出:
```python
num_rows = df.shape[0] # 获取行数
num_cols = df.shape[1] # 获取列数
```
这样就可以避免 `AttributeError: 'DataFrame' object has no attribute 'dim'` 错误了。
阅读全文