Веб-скрейпинг с Beautiful Soup на Python — таблица JavaScript

Я пытаюсь очистить таблицу с веб-сайта, но я не могу понять это с помощью Beautifulsoup в Python. Я не уверен, что это из-за формата таблицы, но я в основном хочу превратить эту таблицу в CSV.

from bs4 import BeautifulSoup
import requests

page = requests.geenter code heret("https://spotwx.com/products/grib_index.php?model=hrrr_wrfprsf&lat=41.03399&lon=-73.76291&tz=America/New_York&display=table")
soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify)

Любые советы о том, как изолировать эту таблицу данных? Я проверил так много руководств по Beautifulsoup, но HTML выглядит иначе, чем в большинстве ссылок. Заранее большое спасибо за помощь -


person Frank Drin    schedule 05.10.2017    source источник


Ответы (1)


Попробуй это. Таблица с этого сайта генерируется динамически, поэтому вы не можете получить результаты, используя только requests.

from selenium import webdriver
from bs4 import BeautifulSoup
import csv

link = "https://spotwx.com/products/grib_index.php?model=hrrr_wrfprsf&lat=41.03399&lon=-73.76291&tz=America/New_York&display=table"

with open("spotwx.csv", "w", newline='') as infile:
    writer = csv.writer(infile)
    writer.writerow(['DateTime','Tmp','Dpt','Rh','Wh','Wd','Wg','Apcp','Slp'])
    with webdriver.Chrome() as driver:
        driver.get(link)
        soup = BeautifulSoup(driver.page_source, 'lxml')
        for item in soup.select("table#example tbody tr"):
            data = [elem.text for elem in item.select('td')]
            print(data)
            writer.writerow(data)
person SIM    schedule 05.10.2017
comment
Большое спасибо за ваш ответ. Я не знаком с Webdriver, но мне не нужно обновлять его в реальном времени (и я бы предпочел не использовать Webdriver без крайней необходимости). Похоже, что простое выполнение запросов показывает необходимые данные в коде soap.prettify, но я просто не могу понять, как извлечь их в таблицу. Спасибо еще раз за помощь ! - person Frank Drin; 06.10.2017
comment
Когда я пробую приведенный выше код, я получаю сообщение об ошибке selenium.common.exceptions.WebDriverException: Message: исполняемый файл chromedriver должен находиться в PATH. См. sites.google.com/a/chromium.org/chromedriver/home< /а> - person Frank Drin; 06.10.2017
comment
Первый должен работать. Если нет, то идите за вторым. 1. driver = webdriver.Chrome('C:/path/to/chromedriver.exe') 2. driver = webdriver.Chrome('/path/to/chromedriver') .Кстати, надо пробовать по своей системе, я имел ввиду путь. Спасибо. - person SIM; 06.10.2017
comment
Шахин, это здорово, отлично работает. Большое спасибо за помощь. Я просто хотел подтвердить, что нет никакого способа очистить это, не запуская его в chrome, так как я вижу данные, которые я пытаюсь изолировать в запросах. Спасибо - person Frank Drin; 06.10.2017
comment
Я тоже не большой поклонник селена. Однако, когда дело доходит до сайтов с поддержкой javascript, селен не имеет себе равных, и requests бесполезен. Кстати, безголовый браузер, такой как Phantomjs, может вам понравиться, но есть несколько проблем с автоматизацией этого безголового браузера. - person SIM; 06.10.2017
comment
Отлично, еще раз спасибо за всю вашу помощь, еще раз, это действительно ценится. Хороших выходных - person Frank Drin; 06.10.2017