【问题标题】:Python parse tablePython解析表
【发布时间】:2018-09-12 22:30:09
【问题描述】:

我已经用这段代码解析了表格

response = urllib.request.urlopen(url)
html = response.read()
soup = BeautifulSoup(html, 'html.parser')
table = soup.find("table", attrs={"class":"table table-condensed table-bordered"})

datasets = []
for row in table.find_all("tr")[1:]:
    dataset = (td.get_text() for td in row.find_all("td"))
    print (tuple(dataset))
    datasets.append(dataset)
print("___________________________________\n")
print(tuple(dataset))
print("___________________________________\n")
print("parsing\n")

它给了

('A1 ', '- ', '- ', '- ', '- ', ' -\n ')
('A2', '- ', '- ', '- ', '- ', ' -\n ')
('A3', '- ', '- ', '- ', '- ', ' -\n ')
('A4', ' 1 W ', ' 50.1 Hz ', ' 0 V ', ' 24 °C ', ' 2018-09-12 19:05:49\n ')
('A5', ' 1 W ', ' 0 V ')

结果数据集为空

 ()

我想将结果放在一个数组中,这样我就可以访问每一行/列,但是 并找出

if datasets[3][0]=='A4' print (datasets[3][2])

为什么如果我更改代码并删除打印 (tuple(dataset)) 代码会更好地工作(尽管它不像我预期的那样)但是我可以拥有一个填充的数据集而不是像以前那样的空数据集:

datasets = []
for row in table.find_all("tr")[1:]:
    #dataset = dict(zip(headings, (td.get_text() for td in row.find_all("td"))))
    dataset = (td.get_text() for td in row.find_all("td"))
    datasets.append(dataset)
    #print (tuple(dataset))

print("___________________________________\n")
print(list(datasets[3]))
print(list(datasets[4]))

【问题讨论】:

    标签: python-3.x parsing beautifulsoup


    【解决方案1】:

    问题是这样的说法:

    dataset = (td.get_text() for td in row.find_all("td"))
    

    返回一个生成器表达式。这有点像一个迭代器,从某种意义上说,一旦你迭代到最后,你就会消耗掉生成器。进一步访问生成器不会返回任何内容。

    当你将数据集的内容打印为一个元组时,这会消耗数据,所以当你去追加时,什么都没有了。删除 print 语句让你更接近,但你仍然在使用生成器,你想要的是实际数据。

    现在,尝试将上面的行更改为:

    dataset = tuple(td.get_text() for td in row.find_all("td"))
    

    或者只是将封闭的 () 更改为 [] 以使其成为列表理解:

    dataset = [td.get_text() for td in row.find_all("td")]
    

    这将消耗生成器表达式,但会在元组或列表中为您提供数据值,您可以一次又一次地访问它们。当您将数据集元组添加到数据集时,它将包含您感兴趣的值。

    【讨论】:

    • dataset = [td.get_text() for td in row.find_all("td")] 完美运行,感谢您的解释
    猜你喜欢
    • 2014-06-16
    • 2017-09-12
    • 1970-01-01
    • 2011-04-02
    • 2020-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多