如何解决通过使用 python 更改 ID 从 HTML 页面读取表格
我正在使用下面的html链接来阅读页面中的表格:
http://a810-bisweb.nyc.gov/bisweb/ActionsByLocationServlet?requestid=1&allbin=2016664
链接的最后一部分(allbin)
是 ID。此 ID 会发生变化,通过使用不同的 ID,您可以访问不同的表和记录。链接虽然保持不变,但每次都改变了最后的ID。我有 1000 多个这样的不同 ID。那么,我如何才能真正使用这些不同的 ID 来访问不同的表并将它们连接在一起?
输出像这样,
ID Number Type FileDate
2016664 NB 14581-26 New Building 12/21/2020
4257909 NB 1481-29 New Building 3/6/2021
4138920 NB 481-29 New Building 9/4/2020
使用的其他ID列表:
['4257909','4138920','4533715']
这是我的尝试,我可以使用此代码读取单个表。
import requests
import pandas as pd
url = 'http://a810-bisweb.nyc.gov/bisweb/ActionsByLocationServlet?requestid=1&allbin=2016664'
html = requests.get(url).content
df_list = pd.read_html(html,header=0)
df = df_list[3]
df
解决方法
要从 ID 列表中获取所有页面,您可以使用下一个示例:
import requests
import pandas as pd
from io import StringIO
url = "http://a810-bisweb.nyc.gov/bisweb/ActionsByLocationServlet?requestid=1&allbin={}&allcount={}"
def get_info(ID,page=1):
out = []
while True:
try:
print("ID: {} Page: {}".format(ID,page))
t = requests.get(url.format(ID,page),timeout=1).text
df = pd.read_html(StringIO(t))[3].loc[1:,:]
if len(df) == 0:
break
df.columns = ["NUMBER","NUMBER","TYPE","FILE DATE"]
df["ID"] = ID
out.append(df)
page += 25
except requests.exceptions.ReadTimeout:
print("Timeout...")
continue
return out
list_of_ids = [2016664,4257909,4138920,4533715]
dfs = []
for ID in list_of_ids:
dfs.extend(get_info(ID))
df = pd.concat(dfs)
print(df)
df.to_csv("data.csv",index=None)
打印:
NUMBER NUMBER TYPE FILE DATE ID
1 ALT 1469-1890 NaN ALTERATION 00/00/0000 2016664
2 ALT 1313-1874 NaN ALTERATION 00/00/0000 2016664
3 BN 332-1938 NaN BUILDING NOTICE 00/00/0000 2016664
4 BN 636-1916 NaN BUILDING NOTICE 00/00/0000 2016664
5 CO NB 1295-1923 (PDF) CERTIFICATE OF OCCUPANCY 00/00/0000 2016664
...
并保存 data.csv
(来自 LibreOffice 的屏幕截图):
下面的代码将提取网页中的所有表格
将 numpy 导入为 np
将熊猫导入为 pd
url = 'http://a810-bisweb.nyc.gov/bisweb/ActionsByLocationServlet?requestid=1&allbin=2016664'
df_list = pd.read_html(url) #以网页数据帧列表的形式返回
print(len(df_list)) #打印数据帧数
i = 0
while i
df = df_list[i]
print(df)
i = i + 1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。