Python:Scraping table/当第一列不总是等于

2024-06-13 23:18:54 发布

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

我试图提取下表的第二列,即肌肉的名称: http://www.drjastrow.de/WAI/Vokabular/Muskeln-A1.html

以下是我目前的代码:

    import requests
    import time
    from bs4 import BeautifulSoup as soup

    url = "http://www.drjastrow.de/WAI/Vokabular/Muskeln-A1.html"
    links = []
    time.sleep(1)
    print(url)
    page = requests.get(url)
    text = soup(page.text, 'html.parser')
    table = text.select('table')[1]
    rows = table.find_all('tr')[2:]

    names = []
    for row in rows:
        names.append(row.find_all('td')[1].text.replace('\n', ''))

    print(names)

问题是它有时会让我得到行的第二列,有时是第三列,这取决于第一列是否扩展到两行。有道理,但我不知道怎么解决。你知道吗

感谢你的建议!你知道吗


Tags: textimporthttpurlnameshtmla1www
3条回答

可以将属性选择器与类型选择器结合使用,以具有name属性的a类型/标记元素为目标。比熊猫更轻,特别是如果你只是想要那些肌肉的名字。你知道吗

from bs4 import BeautifulSoup as bs
import requests

r = requests.get('http://www.drjastrow.de/WAI/Vokabular/Muskeln-A1.html')
soup = bs(r.content,'lxml')
muscles = [a['name'] for a in soup.select('a[name]')]
print(muscles)

您可以考虑这样一个事实,即第二行始终具有特定的宽度:width="15%"。您可以尝试在每行中选择具有此宽度的单元格(请注意,最后一列有时具有相同的属性,您应该选择第一个元素)。你知道吗

试试这个:

import pandas as pd

url = 'http://www.drjastrow.de/WAI/Vokabular/Muskeln-A1.html'

tables = pd.read_html(url)
print(tables[1][1])

输出是标题为“麝香-肌肉(解剖学术语)”的列。你知道吗

相关问题 更多 >