Как прочитать значения из двух дочерних тегов из родительского тега - PullRequest
0 голосов
/ 07 июля 2019

Есть ли способ создать две переменные 1) "Information_Header" для "" и 2) Information_Details для текста, встроенного в <p>, исключая <span>?

Например, Information_Header = Место проведения, например, Information_Details = AmCham Office, 1 Scotts Rd, Shaw Center # 23-03 S (228208) - J & J Auditorium

for link in final_urls[:1]:
    webpage_response = requests.get(link)
    event = BeautifulSoup(webpage_response.content, "html.parser")
    title = event.find("h1").get_text()
    name = event.find("p", attrs={"class":"name"}).get_text()
    event_information = event.find("div", attrs={"class":"info"})
    raw_text = event_information.find_all("p")
    print(raw_text)

[<p><span class="label">Venue</span> <span class="divider">:</span> AmCham Office, 1 Scotts Rd, Shaw Centre #23-03 S(228208) - J&amp;J Auditorium</p>, <p><span class="label">Date</span> <span class="divider">:</span> July 09, 2019</p>, <p><span class="label">Time</span> <span class="divider">:</span> 11:45 AM -  1:30 PM </p>, <p><span class="label">Price</span> <span class="divider">:</span> $25.00</p>]

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Вы можете использовать next_sibling после выбора класса divider, поскольку это выведет вас за пределы :.

, которое я показываю, используя пример события и с обработкой ошибок.

import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.amcham.org.sg/event/8914/')
soup = bs(r.content, 'lxml')
information_header = soup.select_one('.label')
information_detail = soup.select_one('.divider')
if information_header is None:
    information_header = 'Not listed'
else:
    information_header = information_header.text
try:
    information_detail = information_detail.next_sibling
except:
    information_detail = 'Not listed'
0 голосов
/ 07 июля 2019
data = '''<p><span class="label">Venue</span> <span class="divider">:</span> AmCham Office, 1 Scotts Rd, Shaw Centre #23-03 S(228208) - J&amp;J Auditorium</p>, <p><span class="label">Date</span> <span class="divider">:</span> July 09, 2019</p>, <p><span class="label">Time</span> <span class="divider">:</span> 11:45 AM -  1:30 PM </p>, <p><span class="label">Price</span> <span class="divider">:</span> $25.00</p>'''

from bs4 import BeautifulSoup

soup = BeautifulSoup(data, 'lxml')

data = []
for p in soup.select('p'):
    data.append([d.strip() for d in p.text.split(':', 1)])

for (header, info) in data:
    print('{: <10}{: <60}'.format(header, info))

Отпечатки:

Venue     AmCham Office, 1 Scotts Rd, Shaw Centre #23-03 S(228208) - J&J Auditorium
Date      July 09, 2019                                               
Time      11:45 AM -  1:30 PM                                         
Price     $25.00                                                      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...