Получайте контент из инкапсулированных тегов <strong>с BeautifulSoup - PullRequest
0 голосов
/ 17 октября 2018

Я бы хотел разобрать этот железнодорожный сайт с Python.Вот код:

<div id="ctl02_Freeform1_plcContent1_FreeformContent" class="freeform-content"><p><strong>Miles (Owned or Leased):</strong> 206 (Arizona- 181, New Mexico- 25)</p><p><strong>Interchanges:</strong> Union Pacific (Lordsburg, N.M.)</p><p><strong>Capacity:</strong> 263k</p><p><strong>Commodities:</strong> Agricultural Products, Chemicals, Copper</p><p><strong>Railcar Storage Available: </strong><a href="/customers/railcar_storage" title="Railcar Storage">No</a></p><p>Acquired by G&amp;W in 2011</p><p>AZER was originally chartered in 1895 as the Gila Valley, Globe &amp; Northern, with 133 route-miles between Bowie and Miami, Arizona. Today, AZER also includes a 70-mile line between Clifton, Arizona, and Lordsburg, New Mexico, that connects to the original Bowie line via trackage rights.</p><p> </p></div>

В качестве вывода я хотел бы получить содержимое полей Мили, Обмены, Емкость и Товары.

Имена категорий всегда в <strong>теги, весь сегмент в <p>: <p><strong>Commodities:</strong> Agricultural Products, Chemicals, Copper</p>

Как я могу получить это в BeautifulSoup?

from bs4 import BeautifulSoup

import requests

r  = requests.get("https://www.gwrr.com/railroads/north_america/AZER")

data = r.text

soup = BeautifulSoup(data, 'lxml')

titel = soup.title
print(titel.string)

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Другой альтернативой может быть что-то вроде следующего:

from bs4 import BeautifulSoup
import requests

res = requests.get('https://www.gwrr.com/railroads/north_america/AZER#m_tab-one-panel')
soup = BeautifulSoup(res.text,"lxml")
items = [item.next_sibling for item in soup.select(".freeform-content p strong")][:4]
print(items)

Результат, который вы получите:

[' 206 (Arizona- 181, New Mexico- 25)', ' Union Pacific (Lordsburg, N.M.)', ' 263k', ' Agricultural Products, Chemicals, Copper']
0 голосов
/ 17 октября 2018

Вы можете очистить все теги p и затем проанализировать контекст, который содержит каждый:

from bs4 import BeautifulSoup as soup
import requests, re
d = soup(requests.get('https://www.gwrr.com/railroads/north_america/AZER#m_tab-one-panel').text, 'html.parser')
results = dict([i.text.split(': ') for i in d.find('div', {'id':'ctl02_Freeform1_plcContent1_FreeformContent'}).find_all('p')][:4])

Вывод:

{'Miles (Owned or Leased)': '206 (Arizona- 181, New Mexico- 25)', 'Interchanges': 'Union Pacific (Lordsburg, N.M.)', 'Capacity': '263k', 'Commodities': 'Agricultural Products, Chemicals, Copper'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...