Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python&;BS4 |获取具有特定文本内容的所有表格数据_Python_Html_Beautifulsoup - Fatal编程技术网

Python&;BS4 |获取具有特定文本内容的所有表格数据

Python&;BS4 |获取具有特定文本内容的所有表格数据,python,html,beautifulsoup,Python,Html,Beautifulsoup,我对Python和web抓取非常陌生,因此提出以下问题 我只想得到包含特定内容的表 这是HTML的外观: 它不是此脚本中的第一个表,因此我要选择 </TABLE></TD></TR> <TR> <TD COLSPAN=7 class='x2'> &nbsp;</TD> </TR> <TR> <TD style="vertical-a

我对Python和web抓取非常陌生,因此提出以下问题

我只想得到包含特定内容的表

这是HTML的外观: 它不是此脚本中的第一个表,因此我要选择

    </TABLE></TD></TR>
    <TR>
    <TD COLSPAN=7 class='x2'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD style="vertical-align:bottom" class='x3'>
    EingangsdatumDMYY</TD>
    <TD style="vertical-align:bottom" class='x4'>
    Techniker</TD>
    <TD style="vertical-align:bottom" class='x5'>
    Techn.</TD>
    <TD style="vertical-align:bottom" class='x6'>
    Kunde</TD>
    <TD style="vertical-align:bottom" class='x7'>
    OffAuftrag</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Planungsdatum</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Herstellerreferenz</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x17_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x18_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product B**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x19_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
现在问题是:

我确实得到了第一行,但我想搜索整个网站,搜索其中包含文本“Product A”的每个表,并将父表保存在一个数组中

例如: 代码完成后,输出为:

<TD class='x17_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>

<TD class='x19_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>

1000000,状态,技术,日期时间,**产品A**
1000000,状态,技术,日期时间,**产品A**
因此,守则必须: 1) 搜索HTML并搜索文本“Product A” 2) 抓取父标记并将其保存在变量中。 3) 重复整个HTML

我感激地接受每一笔小费-

谢谢并致以最良好的问候
Yanick L.

您可以在
Bs4
中使用正则表达式来查找包含特定文本的元素

如果你想搜索所有包含特定字符串的
td
,你需要这个

import re
from bs4 import BeautifulSoup
page = '''

    <TR>
    <TD COLSPAN=7 class='x2'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD style="vertical-align:bottom" class='x3'>
    EingangsdatumDMYY</TD>
    <TD style="vertical-align:bottom" class='x4'>
    Techniker</TD>
    <TD style="vertical-align:bottom" class='x5'>
    Techn.</TD>
    <TD style="vertical-align:bottom" class='x6'>
    Kunde</TD>
    <TD style="vertical-align:bottom" class='x7'>
    OffAuftrag</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Planungsdatum</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Herstellerreferenz</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x17_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x18_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product B**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x19_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
'''
soup = BeautifulSoup(page, 'html.parser')
tables = soup.findChildren('td', text=re.compile(r'Product A'))
print(tables)
重新导入
从bs4导入BeautifulSoup
页码=“”
EingangsdatumDMYY
技术工
Techn。
昆德
奥夫特拉格酒店
平面
赫氏
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品A**
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品B**
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品A**
'''
soup=BeautifulSoup(页面“html.parser”)
tables=soup.findChildren('td',text=re.compile(r'producta'))
打印(表格)

您可以在
Bs4
中使用正则表达式来查找包含特定文本的元素

如果你想搜索所有包含特定字符串的
td
,你需要这个

import re
from bs4 import BeautifulSoup
page = '''

    <TR>
    <TD COLSPAN=7 class='x2'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD style="vertical-align:bottom" class='x3'>
    EingangsdatumDMYY</TD>
    <TD style="vertical-align:bottom" class='x4'>
    Techniker</TD>
    <TD style="vertical-align:bottom" class='x5'>
    Techn.</TD>
    <TD style="vertical-align:bottom" class='x6'>
    Kunde</TD>
    <TD style="vertical-align:bottom" class='x7'>
    OffAuftrag</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Planungsdatum</TD>
    <TD style="vertical-align:bottom" class='x8'>
    Herstellerreferenz</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x17_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x18_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product B**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
    <TR>
    <TD class='x9_0'>
    DATE </TD>
    <TD class='x10_0'>
    default</TD>
    <TD class='x11_0'>
    00000001</TD>
    <TD class='x12_0'>
    Company Name</TD>
    <TD class='x19_0'>
    1000000    ,STATUS, TECH, DATE TIME, **Product A**</TD>
    <TD class='x14_0'>
    &nbsp;</TD>
    <TD class='x15_0'>
    &nbsp;</TD>
    </TR>
'''
soup = BeautifulSoup(page, 'html.parser')
tables = soup.findChildren('td', text=re.compile(r'Product A'))
print(tables)
重新导入
从bs4导入BeautifulSoup
页码=“”
EingangsdatumDMYY
技术工
Techn。
昆德
奥夫特拉格酒店
平面
赫氏
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品A**
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品B**
日期
违约
00000001
公司名称
1000000,状态,技术,日期时间,**产品A**
'''
soup=BeautifulSoup(页面“html.parser”)
tables=soup.findChildren('td',text=re.compile(r'producta'))
打印(表格)

对于bs4 4.7.1+,您可以使用:contains获取包含特定文本的表格

tables = soup.select('table:contains("Product A")')
print(tables)
带有td的表格,如果您需要更具体地显示文本,但需要整个表格:

tables = soup.select('table:has(td:contains("Product A"))')
print(tables)

在bs4.7.1+中,您可以使用:contains获取包含特定文本的表

tables = soup.select('table:contains("Product A")')
print(tables)
带有td的表格,如果您需要更具体地显示文本,但需要整个表格:

tables = soup.select('table:has(td:contains("Product A"))')
print(tables)

谢谢你的工作:D我可以选择下一个td吗?现在你已经找到了你需要的所有
td
,它们存储在一个列表中,你可以使用列表索引选择它们。在上面的示例中,它们存储在
tables
变量中,因此您可以使用
tables[0]
选择第一个,使用
tables[1]
选择第二个。感谢这一点:D我可以选择下一个td吗?现在您已经找到了所需的所有
td
,它们存储在一个列表中,您可以使用列表索引选择它们。在上面的示例中,它们存储在
tables
变量中,因此您可以使用
tables[0]
选择第一个,使用
tables[1]
选择第二个