此网站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来解决这个问题?
谢谢!
答案 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数据帧。