gpt4 book ai didi

python - 如何将两个表组合成一个漂亮的汤对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:52:41 24 4
gpt4 key购买 nike

我正在查询网站并从结果页面上的表格中抓取数据。有时会有不止一张 table (我事先不知道)。 HTML 代码看起来像这样:

<div id="containter1" class="rank-container"
<table class="ysr-list" id="ysr-list1">
<thead></thead>
<tbody>
<tr class="name1"></tr>
<tr class="name2"></tr>
<tr class="name3"></tr>
</tbody>

有时看起来像这样

<div id="containter1" class="rank-container"
<table class="ysr-list" id="ysr-list1">
<thead></thead>
<tbody>
<tr class="name1"></tr>
<tr class="name2"></tr>
<tr class="name3"></tr>
</tbody>

bla bla bla

<div id="containter2" class="rank-container"
<table class="ysr-list" id="ysr-list2">
<thead></thead>
<tbody>
<tr class="name1"></tr>
<tr class="name2"></tr>
<tr class="name3"></tr>
</tbody>

我目前正在做的是

Table = soup.find('table', {'id':'ysr-list1'})

但是,这显然错过了第二张 table 。我想做的是以某种方式将表组合成一个 BS 对象

Table1 = soup.find('table', {'id':'ysr-list1'})
Table2 = soup.find('table', {'id':'ysr-list2'})

Table = Table1 + Table2

其中 Tablebs4.element.Tag 类型(这是 Table1Table2 的类型) 这样我就可以通过

获取给定页面上所有表的所有行
TableRows = Table.find_all('tr')

我还想就自动确定存在多少个具有 id=ysr-listX 的表的最佳方法提出优雅的建议,其中 X 是表的数量在页面上并将它们全部收集到 bs4.element.Tag 对象中,如上所述。

谢谢

最佳答案

你可以使用 lxml结合cssselect然后使用 CSS 选择器通过返回元素列表的类名搜索两个表的语义。

这是一个例子:

>>> html = open("test.html", "r").read()
>>> from lxml.html import fromstring
>>> import cssselect
>>> doc = fromstring(html)
>>> doc.cssselect("table.ysr-list")
[<Element table at 0x1044606b0>, <Element table at 0x104460710>]

关于python - 如何将两个表组合成一个漂亮的汤对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20463305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com