Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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,然后转换为word文档_Excel_Web Scraping_Vba - Fatal编程技术网

尝试将网站从网站中刮取到excel,然后转换为word文档

尝试将网站从网站中刮取到excel,然后转换为word文档,excel,web-scraping,vba,Excel,Web Scraping,Vba,所以我被指派从一个网站上搜集一些信息。这些信息非常丰富,我需要点击各个“阅读更多”按钮才能获得完整的信息。单击“阅读更多”后,我需要返回上一页,单击第二项上的“阅读更多”。然后冲洗并重复,直到我得到所需的所有信息。一旦我获得了所有信息,就需要将其转换为word文档 导航到URL,我知道怎么做 点击“阅读更多”的“按钮”,问题是有70多个“阅读更多”的按钮,我不知道如何区分它们 一旦我有了所有的信息,只需要几条信息,我怎样才能让它变得优秀 信息收集到excel后,如何将其转换为word 代码示例:

所以我被指派从一个网站上搜集一些信息。这些信息非常丰富,我需要点击各个“阅读更多”按钮才能获得完整的信息。单击“阅读更多”后,我需要返回上一页,单击第二项上的“阅读更多”。然后冲洗并重复,直到我得到所需的所有信息。一旦我获得了所有信息,就需要将其转换为word文档

  • 导航到URL,我知道怎么做
  • 点击“阅读更多”的“按钮”,问题是有70多个“阅读更多”的按钮,我不知道如何区分它们
  • 一旦我有了所有的信息,只需要几条信息,我怎样才能让它变得优秀
  • 信息收集到excel后,如何将其转换为word
  • 代码示例:

    'Bring IE up and navigate to page
          Set ie = New SHDocVw.InternetExplorerMedium
          ie.Visible = True
          'Set the URL
          strURL = "my url"
          'Navigate to url
          ie.Navigate strURL
          'Wait for the page to show up
    
    按钮,点击

    我对Vba的excel选项相当陌生,我相信有更简单的方法,但这是我应该做的。非常感谢任何帮助或提示


    URL是

    ,所以这比预期的要复杂,因为我在获取整个结果集时遇到了问题。最后,我使用了它,因为它更好地处理了初始页面加载,并且我没有收到关于cookies之类的重复警告。老实说,这可能是因为我使用了Chrome驱动程序!当然,可以更改驱动程序,使其成为另一种受支持的浏览器类型

    代码:

    Option Explicit
    
    '281 Results on 2018-05-04 '16:00
    Public Sub test()
    
        Dim d As WebDriver
        Set d = New ChromeDriver
    
        With d
            .Start "Chrome"
            .Get "https://www.legacy.com/obituaries/commercialappeal/browse?view=name"
    
            Dim elements  As List
            Set elements = d.FindElementsByTag("a").Attribute("href")
    
            Dim hrefCollection As New Collection, i As Long
    
            For i = 1 To elements.Count
                If InStr(elements(i), "https://www.legacy.com/obituaries/commercialappeal/obituary.aspx?n=") > 0 Then
                    If i = 1 Then
                        hrefCollection.Add elements(i)
                    ElseIf i > 1 And elements(i) <> elements(i - 1) Then
                        hrefCollection.Add elements(i)
                    End If
                End If
            Next i
        End With
    
        Dim wrdApp As Object, wrdDoc As Object
        Set wrdApp = CreateObject("Word.Application")
        wrdApp.Visible = True
    
        Set wrdDoc = wrdApp.Documents.Add
    
        With wrdApp.ActiveDocument.PageSetup
            .Orientation = 1                         'wdOrientLandscape
            .TopMargin = wrdApp.InchesToPoints(0.98)
            .BottomMargin = wrdApp.InchesToPoints(0.98)
            .LeftMargin = wrdApp.InchesToPoints(0.98)
            .RightMargin = wrdApp.InchesToPoints(0.98)
        End With
    
        With wrdDoc
            .Styles.Add ("SHeading")
            .Styles.Add ("StdText")
    
            With .Styles("SHeading").Font
                .Name = "Arial"
                .Size = 14
                .Bold = False
                .Underline = True
            End With
            With .Styles("StdText").Font
                .Name = "Arial"
                .Size = 8
                .Bold = False
                .Underline = False
            End With
        End With
    
        wrdApp.Selection.Collapse Direction:=0       'wdCollapseEnd
    
        For i = 1 To 2                               '<== Test example to get two results
            DoEvents
            wrdApp.Selection.TypeParagraph
            wrdApp.Selection.Style = wrdDoc.Styles("SHeading")
            wrdApp.Selection.TypeText Text:=GetInfo(hrefCollection.Item(i), d)
        Next i
    
        '   For Each Item In hrefCollection  ''<== use this above to get all results
        '       DoEvents
        '       wrdApp.Selection.TypeParagraph
        '       wrdApp.Selection.Style = wrdDoc.Styles("SHeading")
        '       wrdApp.Selection.TypeText Text:=GetInfo(hrefCollection.Item(i), d)
        '   Next Item
    
        d.Quit
    End Sub
    
    Public Function GetInfo(ByVal url As String, ByVal d As WebDriver) As String
        With d
            .Get url
            GetInfo = d.FindElementByClass("ObitTextContent").Text
        End With
    End Function
    
    选项显式
    '281 2018-05-04'16:00的结果
    公共子测试()
    dimdaswebdriver
    设置d=新的色度驱动器
    与d
    .启动“Chrome”
    .得到“https://www.legacy.com/obituaries/commercialappeal/browse?view=name"
    将元素设置为列表
    Set elements=d.FindElementsByTag(“a”).Attribute(“href”)
    Dim hrefCollection作为新收藏,我将
    对于i=1到元素。计数
    如果仪表(元件(i),”https://www.legacy.com/obituaries/commercialappeal/obituary.aspx?n=然后>0
    如果i=1,那么
    hrefCollection.添加元素(i)
    ElseIf i>1和元素(i)元素(i-1)则
    hrefCollection.添加元素(i)
    如果结束
    如果结束
    接下来我
    以
    Dim wrdApp作为对象,wrdDoc作为对象
    Set wrdApp=CreateObject(“Word.Application”)
    wrdApp.Visible=True
    设置wrdDoc=wrdApp.Documents.Add
    使用wrdApp.ActiveDocument.PageSetup
    .Orientation=1'WDOrient横向
    .TopMargin=wrdApp.InchesToPoints(0.98)
    .BottomMargin=wrdApp.InchesToPoints(0.98)
    .LeftMargin=wrdApp.InchesToPoints(0.98)
    .RightMargin=wrdApp.InchesToPoints(0.98)
    以
    与wrdDoc
    .Styles.Add(“sheding”)
    .Styles.Add(“StdText”)
    带有.Styles(“sheding”).Font
    .Name=“Arial”
    .尺寸=14
    .Bold=错误
    .Underline=True
    以
    带有.Styles(“StdText”).Font
    .Name=“Arial”
    .Size=8
    .Bold=错误
    .Underline=False
    以
    以
    wrdApp.Selection.collapseend的折叠方向:=0'wdCollapseEnd
    
    对于没有url的i=1到2',很难提供帮助。但是在你的例子中,我会做一个循环来检查所有的按钮,并尝试通过比较class属性或其他东西来获得你想要的按钮。检查HTML代码,因为必须有一些东西可以帮助您识别该按钮的唯一性。这是我需要按下每个查看讣告按钮并提取完整描述的网站。我进一步检查了代码,我相信讣告按钮分离的尊严是“数据反应Id”但我认为它们会随着不同死亡的更新而不断变化。每个讣告按钮都有链接。因此,首先解析这些相关链接,然后使用
    xmlhttp
    request为每个链接创建http请求。就这样。