Красивый суп не может найти столы - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь собрать некоторые данные из таблицы на веб-странице с Python и Beautiful Soup. Однако, когда я делаю выбор на странице, я получаю результаты, отличные от тех, которые отображаются в браузере. В частности, таблицы отсутствуют полностью. Вот скриншот таблицы в инспекторе инструментов Firefox dev:

Screenshot of web page and inspector

А вот вывод, который я получаю из Beautiful Soup:

Screenshot of IDE with output

Я пытался использовать urllib вместо запросов, и я пытался использовать разные HTML парсеры, (html .parser и l xml). Все дают одинаковые результаты. Любой совет о том, что может происходить здесь и как я могу обойти это, чтобы получить доступ к данным из таблицы?

import requests
from bs4 import BeautifulSoup
import pandas
import tabula
import html5lib

knox = requests.get("https://covid.knoxcountytn.gov/case-count.html")
knox_soup = BeautifulSoup(knox.text, 'html5lib')
knox_confirmed = knox_soup.find('div', id='covid_cases').prettify()

print(knox_confirmed)

Ответы [ 2 ]

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

Сайт загружается через JavaScript, поэтому вы не можете использовать requestes для визуализации JS для вас. Вы можете использовать selenium или requests_html et c.

. На данный момент мне удалось отследить, откуда данные выбираются. проверяя XHR traffi c.

Таким образом, мы можем использовать pandas.read_csv() следующим образом:

import pandas as pd

df = pd.read_csv("https://covid.knoxcountytn.gov/includes/covid_cases.csv")

print(df)

enter image description here

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

Попробуйте отключить javascript при посещении https://covid.knoxcountytn.gov/case-count.html, и вы не увидите таблицы. Как сказал @barny, таблица генерируется с javascript, поэтому вы не можете разобрать ее с BeautifulSoup (по крайней мере, не легко, см. Как вызвать функцию JavaScript с использованием BeautifulSoup и Python).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...