Я очень новичок в VBA и HTML/XHTML, но через онлайн-исследование и помощь других замечательных членов здесь мне удалось написать код, чтобы вытащить нужные данные. Мне было трудно идентифицировать идентификаторы элементов, которые я хочу, так как они находятся в XHTML, поэтому я думаю, что именно там я его больше всего испортил.XHTML Website Scraping Guidance
Сайт:http://www.usbanklocations.com/banks.php?q=&ct=&ml=30&lc=
Вот что я хочу код, чтобы сделать: Вытащите банка имя, адрес, номер телефона, общая сумма депозитов и Всего активов - давший название банка и город, который я укажите в моем листе excel.
Вот мой код:
Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)
Sub CommunityBanks()
Dim IE As Object, TableResults As Object, webRow As Object, BankName As Variant, page As Long, pageTotal As Long, r As Long
Dim beginTime As Date, i As Long, myvalue As Variant
Set IE = CreateObject("internetexplorer.application")
IE.navigate "http://www.usbanklocations.com/banks.php?name=" & Range("A2").Value & "+Bank&ml=30&lc=" & Range("B2").Value & "%2C+TX"
IE.Visible = True
Do While IE.Busy Or IE.readystate <> 4 '4 = READYSTATE_COMPLETE
DoEvents
Loop
'input bank name into form
'myvalue = InputBox("Enter City. Press okay to begin search", "Bank Search")
'Range("F3").Value = myvalue
'IE.document.getelementbyid("MainContent_txtCity").Value = "LegacyTexas"
'click find button
'IE.document.getelementbyid("MainContent_btn").Click
'Sleep 5 * 1000
IE.document.getelementbytagname("table").getelementsbyclassname("btn").Click
Sleep 5 * 1000
'total pages
pageTotal = IE.document.getelementbyid("lsortby").innertext
page = 0
Do Until page = pageTotal
DoEvents
page = IE.document.getelementbyclassname("lsortby").innertext
With IE.document.getelementbyid("main")
For r = 1 To .Rows.Length - 1
If Not IsArray(BankName) Then
ReDim BankName(7, 0) As Variant
Else
ReDim Preserve BankName(7, UBound(BankName, 2) + 1) As Variant
End If
BankName(0, UBound(BankName, 2)) = .Rows(r).Cells(0).innertext
Next r
End With
If page < pageTotal Then
IE.document.getelementbyclassname("panelpn").Click
beginTime = Now
Application.Wait (Now + TimeValue("00:00:05"))
End If
Loop
For r = 0 To UBound(BankName, 2)
IE.navigate "http://www.usbanklocations.com/" & BankName(0, r)
Do While IE.Busy Or IE.readystate <> 4 '4 = READYSTATE_COMPLETE
DoEvents
Loop
'wait 5 sec. for screen refresh
Sleep 5 * 1000
With IE.document.getelementbytagname("table")
For i = 0 To .Rows.Length - 1
DoEvents
Select Case .Rows(i).Cells(0).innertext
Case "Name:"
BankName(1, r) = .Rows(i).Cells(1).innertext
Case "Location:"
BankName(2, r) = .Rows(i).Cells(1).innertext
Case "Phone:"
BankName(3, r) = .Rows(i).Cells(1).innertext
Case "Branch Deposit:"
BankName(4, r) = Replace(Replace(.Rows(i).Cells(1).innertext, ",", ""), "$", "")
Case "Total Assets:"
BankName(5, r) = Replace(Replace(.Rows(i).Cells(1).innertext, ",", ""), "$", "")
End Select
Next i
End With
Next r
IE.Quit
Set IE = Nothing
'post result on Excel cell
Worksheets(1).Range("A9").Resize(UBound(BankName, 2) + 1, UBound(BankName, 1) + 1).Value = Application.Transpose(BankName)
End Sub
Спасибо заранее! Я был бы очень признателен за любую помощь.
[ToS for usbanklocations.com] (http://www.usbanklocations.com/terms-of-use.php) гласит, что пользователи не могут «агрегировать, копировать или дублировать содержимое на USBANKLOCATIONS.COM» - так Я уверен, что вы не должны соскабливать свой сайт так или иначе ... –
от «on», они ссылаются на действия на свой сайт. Не пользователи, которые могут использовать контент. Вы можете скопировать/вставить информацию. –
OK - Я вообще не участвую в выскабливании вопросов, чтобы ошибиться на стороне осторожности. Я только указывал на случай, если вы не знаете, но если вы счастливы, что это нормально, тогда справедливо. –