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 17:12:22 浏览: 77
这是一个 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: 'builtin_function_or_method' object has no attribute 'dim'
引用中提到的错误`AttributeError: 'builtin_function_or_method' object has no attribute 'dim'`是因为你在使用`dim`属性时出现了错误。这个错误通常是因为你将一个函数或方法当作了一个对象来使用。在PyTorch中,`dim`是用来获取张量的维度的属性,而不是一个方法或函数。所以当你尝试使用`dim`时,会出现该错误。
解决这个问题的方法是,确保你正在操作的对象是一个张量,而不是一个函数或方法。你可以通过检查对象的类型来确认,使用`type()`函数可以帮助你判断对象的类型。如果你确定你的对象是一个张量,那么你可以使用`size()`方法来获取张量的维度。
variable_parameters *= dim.value AttributeError: 'int' object has no attribute 'value'
根据您提供的引用内容,我可以给出以下回答:
在TensorFlow中,'int'对象没有'value'属性,因此当您尝试使用'int'对象的'value'属性时,会出现AttributeError: 'int' object has no attribute 'value'的错误。
要解决这个问题,您需要确保您正在使用的对象是TensorFlow中的张量对象,而不是普通的Python整数对象。张量对象具有'value'属性,可以访问其值。
请确保您在使用变量时,将其定义为TensorFlow的张量对象。例如,在使用变量的乘法操作时,确保变量是张量对象,而不是普通的整数对象。
以下是一个示例代码,演示了如何正确使用TensorFlow的张量对象进行乘法操作:
```python
import tensorflow as tf
# 定义一个整数变量
variable_parameters = tf.Variable(10)
# 定义一个维度张量
dim = tf.constant(5)
# 使用张量对象进行乘法操作
result = variable_parameters * dim
# 打印结果
print(result)
```
在上面的示例中,我们首先将整数变量`variable_parameters`定义为TensorFlow的变量对象。然后,我们定义了一个维度张量`dim`。最后,我们使用张量对象进行乘法操作,并将结果打印出来。
这样,您就可以避免出现AttributeError: 'int' object has no attribute 'value'的错误。