我怎样才能在R网站上抓取这个网站的信息?

时间:2017-09-03 01:09:13

标签: r web-scraping socrata soda

此网站http://a810-bisweb.nyc.gov/bisweb/bispi00.jsp用于搜索nyc构建应用程序信息。在"应用程序搜索"部分,有" BIS工作号:",所以我输入的工作号后,我要提取的信息来自新页面,然后点击"去"。

例如,从数据集中 https://data.cityofnewyork.us/Housing-Development/DOB-Job-Application-Filings/ic3t-wcy2,我选择工作号码220286232,然后转到第一个网站,将号码放入" BIS工作号码:"然后单击go。现在我得到一个新页面 。我想要的信息是"记录信息的申请人" (包括申请人的联系方式)。

我被困在这里。如何在每个工作号码下提取这些申请人信息?

我对网络抓取很新。我学会了如何使用rvest从整个页面中提取信息,但我不熟悉不同网站的网页抓取。

谢谢。

更新:我尝试使用Socrata API,但我发现申请人的联系信息没有自己的API字段。如果信息没有API字段(但该页面上的其他信息包含字段),这是否意味着我无法使用API​​来解决这个问题?

谢谢!

1 个答案:

答案 0 :(得分:0)

点击Random.id()右上角,点击“API”标签。将弹出一个新的模式对话框“通过SODA API访问此数据集”,在这种情况下复制链接 page。 这是一个直接以机器可读的JSON格式提供数据的URL。但是一次只能获取1000条记录。

因此可以添加适当的https://data.cityofnewyork.us/resource/rvhx-8trz.json?$offset=0 https://data.cityofnewyork.us/resource/rvhx-8trz.json?$offset=500 https://data.cityofnewyork.us/resource/rvhx-8trz.json?$offset=1000 https://data.cityofnewyork.us/resource/rvhx-8trz.json?$offset=... 参数。请参阅https://data.cityofnewyork.us/resource/rvhx-8trz.json。纽约市似乎将此软件用于其开放数据平台。

也许在R脚本中以这种方式调用它们:

Option Explicit

Public Sub GlobalReplaceThousandToHundred()
    Dim ws As Worksheet, ur As Variant, r As Long, c As Long, sz As Long

    Const STR1 = "thousand"
    Const STR2 = "hundred"

    sz = Len(STR1)

    For Each ws In ThisWorkbook.Worksheets
        ur = ws.UsedRange
        For r = LBound(ur) To UBound(ur)
            For c = LBound(ur, 2) To UBound(ur, 2)
                If Not IsError(ur(r, c)) Then
                    If LCase(Right(ur(r, c), sz)) = STR1 Then
                        ur(r, c) = Left(ur(r, c), Len(ur(r, c)) - sz) & STR2
                    End If
                End If
            Next
        Next
        ws.UsedRange = ur
    Next
End Sub

(未经测试可获得更高的抵消额)

使用jsonlite将JSON转换为R数据帧。