使用Beautiful Soup/find()函数进行网页抓取时得到的结果=无

2024-05-15 22:19:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从网页中提取一个值,但我无法在beautiful soup的find函数中获得确切的值

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]>,这样就可以正确地连接到web页面。然而,当我打印(结果)时,我什么也得不到

关于如何获得期望的结果有什么建议吗

提前多谢


Tags: 代码importurl网页datetimepagefindnow
2条回答

您可以使用此示例了解如何从此页面获取数据:

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

当我纠正错误时,代码工作

dia = '0' + str(mes)

进入

mes = '0' + str(mes)

所以这只是变量的一个小错误


顺便说一句:

下次你们可以显示url并复制到浏览器,看看它是否给出了正确的页面

print(url)

您还可以检查您是否真的期望HTML

print(page.text.find('Celda'))

或者您可以将其保存在文件中并在web浏览器中打开

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   

相关问题 更多 >