繁体   English   中英

如何使用BeautifulSoup从特定字符串解析表?

[英]How can I parse a table from a specific string using BeautifulSoup?

很抱歉提出这个笨拙的问题。

我正在学习使用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

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

我对Requests-HTML不太熟悉,但是我过去曾经使用过Selenium。 这应该可以帮助您。 另外,每当我要提取<table>标记时,我都喜欢使用pandas进行解析。 但是BeautifulSoup仍然可以使用,只需花费更多的工作来遍历tabletrtd标签。 熊猫可以使用.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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM