Я просто пытаюсь очистить даты от этой веб-страницы https://www.history.navy.mil/content/history/nhhc/research/histories/ship-histories/us-ship-force-levels.html#1886
даты в элементах 'th', и я пытаюсь просто получить те, которые содержат дату. Я думаю, может быть, с помощью регулярных выражений?
Я знаю, что это очень легко, однако я не могу найти учебники или вопросы на форуме, которые соответствуют тому, что я пытаюсь сделать.
Любая помощь будет очень признательна: D
import requests from bs4 import BeautifulSoup import re r = requests.get('https://www.history.navy.mil/content/history/nhhc/research/histories/ship-histories/us-ship-force-levels.html#1886') soup = BeautifulSoup(r.text,'html.parser') for table in soup.find_all('table'): for tr in table.find_all('tr'): for th in tr.find_all('th'): print(th.text)
Это пример моего вывода на данный момент:
DATE 12/86 12/87 12/88 12/89 12/90 12/91 BATTLESHIP CRUISER* MONITOR TORPEDO BOATS STEEL GUNBOATS** AUXILIARIES SCREW STEAMER***
Я просто пытаюсь получить этидаты.
Существует более быстрый метод с использованием селекторов css с использованием: contains (bs4 4.7.1 +)
import requests from bs4 import BeautifulSoup as bs r = requests.get('https://www.history.navy.mil/content/history/nhhc/research/histories/ship-histories/us-ship-force-levels.html#1886') soup = bs(r.content,'lxml') dates = [th.text for th in soup.select('th:contains(DATE) ~ th')] print(dates)
Поскольку вам нужно фильтровать элементы для получения элементов даты, я бы порекомендовал подход lxml & xpath,
import requests from bs4 import BeautifulSoup import lxml from lxml import html r = requests.get('https://www.history.navy.mil/content/history/nhhc/research/histories/ship-histories/us-ship-force-levels.html#1886') tree = html.fromstring(r.content) Dates = tree.xpath("//th[contains(.,'DATE')]/following-sibling::th/text()") print(Dates)