使用其他浏览器进行网页抓取

时间:2018-03-23 11:13:09

标签: vba web-scraping

所以我是vba的新手,我试图获得哪个网站是Steam的价格。但我不能使用蒸汽,因为互联网浏览器没有开放蒸汽。 (它的开放但绘图不工作,我无法登录我的帐户,该网站没有响应我的点击。)2天前,它运作良好。但谷歌铬和边缘效果很好他们没有问题。

加载不正确 Not loading well

当我点击登录按钮时,它什么都不做。 a

有些网页未加载 Some pages not loading

画画不打开,所以我不能改变语言抱歉它不是英语 Draw menü

我重新安装我的Internet Explorer,我做了格式,但同样的。所以我不想使用Internet Explorer。我该怎么办,我不能使用IE来抓取数据。

有我的价格代码:

Sub SPrice1()

Dim objIE As InternetExplorer
Dim itemEle As Object
Dim Des1 As String
Dim y As Integer
Dim x As Integer

Set objIE = New InternetExplorer

y = 1
For x = 1 To 21
objIE.navigate "http://steamcommunity.com/market/search?appid=578080#p" & x & "x_name_asc"
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
MsgBox "Checking"

For Each itemEle In objIE.document.getElementsByClassName("market_listing_row_link")
    Prc1 = itemEle.getElementsByClassName("market_listing_right_cell market_listing_their_price")(0).getElementsByTagName("span")(1).textContent
    Sheets("Sheet1").Range("E" & y).Value = Prc1
    y = y + 1
Next

Next x


objIE.Quit
End Sub

2 个答案:

答案 0 :(得分:0)

以下是使用Selenium Basic抓取一个链接的示例,您可以轻松地将其调整为循环。安装后,您需要添加对Selenium类型库的引用。

CSS选择器:

我使用CSS“。” - className selector

因此,.market_listing_game_name表示获取className与"."之后的字符串匹配的所有元素。同样的原则适用于其他原则。最后一个选择器是className normal_price的链式选择器,其中className为market_table_value

示例CSS选择器(结果示例):

CSS query

来自页面的示例:

Example from page

代码输出中的示例:

Sample output

注意:这些数字不断波动。

VBA代码:

Option Explicit   
Public Sub GetInfoSel()
    Dim d As WebDriver
    Set d = New ChromeDriver
    Const url = "https://steamcommunity.com/market/search?appid=578080#p1_name_asc"

    With d
        .Start "Chrome"
        .Get url

        Dim gameNames As Object, itemNames As Object, quantities As Object, normalPrices As Object

        Set gameNames = .findElementsbyCSS(".market_listing_game_name")
        Set itemNames = .findElementsbyCSS(".market_listing_item_name")
        Set quantities = .findElementsbyCSS(".market_listing_num_listings_qty")
        Set normalPrices = .findElementsbyCSS(".market_table_value .normal_price")

        Dim currentItem As Long
        For currentItem = 1 To gameNames.Count
            Debug.Print "Game: " & gameNames(currentItem).Text
            Debug.Print "Item: " & itemNames(currentItem).Text
            Debug.Print "Qty: " & quantities(currentItem).Text
            Debug.Print "Normal Price -  " & normalPrices(currentItem).Text
        Next currentItem
        .Quit
    End With
End Sub

答案 1 :(得分:-1)

使用python beautifulsoup https://www.crummy.com/software/BeautifulSoup/bs4/doc/

可以非常轻松地完成此任务