Как я могу получить только имя и контактный номер?

Я пытаюсь получить имя и контактный номер из div. div иногда имеет один диапазон, иногда два, а иногда и три. Я ожидаю, что:

  • Мне нужно только имя и контактный номер, если таковой имеется
  • В некоторых случаях имя будет недоступно, а контактный номер будет доступен, тогда переменной имени следует присвоить значение «Н/Д»
  • В некоторых случаях контактный номер будет недоступен, а имя будет доступно, тогда переменной следует присвоить значение «Н/Д»

Это то, что у меня есть до сих пор:

// if you change url to url-1 and url-2 then you will see how it works.
url = "https://www.zillow.com/homedetails/19442-185th-Ave-SE-Renton-WA- 
98058/54831221_zpid/"
#url-1 = "https://www.zillow.com/homedetails/20713-61st-St-E-Bonney-Lake-WA-98391/99371104_zpid/"
#url-2 = "https://www.zillow.com/homes/fsbo/house_type/121319389_zpid/globalrelevanceex_sort/47.465758,-122.259207,47.404798,-122.398424_rect/12_zm/5f9305c92cX1-CRbri51bo8epha_yly1g_crid/0_mmm/"
browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)

soup = bs4.BeautifulSoup(browser.page_source,'html.parser')

contacts = browser.find_elements_by_css_selector("span.listing-field")
contact_name = []
contact_phone = "N/A"
contact_web = "N/A"

for i in range(0, len(contacts)):
    if len(contacts[i].find_elements_by_tag_name("a")) > 0:
    contact_web = 
    contacts[i].find_element_by_tag_name("a").get_attribute("href")
    elif re.search("\\(\\d+\\)\\s+\\d+-\\d+", contacts[i].text):
        contact_phone = contacts[i].text
    else:
        contact_name.append(contacts[i].text)

print(contact_phone) // Output: (253) 335-8690
print(contact_name)  // Output: ['Sheetal Datta']

что не так с этим кодом?

Chris 08.04.2019 18:20

Теперь имя хранится в списке, я хочу, чтобы имя было в переменной, и если имя или контактный_номер не найдены, переменная должна быть назначена как N/A.

Zubair Farooq 08.04.2019 18:22
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
81
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Добро пожаловать в StackOverflow! Вы должны подойти к этой проблеме программно, а именно с условиями. Как вы уже заметили,

if the name exists and the contact number exists,
    use them
else if the name exists only,
    use the name and assign the contact number as 'N/A'
else if the contact number exists only,
    use the contact number and assign the name as 'N/A'

Как видите, вы можете реализовать приведенный выше псевдокод как настоящие условные операторы в Python, используя операторы if-elif-else. В зависимости от того, как структурирована веб-страница, вам нужно сначала проверить наличие span, прежде чем пытаться читать из них значения, что вы можете сделать, следуя этому ТАК пост.

Вы можете использовать try: except:, чтобы проверить, присутствуют ли имя контакта и номер телефона, а затем соответствующим образом присвоить значение. Смотрите код...

from bs4 import BeautifulSoup
from selenium import webdriver
import time

url = ('https://www.zillow.com/homedetails/19442-185th-Ave-SE-Renton-WA-'
'98058/54831221_zpid/')

browser = webdriver.Firefox()
browser.get(url)
time.sleep(5)
soup = BeautifulSoup(browser.page_source,'html.parser')
browser.quit()
tag = soup.find('div',attrs = {
    'class':'home-details-listing-provided-by zsg-content-section'})

try:
    contact_name = tag.find('span',attrs = {
        'class':'listing-field'}).text
except:
    contact_name = 'N/A'

try:
    contact_phone = tag.find('span',attrs = {
        'class':'listing-field'}).findNext('span').text
except:
    contact_phone = 'N/A'


print('Contact Name: {}\nContact Phone: {}'.format(
    contact_name,contact_phone))

Выход:

Contact Name: Sheetal Datta
Contact Phone: (253) 335-8690

Другие вопросы по теме