python - 如何使用 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
解决方案
该页面是动态的,这意味着您需要在解析之前呈现该页面。您可以使用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 - 如何将带有参数(闭包)的python函数传递给另一个函数?
- sql - 从查询中的所有列中排除某些数值
- python - Python3中提取“位置”值的最佳方法,特别是从这个片段中提取“lat”和“lng”?
- python - 反斜杠被视为转义字符 Python/Json
- android - 无法使用 NavigationDrawer 设置工具栏菜单
- algorithm - 在图中找到需要访问的节点最少的路径
- reactjs - React Array.map 使用事件渲染多个组件以及如何访问单个组件
- ruby-on-rails - 如何在 has_many 上使用 ransack 实现搜索:通过关联
- linux - 将当前进程 pid 写入 cgroups.procs 失败并出现权限被拒绝错误
- list - PROLOG 列出不同元素的任务