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?
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