我试图从网页中提取一个值,但我无法在美丽汤的查找功能中获得确切的值。
WP HTML 代码的相关部分如下:
<tr class="Celda 1">
<td height="17" width="48%" align="center" class="txt" style="padding: 3px;">21-04-2021</td>
<td width="52%" align="center" class="txt">19.887700</td>
</tr>
我想提取数字 19.887700,该值在此类网页上每天都在变化。 这是URL with today's date。
我当前的 Python 代码如下:
import requests
from bs4 import BeautifulSoup
from datetime import datetime
def calcular_tipo_cambio(self):
dia = datetime.now().day
mes = datetime.now().month
año = str(datetime.now().year)
if len(str(dia)) == 1:
dia = '0' + str(dia)
if len(str(mes)) == 1:
dia = '0' + str(mes)
url = f'https://www.dof.gob.mx/indicadores_detalle.php?cod_tipo_indicador=158' \
f'&dfecha={dia}%2F{mes}%2F{año}&hfecha={dia}%2F{mes}%2F{año}'
page = requests.get(url)
print(page)
soup = BeautifulSoup(page.content, 'html.parser')
results = soup.find("tr", {"class": "Celda 1"})
print(results)
在我的 Python 文件中,我使用的是动态 url,因为网页 url 每天都会根据日期变化。
当我打印(页面)时,我得到 <Response [200]>
,因此与网页的连接正确完成。但是,当我打印(结果)时,我得到 None。
关于如何获得所需结果的任何建议?
非常感谢!
答案 0 :(得分:3)
您可以使用此示例如何从此页面获取数据:
import requests
from bs4 import BeautifulSoup
url = "https://www.dof.gob.mx/indicadores_detalle.php"
query = {
"cod_tipo_indicador": "158",
"dfecha": "21/04/2021",
"hfecha": "21/04/2021",
}
soup = BeautifulSoup(requests.get(url, params=query).content, "html.parser")
for tr in soup.find_all(class_="Celda 1"):
fecha, valor = [td.get_text(strip=True) for td in tr.find_all("td")]
print("{:<20} {}".format(fecha, valor))
打印:
21-04-2021 19.887700
答案 1 :(得分:1)
代码在我更正时有效
dia = '0' + str(mes)
进入
mes = '0' + str(mes)
所以这只是变量的小错误。
顺便说一句:
下次你可以显示url并复制到浏览器,看看它是否给出了正确的页面
print(url)
您还可以检查您是否真的期望 HTML
print(page.text.find('Celda'))
或者您可以将其保存在文件中并在网络浏览器中打开
with open('output.html', 'w') as f:
f.write(page.text)
import webbrowser
webbrowser.open('output.html') # it should open file in default program/browser