Html 如何使用BeautifulSoup提取表中的所有元素?
我有一个很大的HTML文件,它是由几个HTML文件合并而成的,因此结构重复了N次Html 如何使用BeautifulSoup提取表中的所有元素?,html,python-3.x,beautifulsoup,Html,Python 3.x,Beautifulsoup,我有一个很大的HTML文件,它是由几个HTML文件合并而成的,因此结构重复了N次如下所示: <html> <head> <body> <TABLE> <TABLE> </body> </html> <html> <head> <body> <TABLE> <TABLE> </body> </ht
代码>如下所示:
<html>
<head>
<body>
<TABLE>
<TABLE>
</body>
</html>
<html>
<head>
<body>
<TABLE>
<TABLE>
</body>
</html>
<html>
<head>
<body>
<TABLE>
<TABLE>
</body>
</html>
我该怎么做
我当前的代码查看文件中的所有表元素,但我不知道如何仅提取每个html块的第二个表中的元素
from bs4 import BeautifulSoup
fp = open("file.html", "rb")
soup = BeautifulSoup(fp, "html5lib")
tables = soup.find_all('table')
for tbl in tables:
print(tbl.find_all())
如果您想将html表放入dataframe,那么可以尝试以下方法
import pandas as pd
import html5lib
url = 'file.html'
dfs = pd.read_html(url)
df = pd.concat(dfs)
df
您可以浏览文档,因为您可以提供表的id来获取特定的html表等,如attrs={'id':'table'}
我当前的代码查找文件中的所有表元素,但我不知道
如何仅提取每个html的第二个表中的元素
街区
你已经在正确的轨道上了。首先迭代html
块,然后只选择出现的第二个表如何?应该足够了,不是吗
raw_html = """<html>
<head>
<body>
<table></table>
<table><test id="second_table">test text 1</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="second_table">test text 2</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="second_table">test text 3</test></table>
</body>
</html>"""
soup = BeautifulSoup(raw_html, "html.parser")
for html_block in soup.find_all("html"):
interesting_table = html_block.find_all("table")[1] # keep the second table only
print(interesting_table) # do what you want with these tables now
raw_html=”“”
测试文本1
测试文本2
测试文本3
"""
soup=BeautifulSoup(原始html,“html.parser”)
用于汤中的html块。查找所有(“html”):
有趣的_table=html_block.find_all(“table”)[1]#只保留第二个表
打印(有趣的表格)#现在就用这些表格做你想做的事
输出:
<table><test id="second_table">test text 1</test></table>
<table><test id="second_table">test text 2</test></table>
<table><test id="second_table">test text 3</test></table>
测试文本1
测试文本2
测试文本3
推荐一个将所有HTML标记作为字符串处理的库
from simplified_scrapy import SimplifiedDoc
html = '''
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 1</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 2</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 3</test></table>
</body>
</html>
'''
doc = SimplifiedDoc(html)
htmls = doc.htmls
for h in htmls:
table = h.getElement('table',start='</table>') # Use start='</table>' to skip the first table
print (table.test.text)
print (table.select('test#test_id'))
试着解释一下这个问题?一个普通的HTML文件只有一个HTML标记,一个body标记。这个文件有几个html块,除此之外,我只对每个块的第二个表中的内容感兴趣。
块。最后,我希望有一个文件,其中包含每个第二个表中的元素的唯一HTML块。我希望能像OP建议的那样,用格式错误的HTML(多个
标记)理解这项工作?
from simplified_scrapy import SimplifiedDoc
html = '''
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 1</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 2</test></table>
</body>
</html>
<html>
<head>
<body>
<table></table>
<table><test id="test_id">test text 3</test></table>
</body>
</html>
'''
doc = SimplifiedDoc(html)
htmls = doc.htmls
for h in htmls:
table = h.getElement('table',start='</table>') # Use start='</table>' to skip the first table
print (table.test.text)
print (table.select('test#test_id'))
test text 1
{'id': 'test_id', 'tag': 'test', 'html': 'test text 1'}
test text 2
{'id': 'test_id', 'tag': 'test', 'html': 'test text 2'}
test text 3
{'id': 'test_id', 'tag': 'test', 'html': 'test text 3'}