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

标签 python html beautifulsoup

很抱歉问了这个新手问题。

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

网站是https://airtmrates.com/我想要获取的确切字符串是:

VES Bolivar Soberano Bank Value Value Value

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

我一直在从我的屁股里掏出一些东西,但我惨遭失败。这是我尝试的最后一个代码,这样你就可以笑了:

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

最佳答案

页面是动态的,这意味着您需要在解析之前渲染页面。您可以使用 Selenium 来做到这一点或Requests-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

关于python - 如何使用 BeautifulSoup 从特定字符串解析表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54190178/

相关文章:

python - 如何在 python 2.7 中为 TLS 套接字进行证书固定?

Python:获取默认网关的MAC地址

python - TypeError:不支持的操作数类型 |: 'int' 和 'str'

javascript - 滚动到特定点时删除 iframe

python - 如何使用 BeautifulSoup 搜索标签列表,列表中的一个项目具有属性?

python - 选择第一个元素之后的第二个元素

html - 背景图像停止出现在 IE8 中

html - 带缓动功能的动画 Canvas 弧线

python - 在大字符串中搜索文件路径。返回文件路径+文件名

python - 如何在python上获取子链接