2017-03-23 1 views
-1

Ich Schabe Immobilien-Anzeigen von BS4, mit dem folgenden Code in Schaben,Python: Skip url Prozess bedingt

# get_ad_page_urls collects all ad urls displayed on page 
def get_ad_page_urls(link): 
    BS4_main(link) # BS4_main parses the link and returns the "container" object 
    return [link.get("href") for link in container.findAll("a", href=re.compile("^(/inmueble/)((?!:).)*$"))] 

# get_ad_data obtains data from each ad 
def get_ad_data(ad_page_url): 
    ad_data={} 
    response=requests.get(root_url+ad_page_url) 
    soup = bs4.BeautifulSoup(response.content, 'lxml') 

    <collecting data code here> 

    return ad_data 

Dies funktioniert gut. Durch den folgenden Code Multiprozessing, ich kratzen alle Anzeigen,

def show_ad_data(options): 
    pool=Pool(options) 
    for link in page_link_list: 
     ad_page_urls = get_ad_page_urls(link) 
     results=pool.map(get_ad_data, ad_page_urls)  

Jetzt die Frage:

Besondere Anzeigen übersprungen werden soll. Diese Anzeigen zeigen einen bestimmten Text an, mit dem sie erkennbar sind. Ich bin neu in der Verwendung von def Funktionen, ich weiß nicht, wie man den Code auf den nächsten ad_page_url überspringen.

Ich denke, dass der "Überspringen" Code zwischen soup = bs4.BeautifulSoup(response.content, 'lxml') und <collecting data code here> platziert werden sollte. So etwas wie,

# "skipping" semi-code 
for text in soup: 
    if 'specific text' in text: 
     continue 

aber ich bin nicht sicher, ob mit def Funktionen für ermöglicht continue auf Iterationen anzuwenden.

Wie soll ich den Code so ändern, dass er eine Anzeige überspringt, wenn sich der Text specific auf der Seite befindet?

+1

A def Funktion wie Sie es nennen wahrsten Sinn des Wort ist nur ein Block von Code, der ausgeführt werden Wenn Sie diese Funktion aufrufen, also ja, wenn Sie eine Fortsetzung innerhalb einer for-Schleife ausführen, wird einfach zur nächsten Iteration gesprungen und fortgefahren. Die einzige Möglichkeit, die gesamte Funktion zu stoppen, wäre eine Art sys.exit() - oder return-Funktionsaufruf, um aus der 'def-Funktion' zurückzukehren. – Artagel

Antwort

0

Ja eine Fortsetzung oder das Überspringen auf die nächste Iteration weitergehen passieren wird, wenn eine Sprungbedingung in der if-Anweisung erfüllt ist:

def get_ad_data(ad_page_url): 
    ad_data={} 
    response=requests.get(root_url+ad_page_url) 
    soup = bs4.BeautifulSoup(response.content, 'lxml') 

    for text in soup: 
    if 'specific text' in text: 
     continue #or pass 
    else: 
     <collecting data code here> 

    return ad_data