Python 使用Beautiful Soup/find()函数进行网页抓取时得到的结果=无
我试图从网页中提取一个值,但我无法在beautiful soup的find函数中获得确切的值 WP HTML代码的相关部分如下:Python 使用Beautiful Soup/find()函数进行网页抓取时得到的结果=无,python,function,web-scraping,beautifulsoup,Python,Function,Web Scraping,Beautifulsoup,我试图从网页中提取一个值,但我无法在beautiful soup的find函数中获得确切的值 WP HTML代码的相关部分如下: <tr class="Celda 1"> <td height="17" width="48%" align="center" class="txt" style="padding: 3px;">21-04-2021
<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>
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每天都会根据日期而变化
当我打印(页面)时,我会得到
,这样就可以正确地连接到网页。然而,当我打印(结果)时,我什么也得不到
关于如何获得期望的结果有什么建议吗
提前多谢 您可以使用此示例了解如何从此页面获取数据:
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))
您可以使用此示例了解如何从此页面获取数据:
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))
当我纠正错误时,代码工作
dia = '0' + str(mes)
进入
所以这只是变量的一个小错误
顺便说一句:
<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>
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)
下次你们可以显示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
当我纠正错误时,代码工作
dia = '0' + str(mes)
进入
所以这只是变量的一个小错误
顺便说一句:
<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>
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)
下次你们可以显示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
类名不能有空格,因此您实际上是在寻找同时具有类
Celda
和1
的元素-但是,1
也不是有效的类名。它必须以字母或下划线开头。首先,你可以检查你是否真的得到了你想要的HTML。当我检查page.text.find('Celda')
时,它在HTML中找不到Celda
,这可能意味着你得到了不同的HTML,也就是说,它可能会为机器人提供验证码或警告。或者它可能使用JAvaScript添加此元素。或者它可能需要正确的头用户代理来发送正确的结果。您在dia='0'+str(mes)
中分配了错误的值。类名不能有空格,因此您实际上是在寻找一个既有类Celda
又有类1
的元素。但是,1
也不是有效的类名。它必须以字母或下划线开头。首先,你可以检查你是否真的得到了你想要的HTML。当我检查page.text.find('Celda')
时,它在HTML中找不到Celda
,这可能意味着你得到了不同的HTML,也就是说,它可能会为机器人提供验证码或警告。或者它可能使用JAvaScript添加此元素。或者它可能需要正确的头用户代理来发送正确的结果,您在dia='0'+str(mes)