BeautifulSoup выскабливает дополнительные данные - PullRequest
0 голосов
/ 26 мая 2018

Я использую Python и BeautifulSoup для очистки некоторых данных с этого сайта.

Код:

import requests
from bs4 import BeautifulSoup

eclipse_time_date = requests.get("https://www.timeanddate.com/eclipse/")
soup = BeautifulSoup(eclipse_time_date.text, 'html.parser')

eclipse_info = soup.find_all("div", class_= "six columns art__eclipse-txt")

for info in eclipse_info:
    print("Eclipse Date: {0}".format(info.find('a').text))
    print("Location: {0}".format(info.find('p').text))

Вывод:

Eclipse Date: July 13, 2018 — Partial Solar Eclipse
Location: South in Australia, Pacific, Indian Ocean New Features: Path Map | 3D Path Globe | Eclipse Information

Eclipse Date: July 27, 2018 — Total Lunar Eclipse
Location: Much of Europe, Much of Asia, Australia, Africa, South in North America, South America, Pacific, Atlantic, Indian Ocean, Antarctica New Features: Path Map | 3D Path Globe | Eclipse Information

Моя проблема в том, что часть после местоположений,  New Features: и т. Д., Также имеет тег p.Как мне проигнорировать эту часть, чтобы мой вывод был таким:

Eclipse Date: July 13, 2018 — Partial Solar Eclipse
Location: South in Australia, Pacific, Indian Ocean

Eclipse Date: July 27, 2018 — Total Lunar Eclipse
Location: Much of Europe, Much of Asia, Australia, Africa, South in North America, South America, Pacific, Atlantic, Indian Ocean, Antarctica

Я мог бы использовать split() и найти индекс New, однако в некоторых местах есть слово New, например, в расположении "Нью-Йорк "или" Новый Орлеан ".

Хотелось бы узнать, есть ли способ извлечения данных с помощью BeautifulSoup?

1 Ответ

0 голосов
/ 26 мая 2018

Вы можете найти данные HTML с помощью тега article, а затем создать более сложные группировки:

import requests, re
from bs4 import BeautifulSoup as soup
s = soup(requests.get('https://www.timeanddate.com/eclipse/').text, 'html.parser')  
groups = [i for i in s.find_all('article', {'class':'art__eclipse-nxt pdflexi'})]
new_groups = [[getattr(i, c) for c in ['figcaption', 'h3', 'p']] for i in groups]
for date, title, description in new_groups:
  print('Title: {}'.format(title.text))
  print('Date: {}'.format(date.text))
  print('Description: {}'.format(soup(re.sub('\<i class\="i-font"\>\</i\>', '', str(description)), 'html.parser').find('p').text))
  print('-'*20)

Вывод:

Title: July 13, 2018 — Partial Solar Eclipse
Date: Jul 13, 2018
Description: South in Australia, Pacific, Indian Ocean New Features: 
Path Map | 3D Path Globe | Eclipse Information
--------------------
Title: July 27, 2018 — Total Lunar Eclipse
Date: Jul 27, 2018
Description: Much of Europe, Much of Asia, Australia, Africa, South in 
North America, South America, Pacific, Atlantic, Indian Ocean, 
Antarctica New Features: Path Map | 3D Path Globe | Eclipse Information
--------------------
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...