微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过使用 python 更改 ID 从 HTML 页面读取表格

如何解决通过使用 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 的屏幕截图):

enter image description here

,

下面的代码将提取网页中的所有表格

将 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?