Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于元素列表从网页中提取特定数据_Excel - Fatal编程技术网

Excel 基于元素列表从网页中提取特定数据

Excel 基于元素列表从网页中提取特定数据,excel,Excel,我正在尝试用Excel创建一个工具,从Amazon和Kindle(电子书)部分获取数据。亚马逊在他们的电子书上使用ID,这些ID可以在他们的URL中看到。例如,B0192CTMYG是“哈利波特与魔法石”,如您在此处所见: 我想做的是能够粘贴这些ID的列表,并使用此工具检索2条信息: 1.价格。(如有的话) 2.是否可以作为Kindle的一部分免费阅读 理想情况下,该工具不仅可以在amazon.com上查看,还可以在amazon.co.uk、amazon.fr、amazon.de等网站上查看 我真

我正在尝试用Excel创建一个工具,从Amazon和Kindle(电子书)部分获取数据。亚马逊在他们的电子书上使用ID,这些ID可以在他们的URL中看到。例如,B0192CTMYG是“哈利波特与魔法石”,如您在此处所见:

我想做的是能够粘贴这些ID的列表,并使用此工具检索2条信息: 1.价格。(如有的话) 2.是否可以作为Kindle的一部分免费阅读

理想情况下,该工具不仅可以在amazon.com上查看,还可以在amazon.co.uk、amazon.fr、amazon.de等网站上查看

我真的不知道如何开始,或者Excel是否是最好的工具,但它是我最熟悉的工具。话虽如此,我愿意接受建议

谢谢大家!

2016年1月22日第1版

这是我目前拥有的适合我的代码。首先,我选择单元格修改作为代码的触发器。这要求您: 1.转到“Visual Basic”,并在两个下拉菜单中分别选择“工作表”和“更改”。 2.将“B1单元”定义为ASIN,将B2单元定义为“In_KU?”

预期结果是在B1中键入ID,B2将返回HTML内部文本

以下是迄今为止的代码:

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row = Application.Workbooks("workbookname").Worksheets("sheet1").Range("ID").Row And _
Target.Column = Application.Workbooks("workbookname").Worksheets("sheet1").Range("ID").Column Then

Dim IE As New InternetExplorerMedium
IE.Visible = False
IE.navigate "http://www.amazon.co.uk/dp/" & Application.Workbooks("workbookname").Worksheets("sheet1").Range("ID").Value

Do
DoEvents
Loop Until IE.readyState = READYSTATE_COMPLETE

Dim doc As HTMLDocument
Set doc = IE.document
Dim BB As String
BB = Trim(doc.getElementsByTagName("span")(220).innerText)

Application.Workbooks("workbookname").Worksheets("sheet1").Range("In_KU?").Value = BB
IE.Quit
MsgBox ("Finished")

End If

End Sub
(“span”)(220)
没有返回我需要的值,即“免费读取”。在亚马逊的每个细节页面上都有大约13k行的HTML,我不知道该如何特别说明

2016年2月8日第2版

下面是使用单个值的代码。我已重命名ID(ASIN):


因此,当一个ASIN被添加到单元格A3中时,当Kindle Unlimited徽章存在时,它会返回“[object HTMLImageElement]”。现在我真正需要的是,它不仅适用于单个细胞,而且适用于一系列细胞。因此,如果我在A3:A53中粘贴50个ASIN,它会为所有拥有它的人返回“[object HTMLImageElement]”,如果没有,则什么也不会返回。我想我可能在某个地方需要一个“On Error”语句。

此VBA sub将在网页中查找链接。您需要查看正在查看的页面后面的代码,以便对其进行相应的修改,但这只是一个开始。您需要通过“工具/引用”添加对“Microsoft HTML对象库”和“Microsoft XML,v6.0”(或不同版本,具体取决于您的Excel版本)的引用:


End Sub

我假设您知道如何在Excel中创建VBA宏。如果没有,请告诉我们。为什么要使用基于
InternetExplorer.Application
的scrape的
Microsoft XML,v6.0
?可能不需要它。我做了不同的例子,可能是一个无关的参考…你好!谢谢你!但是,我不清楚如何完成这一部分:“您需要通过“工具/引用”添加对“Microsoft HTML对象库”和“Microsoft XML,v6.0”(或不同版本,具体取决于您的Excel版本)的引用:”。另外,我有点不确定在哪里添加页面源代码。你能告诉我使用《哈利波特》这本书的最初信息是什么样子吗?(很抱歉,我对所有这些都很陌生,非常感谢您迄今为止的帮助!若要添加引用,请转到VBA for Applications窗口。单击功能区上的“工具”,然后单击“引用”。您应该只需要“Microsoft HTML对象库”。
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Row = Application.Workbooks("bretttest - Copy").Worksheets("sheet1").Range("ASIN").Row And _
Target.Column = Application.Workbooks("bretttest - Copy").Worksheets("sheet1").Range("ASIN").Column Then

Dim IE As New InternetExplorerMedium
IE.Visible = False
IE.navigate "http://www.amazon" & Application.Workbooks("bretttest - Copy").Worksheets("sheet1").Range("B1").Value & "/dp/" & Application.Workbooks("bretttest - Copy").Worksheets("sheet1").Range("ASIN").Value

Do
DoEvents

Loop Until IE.readyState = READYSTATE_COMPLETE

Dim doc As HTMLDocument
Set doc = IE.document
Dim BB As String

BB = Trim(doc.getElementById("kuBadge"))

Application.Workbooks("bretttest - Copy").Worksheets("sheet1").Range("In_KU?").Value = BB

IE.Quit
MsgBox ("Finished")

End If

End Sub
Public Sub parsePage()
  Dim ie As Variant
  Set ie = CreateObject("InternetExplorer.Application")
  ie.Visible = False

  Dim DOC As HTMLDocument
  Dim idx As Integer
  Dim data As String

  Dim links As Variant
  Dim lnk As Variant

  ie.navigate enter the url here
  Do
    DoEvents
  Loop Until ie.ReadyState = 4
  Set DOC = ie.Document

  Set links = DOC.getElementsByTagName("li")
  cnt = 0
  For Each lnk In links
    data = lnk.innerText
  Next
Wend
Set ie = Nothing