为什么我的网络抓取代码返回[]?

时间:2020-06-09 03:03:39

标签: python web-scraping beautifulsoup python-requests

我正在从https://eleccionesnacionales.corteelectoral.gub.uy/ResumenResultados.htm这个网站上抓取一些数据,检查了页面并发现了

photo

知道,我对此进行了编码,但是它只返回“ []”,我已经使用了2个小时,但是找不到解决方法

import requests
from bs4 import BeautifulSoup

url = requests.get("https://eleccionesnacionales.corteelectoral.gub.uy/ResumenResultados.htm")
soup = BeautifulSoup(url.content, "lxml")

votos = soup.find_all("span", class_="subtotal sin-margin sin-padding ")
print(votos)

2 个答案:

答案 0 :(得分:0)

使用此JSON API。 我不知道为什么这个数字为“ 1591673487333”,但最恰当的是他的约会日期。

https://eleccionesnacionales.corteelectoral.gub.uy/JSON/ResumenGeneral_D.json?1591673487333

此JSON文件https://pastebin.com/yXvkArBv的输出

使用此代码生成数字。像这样的“ 1591673487333”

import time
millis = int(round(time.time() * 1000))
print(millis)

示例:

import time
import urllib.request, json 

millis = int(round(time.time() * 1000))

with urllib.request.urlopen("https://eleccionesnacionales.corteelectoral.gub.uy/JSON/ResumenGeneral_D.json?" + str(millis)) as url:
    data = json.loads(url.read().decode())
    print(data)
    print(data[0]['EleccionNacional'][0]['LemaNombre']) # Partido Frente Amplio
    print(data[0]['EleccionNacional'][0]['Total']) # 949376

enter image description here

答案 1 :(得分:0)

此代码将为您提供输出

import requests
from bs4 import BeautifulSoup

url = requests.get("https://eleccionesnacionales.corteelectoral.gub.uy/ResumenResultados.htm")
soup = BeautifulSoup(url.content, "lxml")
# print(soup)
votos = soup.find_all("span", {"class":"subtotal sin-margin sin-padding"})
for span in votos:
    print(span.text)
print(votos)

这是所有网站的常规程序。但是您提供的网站正在使用某些模板引擎,并且数据显示为某些变量,如下所示:

{{Total | format . 0 }}

程序的输出将是

{{Total | format . 0 }}
{{Total | format . 0 }}
[<span class="subtotal sin-margin sin-padding">{{Total | format . 0 }}</span>, <span class="subtotal sin-margin sin-padding">{{Total | format . 0 }}</span>]

但是,如果您想获取它,请参考以下页面:How to retrieve the values of dynamic html content using Python

它将使用selenium和chrome驱动程序来获取实际的渲染站点并使用它来剪贴数据。