首页 > 解决方案 > 缺少 BS4 元素

问题描述

我正在尝试解析一些 HTML,但我想要的部分根本没有出现在汤中。前面的部分和后面的部分都在那里,但不是我想要的。难道我做错了什么?

网址:https ://coronavirus-portugal-esriportugal.hub.arcgis.com/ 我的代码(带有网址):

from urllib.request import urlopen as uReq
from bs4 import BeautifulSoup as soup

url = 'https://coronavirus-portugal-esriportugal.hub.arcgis.com/'
uClient = uReq(url)
page_html = uClient.read()
uClient.close()

soup = soup(page_html, 'html.parser')
body = soup.body
print(body.prettify())

我正在寻找前四个数字(对应于“Casos Confirmados”、“Casos Suspeitos”、“Recuperados”、“Óbitos”的数字)

标签: pythonweb-scrapingbeautifulsoup

解决方案


数据是从后端 SQL 数据库动态检索的。如果您检查更新页面的网络流量(并且知道一点 SQL),您可以制定出如何编写查询以发送自己以检索葡萄牙特定数据。这里,215 对应于葡萄牙。

import requests

r = requests.get('https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=OBJECTID=215&outFields=*')
print(r.json())

所有数据(使用不同的查询):

https://services1.arcgis.com/0MSEUqKaxRlEPj5g/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=1=1&outFields=*

您还可以动态选择查询字符串中使用的其他标识符

import requests, re

country_id = 215

with requests.Session() as s:
    r = s.get('https://coronavirus-portugal-esriportugal.hub.arcgis.com/')
    p = re.compile(r'https://services1.arcgis.com/(.*?)/arcgis')
    code = p.findall(r.text)[0]
    r = s.get(f'https://services1.arcgis.com/{code}/arcgis/rest/services/ncov_cases/FeatureServer/1/query?f=json&where=OBJECTID={country_id}&outFields=*')
    print(r.json())

推荐阅读