BS4 элементы отсутствуют - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь разобрать некоторые HTML, но нужный раздел просто не отображается в супе. И предыдущий раздел, и задний раздел есть, но не тот, который я хочу. Я что-то не так делаю?

URL: https://coronavirus-portugal-esriportugal.hub.arcgis.com/ Мой код (с URL):

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")

1 Ответ

0 голосов
/ 12 апреля 2020

Данные извлекаются динамически из серверной базы данных SQL. Если вы проверите сетевой трафик c, обновляющий страницу (и немного знаете SQL), вы можете решить, как написать запрос для отправки себя для получения данных, указанных в Португалии c. Здесь 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())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...