Как разбить HTML-элементы в Beautifulsoup, чтобы вставить их в таблицу базы данных MySQL? - PullRequest
0 голосов
/ 05 апреля 2019

Я собираю текстовую информацию с веб-сайта, используя Beautifulsoup. Как вычеркнуть только выделенный текст, чтобы я мог ввести выделенный текст в базу данных MySQL?

Я пробовал разные способы тянуть текстовые строки, но мне не повезло. Я получаю желаемый результат, но не знаю, как устранить ненужные элементы.

from bs4 import BeautifulSoup
import urllib.request, urllib.parse, urllib.error

html_url = 'https://www.nwk.usace.army.mil/Locations/District-Lakes/Pomme-de-Terre-Lake/Daily-Lake-Info-2/' 

html_doc = urllib.request.urlopen(html_url).read() 

soup = BeautifulSoup(html_doc, 'html.parser')

pageNav = soup.find(class_= 'Normal')

pageSub = pageNav.find_all('p')

for strong_tag in soup.find_all('strong'):
    print (strong_tag.text, strong_tag.next_sibling)

Я бы хотел ограничить и перенести в базу данных MySQL всего четыре элемента: дата, вчерашний максимум, 24-часовой минимум, температура поверхности озера. Вот мои текущие результаты:

Дата: 3 апреля 2019 г. Обычная высота бассейна: 839,00 Высота озера: 843,53 24 часа Изменение: +0,14 ' Сброс к реке Pomme de Terre: Река Помме де Терре: 50 кубических футов в секунду Температура воздуха Наблюдается в 8:00 утра 48 Вчерашний максимум: 64 24 часа Низкая: 39 Температура поверхности озера: 46 (взято в понедельник и пятницу примерно в 8:00 утра) Температура реки: 46 (принято в понедельник и пятницу примерно в 8:00 утра) Ветер Нет Направление: ЮВ Скорость: 4 Пик: 9 Осадки: 0,00 "

1 Ответ

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

Используйте этот код:

from bs4 import BeautifulSoup
import urllib.request, urllib.parse, urllib.error

html_url = 'https://www.nwk.usace.army.mil/Locations/District-Lakes/Pomme-de-Terre-Lake/Daily-Lake-Info-2/' 

html_doc = urllib.request.urlopen(html_url).read() 

soup = BeautifulSoup(html_doc, 'html.parser')

pageNav = soup.find(class_= 'Normal')

pageSub = pageNav.find_all('p')

for strong_tag in soup.find_all('strong'):
    if strong_tag.text == "24 Hr. Change:" or strong_tag.text=="Yesterday's High:" or strong_tag.text=="Date:    " or strong_tag.text=="Lake Surface Temperature:":
        print(strong_tag.text, strong_tag.next_sibling)

В операторе if все должно быть отсортировано. Я попробовал этот код в блокноте Jupyter, и он работал. Единственная проблема здесь заключалась в том, что после слова дата есть пробелы. Так что сейчас файл не будет печатать строку даты.

Чтобы жестко закодировать регистр даты, используйте вместо этого код:

from bs4 import BeautifulSoup
import urllib.request, urllib.parse, urllib.error

html_url = 'https://www.nwk.usace.army.mil/Locations/District-Lakes/Pomme-de-Terre-Lake/Daily-Lake-Info-2/' 

html_doc = urllib.request.urlopen(html_url).read() 

soup = BeautifulSoup(html_doc, 'html.parser')

pageNav = soup.find(class_= 'Normal')

pageSub = pageNav.find_all('p')

date = True
for strong_tag in soup.find_all('strong'):
    if date:
        print(strong_tag.text, strong_tag.next_sibling)
        date = False
    if strong_tag.text == "24 Hr. Change:" or strong_tag.text=="Yesterday's High:" or strong_tag.text=="Lake Surface Temperature:":
        print(strong_tag.text, strong_tag.next_sibling)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...