如何使用find\u All()用Python将正则表达式应用于BeautifulSoup

2024-09-26 17:53:29 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试图刮多个网页的网站。 每个页面都有多个</table>标记,ID范围从19到29。每页的表数是随机的

举个例子:

第1页HTML

<table id='table20'>...</table>
<table id='table25'>...</table>

第2页HTML

<table id='table19'>...</table>
<table id='table21'>...</table>
<table id='table29'>...</table>

第3页HTML

<table id='table19'>...</table>
<table id='table20'>...</table>
<table id='table21'>...</table>

。。。。你知道吗

第n页HTML

<table id='table19'>...</table>

我试图将这些表从html页面中分离出来,以便将它们刮去。到目前为止,我能够循环浏览每个页面,但是我编写的正则表达式从每个页面提取表似乎不起作用。请帮帮我。你知道吗

这是我的密码:

tables = soup.find_all('table', id = re.compile('^table\d(19|2[0-9])'))

Tags: 标记id网页网站htmltable页面例子
2条回答

如果id开始字符串对于感兴趣的表是唯一的,那么您可以不使用attribute=value css selector并以operator开始吗?你知道吗

for table in soup.select('table[id^=table]'):
    #do something with table

可以使用正则表达式'table[12]\d'regex101):

data = '''<table id='table19'><tr></tr></table>
<table id='table20'><tr></tr></table>
<table id='table21'><tr></tr></table>

<table id='table40'><tr></tr></table>'''

from bs4 import BeautifulSoup
import re

soup = BeautifulSoup(data, 'html.parser')

for table in soup.find_all('table', {'id':re.compile(r'table[12]\d')}):
    print(table)

印刷品:

<table id="table19"><tr></tr></table>
<table id="table20"><tr></tr></table>
<table id="table21"><tr></tr></table>

编辑:对于表19或20-29,使用非捕获组(regex101):

for table in soup.find_all('table', {'id':re.compile(r'table(?:19|2\d)')}):
    print(table)

相关问题 更多 >

    热门问题