Как я могу получить только имя и контактный номер? - PullRequest
0 голосов
/ 08 апреля 2019

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

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

Это то, чтоУ меня так далеко:

// 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']

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Добро пожаловать в 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, прежде чем пытаться читать значения из них, что вы можете сделать после этой SO записи .

0 голосов
/ 08 апреля 2019

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