Python:如何通过 BeautifulSoup 通过其中的字符串获取表格行?

标签 python html web-scraping beautifulsoup

<tr class="list even">
    <td class="list">5</td>
    <td class="list"><s>BI</s>→MU</td>
    <td class="list"><s>TEACHER</s>→TEACHER</td>
    <td class="list">Hello I am a Text</td>
    <td class="list">5b</td>
    <td class="list">BI3</td></tr>

这是表格行之一。有一些只有一行作为内联标题,但 idc 用于它们。

所以,我只想获取包含字符串“8f”的行,而不仅仅是 td,整个 tr 如果有多行包含字符串,它应该给我一个列表

for row in soup.find_all('tr', class_='list even'):
    if '5b' in row.text:
        print(row)
        for cell in row.find_all('td'):
            if "5b" not in cell.text:
                print(cell.text)

for row in soup.find_all('tr', class_='list odd'):
    if '5b' in row.text:
        for cell in row.find_all('td'):
            if "5b" not in cell.text:
                print(cell.text)

我现在有了这个,但是它在最后一个表字段之前添加了一个换行符: https://haste.thevillage.chat/foguvakixa.py

if "5b" not in cell.text:

这是因为如果我请求 5d 的数据,我不需要再次知道它是 5d。所以这只是过滤掉类本身

最佳答案

您可以使用 pandas read_html 抓取表格,然后在类列上进行过滤

import pandas as pd

def get_lectures_two(df, klasse):    
    new_df = df[df['(Klasse(n))'] == klasse]
    return new_df

def get_df(url):
    df = pd.read_html(url)[0]
    df = df[~df['Stunde'].str.contains("LEHRER")]
    return df

df = get_df('https://niwla23.gitlab.io/download/vertreterdemo.html')
print(get_lectures_two(df, '5b'))

对于 bs4 4.7.1 +,您可以使用 :contains 和 :has,以及通过 nth-of-type 的适当列索引来定位适当的行(我在这里使用 pandas 只是为了快速生成一个漂亮的表格输出以供查看....你已经有了 bs4 的列表列表,例如可以使用 csv 来编写)

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

def get_lectures(klasse):
    rows = []
    for row in soup.select(f'.mon_list tr:has(td:nth-of-type(5):contains("{klasse}"))'):
        rows.append([td.text.replace('\xa0','') for td in row.select('td')])
    return rows

r = requests.get('https://niwla23.gitlab.io/download/vertreterdemo.html')
soup = bs(r.content, 'lxml')
headers = [th.text for th in soup.select('th.list')]
klasse = '5b'

df = pd.DataFrame(get_lectures(klasse), columns = headers)
print(df)

关于Python:如何通过 BeautifulSoup 通过其中的字符串获取表格行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58596443/

相关文章:

python3提取txt文件中两个字符串之间的字符串

python - 为什么 'in' 运算符在 python 中以元组为键这么慢?

html - 使用 HTML5 构建面包屑导航的最新方法是什么

python 3 : using requests does not get the full content of a web page

r - 使用 R 从 aspx 网站抓取

python - 如何找到两个 Django 查询集的联合?

javascript - 使用 e.stopPropagation() 时复选框更改事件冒泡到父 li 元素

html - 在不重新渲染的情况下平移 Html5 Canvas

linux - 我可以在没有监视器的情况下使用 Watir 从 Linux 服务器上的网站抓取数据吗?

python - 如何从给定的一组单词中打印出最长和最短的单词?