我如何分割字符串以获得联系电话?

时间:2019-04-03 18:06:21

标签: python web-scraping

我正在尝试从字符串获取联系电话,但失败了。

  

我的代码:

url="https://www.zillow.com/homes/for_sale/2121711837_zpid/47.285925,-122.4099 
25,47.224756,-122.549143_rect/12_zm/1_fr//"

 browser = webdriver.Firefox() 
 browser.get(url)
 soup = bs4.BeautifulSoup(browser.page_source,'html.parser')

try:
   contact_info= browser.find_element_by_xpath("//ul[@class='ds-listing-a 
   gent-info']")
   contact_info = contact_info.text.strip()
   print("Contact number : " + contact_info)
except:
    try:
      contact_info= 
      browser.find_element_by_xpath("//span[@class='property-info contact- 
      phone']")
      contact_info = contact_info.text.strip()
      print("Contact number : " + contact_info)
    except:
      contact_info= 
      browser.find_element_by_xpath("//span[@class='property-info contact- 
      phone']")
      contact_info = contact_info.text.strip()
      print("Contact number : " + contact_info)
  

我的代码输出

联系电话:泰勒·爱德华兹

5/5 5条评论

致电:(253)381-0981

  

预期结果

联系电话:(253)381-0981

谁能找到最好的解决方案。谢谢

4 个答案:

答案 0 :(得分:1)

只需查找即可,这样您就可以执行类似在联系人信息中创建新变量的操作

contact_info = "whatever your setting contact info to"

然后找到(以电话号码开头的

contact = contact_info[contact_info.find("("):]


print("Contact number:" + contact)

应该以一种简单的方式来实现,而无需使用正则表达式,但就像正则表达式一样,仅当其格式(区域代码)电话号码有效时,它才会起作用

答案 1 :(得分:0)

如果在您的代码contact_info = "Tyler Edwards 5 / 5 5 reviews Call: (253) 381-0981"中输入密码,则可以尝试使用正则表达式来查找确切格式的匹配数字:

import re
phn_no = re.findall(r'\d{,3}\D{,2}\d{,3}-\d{,4}', contact_info)
# Output : phn_no = ['253) 381-0981']

或者,如果字符串始终包含'Call',并且最后一个包含该电话号码,则尝试以下操作:

phn_no = ci[ci.lower().rfind('call')+5:]
# Output : phn_no = ' (253) 381-0981'

注意:正则表达式部分不适用于其他格式的电话号码,例如+7 123 41 86 789

答案 2 :(得分:0)

使用等待条件后,您可以从隐藏的输入元素之一中抓取

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

url = 'https://www.zillow.com/homes/for_sale/2121711837_zpid/47.263111,-122.466574,47.247644,-122.492452_rect/14_zm/1_fr/'
driver = webdriver.Chrome()
driver.get(url)
phone =  WebDriverWait(driver,10).until(EC.presence_of_element_located((By.CSS_SELECTOR, '[name=zmailRecipientPhone]'))).get_attribute('value')
print(phone)

答案 3 :(得分:0)

最简单的方法是在contact_info

中对要返回的文本进行子字符串化
contact_info  = '''
Contact number : Tyler Edwards

5 / 5 5 reviews

Call: (253) 381-0981'''

start = contact_info.find('Call: ')+6 # Find where Call starts and add 6 to account for the text

contact_info = contact_info[start:]

输出

'(253) 381-0981'