我试图从字符串中获取联系电话,但失败了。
我的代码:
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
任何人都可以找到最好的解决方案。谢谢
只是做一个查找,这样你就可以做一些事情,比如从你的联系信息创建一个新变量
contact_info = "whatever your setting contact info to"
然后找到以电话号码开头的 (
contact = contact_info[contact_info.find("("):]
print("Contact number:" + contact)
这应该适用于一种不使用正则表达式的简单方法,但就像正则表达式一样,这只有在该格式(区号(电话号码时才有效
最简单的方法是对返回的文本进行子串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'
如果你在代码中,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
您可以在使用等待条件后从其中一个隐藏的输入元素中抓取
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)