Парсер BeautifulSoup не анализирует всю веб-страницу - PullRequest
0 голосов
/ 01 августа 2020

Я использую BeautifulSoup для анализа веб-сайта CD C на предмет случаев COVID в США для одного из моих летних проектов, и проблема, с которой я столкнулся, заключается в том, что полный код html не загружается, когда я использую .find_all. Вместо этого он загружает информацию для верхнего и нижнего колонтитула сайта CD C, я также пробовал xlml и html.parse, и это не сработало.

import requests, html5lib
from bs4 import BeautifulSoup

#website used for webscraping

result = requests.get('https://www.cdc.gov/covid-data-tracker/#cases')

source = result.content

soup = BeautifulSoup(source,'html5lib')

data = [words.text for words in soup.find_all('div')]

print(data)

1 Ответ

0 голосов
/ 01 августа 2020

Хотя это правда, что страница отображается с JavaScript, JavaScript извлекает JSON файлы, к которым можно получить прямой доступ для получения нужных данных. Просто возьмите JSON и проанализируйте его, как и любой другой JSON.

import requests
# import json

r = requests.get('https://www.cdc.gov/covid-data-tracker/Content/CoronaViewJson_01/US_MAP_DATA.json')
j = r.json()

# print(json.dumps(j, indent=4))  # Print the whole JSON object

# Print data for state
for state in j['US_MAP_DATA']:
    print(f"State: {state['name']}, Total cases: {state['tot_cases']}, Total death: {state['tot_death']}")

Вывод:

State: Alaska, Total cases: 2878, Total death: 23
State: Alabama, Total cases: 85906, Total death: 1567
State: Arkansas, Total cases: 41759, Total death: 442
State: American Samoa, Total cases: 0, Total death: 0
State: Arizona, Total cases: 170798, Total death: 3626
etc.

Если вы не комментируете операторы импорта и печати, Объект JSON будет напечатан с помощью кода.

Чтобы увидеть другие JSON файлы, которые могут представлять интерес, щелкните правой кнопкой мыши веб-страницу в Chrome или Firefox, выберите Inspect, затем Network, затем XHR и обновите sh страницу.

...