2017-07-26 3 views
-1

drucken Daten zu kratzen von real-estate agent page für ProjektWeb Scraping - nicht in der Lage Telefonnummern Der Versuch, mit Python und BeautifulSoup

konnte ich sowohl Name und Job Description für alle bekommen, aber nur eine geringe Anzahl von Telefonnummern.

Dies ist mein Code:

from urllib.request import urlopen as uReq 
from bs4 import BeautifulSoup as soup 

my_url = 'https://www.raywhite.com/contact/?type=People&target=people&suburb=Sydney%2C+NSW+2000&radius=5&firstname=&lastname=&_so=people' 

# opening connection 
uClient = uReq(my_url) 
page_html = uClient.read() 
uClient.close() 

    page_soup = soup(page_html, "html.parser") 

containers = page_soup.findAll("div",{"class":"card horizontal-split vcard"}) 

for container in containers: 
    agent_name = container.findAll("li", {"class":"agent-name"}) 
    name = agent_name[0].text 

    agent_role = container.findAll("li", {"class":"agent-role"}) 
    role = agent_role[0].text 

    phone = container.find("a").text 

    print("name: " + name) 
    print("role: " + role) 
    print("phone: " + phone) 

Dies ist eine Probe des ersten Paares ist, die gedruckt wurden nur die ersten beiden Agenten ihre Telefonnummern aufgelistet haben:

name: Mark Constantine 
role: Principal 
phone: 0418 222 643 
name: Dawn Veloskey 
role: Operations Manager 
phone: 0418 449 600 
name: Yvonne Lau 
role: Sales 
phone: 

name: Anthony Cavallaro 
role: Managing Director | Selling Principal 
phone: 

name: Ciara OConnor 
role: Sales Executive 
phone: 

name: Michael Buium 
role: Commercial Sales Manager and Auctioneer 
phone: 

name: Albert Hui 
role: Senior Commercial Property Manager 
phone: 

name: Jessie Yee 
role: Associate Director, Commercial Leasing & Management 
phone: 

nicht sicher, warum andere Telefonnummern werden nicht gedruckt, irgendwelche Vorschläge werden sehr geschätzt.

+1

Fragen Debug-Hilfe zu suchen ("warum nicht dieser Code zu arbeiten?") Muss das gewünschte Verhalten, um ein bestimmtes Problem oder Fehler enthalten und die Der kürzeste Code ist notwendig, um ihn in der Frage selbst zu reproduzieren. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: [Erstellen eines minimalen, vollständigen und überprüfbaren Beispiels] (https://stackoverflow.com/help/mcve). –

Antwort

3

Das ist, weil die ersten beiden keine Fotos haben, sonst ist das Foto das erste "a" -Tag.

ersetzen:

phone = container.find("a").text 

mit:

filterfn = lambda x: 'href' in x.attrs and x['href'].startswith("tel") 
phones = map(lambda x: x.text,filter(filterfn,container.findAll("a"))) 

for phone in phones: 
    print("phone number: " + phone) 
+0

Danke @XingzhouLiu, aber wenn ich versuche, es auszuführen, tritt dieser Fehler auf: Name: Mark Constantine Rolle: Principal Traceback (letzten Anruf zuletzt): Datei "C: \ Users \ Toby \ Desktop \ Webscrape \ scrape - mark4.py ", Zeile 28, in Drucken (" Telefon: "+ Telefon) TypeError: muss str sein, nicht Liste – Oren

+0

Ich hielt Telefone eine Liste b/c einige haben mehr als eine Telefonnummer. Sie können auch print ("phones:" + repr (phones)) verwenden oder die obigen Änderungen sehen. –