Как исправить запросы Python / BeautifulSoup ответ из базы данных - PullRequest
1 голос
/ 16 апреля 2019

Я новичок в веб-очистке / кодировании и пытаюсь использовать запросы Python / BeautifulSoup для анализа html-кода, чтобы получить некоторые физические и химические свойства.

По какой-то причине, хотя я успешно использовал следующий скрипт для других сайтов, BeautifulSoup напечатал всего несколько строк из верхнего и нижнего колонтитула, а затем страницы HTML-кода, который на самом деле не имеет смысла.Это код, который я использовал:

import requests
from bs4 import BeautifulSoup

url='https://comptox.epa.gov/dashboard/dsstoxdb/results?search=ammonia#properties'
response = requests.get(url).text
soup=BeautifulSoup(response,'lxml') 
print(soup.prettify())

Когда я пытаюсь найти таблицу или даже строку, это не дает никакого вывода.Есть ли что-то, что я не учел?Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

присутствует в одном из атрибутов.Вы можете извлечь его следующим образом (там гораздо больше информации, но я задаю физические свойства

import requests
from bs4 import BeautifulSoup as bs
import json

url = "https://comptox.epa.gov/dashboard/dsstoxdb/results?search=ammonia#properties"
r = requests.get(url)
soup = bs(r.content, 'lxml')
soup.select_one('[data-result]')['data-result']
data = json.loads(soup.select_one('[data-result]')['data-result'])
properties = data['physprop']
print(properties)
0 голосов
/ 16 апреля 2019

Довольно часто, если страница загружается JavaScript после загрузки, requests и BeautifulSoup не будут правильно обрабатывать страницу. Лучше всего переключиться на модуль selenium , который позволяет вашей программе динамически получать доступ к странице и взаимодействовать с элементами. После загрузки (и, возможно, нажатия на пару элементов) вы можете передать HTML-код BeautifulSoup и обработать его так, как вам удобно. Базовая структура, с которой я рекомендую начать, выглядела бы так:

from selenium import webdriver
browser = webdriver.Chrome() # You'll need to download drivers from link above
browser.implicitly_wait(10) # probably unnecessary, just makes sure all pages you visit fully load
browser.get('https://stips.co.il/explore')
while True:
    input('Press Enter to print HTML')
    HTML = browser.page_source
    print(HTML)

Просто кликните в браузере и, когда вы хотите увидеть, верен ли HTML, вернитесь к вашему приглашению и нажмите ENTER. Это способ автоматического нахождения элементов , поэтому вам не нужно каждый раз вручную взаимодействовать со страницей

...