Как выбрать определенные элементы 'th' даты в html-файле для webscrape в Python 3, используя BeautifulSoup? - PullRequest
1 голос
/ 06 октября 2019

Я просто пытаюсь очистить даты от этой веб-страницы 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***

Я просто пытаюсь получить этидаты.

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Существует более быстрый метод с использованием селекторов 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)
0 голосов
/ 06 октября 2019

Поскольку вам нужно фильтровать элементы для получения элементов даты, я бы порекомендовал подход 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...