首页 > 解决方案 > 如何使用 BeautifulSoup 从特定字符串解析表?

问题描述

抱歉这个noobish问题。

我正在学习使用 BeautifulSoup,并且正在尝试在表中提取特定的数据字符串。

该网站是https://airtmrates.com/我想要得到的确切字符串是:

VES Bolivar Soberano 银行价值 价值 价值

该表没有任何类,所以我不知道如何查找和解析该字符串。

我一直在从我的臀部拉出一些东西,但我失败了。这是我尝试的最后一个代码,因此您可以开怀大笑:

def airtm():
    #URLs y ejecución de BS
    url = requests.get("https://airtmrates.com/")
    response = requests.get(url)
    html = response.content
    soup_ = soup(url,  'html.parser')
    columns = soup_.findAll('td', text = re.compile('VES'), attrs = {'::before'})
    return columns

标签: pythonhtmlbeautifulsoup

解决方案


该页面是动态的,这意味着您需要在解析之前呈现该页面。您可以使用SeleniumRequests-HTML来做到这一点

我对 Requests-HTML 不太熟悉,但我过去使用过 Selenium。这应该让你继续前进。另外,每当我要拉一个<table>, 标签时,我都喜欢使用 pandas 来解析。但是 BeautifulSoup 仍然可以使用,只是需要多做一些工作来遍历table, tr,td标签。Pandas 可以通过以下方式为您完成这项工作.read_html()

from selenium import webdriver
import pandas as pd


def airtm(url):
    #URLs y ejecución de BS
    driver = webdriver.Chrome("C:/chromedriver_win32/chromedriver.exe")
    driver.get(url)

    tables = pd.read_html(driver.page_source)
    df  = tables[0]
    df = df[df['Code'] == 'VES']

    driver.close()
    return df

results = airtm('https://airtmrates.com/')

输出:

print (results)
    Code              Name         Method    Rate      Buy     Sell
120  VES  Bolivar Soberano           Bank  2526.7  2687.98  2383.68
143  VES  Bolivar Soberano   Mercado Pago  2526.7  2631.98  2429.52
264  VES  Bolivar Soberano      MoneyGram  2526.7  2776.59  2339.54
455  VES  Bolivar Soberano  Western Union  2526.7  2746.41  2383.68

推荐阅读