2017-11-10 2 views
0

Ich versuche, diese Funktion erneut auszuführen, wenn sie die Informationen auf der Seite nicht findet.Festlegen einer einfachen Wiederholungsfunktion in Python beim Analysieren von HTML

Ich dachte, das wäre eine Lösung, aber es funktioniert nicht. Ich bin nicht sicher, wie man die Schleife des Kratzens mit einfacher Funktionalität passieren lässt. Ich habe versucht, das Wiederholungsmodul zu verwenden, aber es hat Probleme beim Installieren, daher wäre eine Lösung mit einem festen Code ideal.

Mein Code ist unten

import time, requests, webbrowser, sys, os, re, json 
from bs4 import BeautifulSoup 
from colorama import Fore, Back, Style, init 
import subprocess as s 

url = "http://notimportant.com" 

r = requests.get(url) 
soup = BeautifulSoup(r.content, "html.parser") 

def getIds(): 
    global product_id 
    for script in scripts: 
     if 'spConfig =' in script.getText(): 
      #idlive = True 
      regex = re.compile(r'var spConfig = new Product.Config\((.*?)\);') 
      match = regex.search(script.getText()) 
      spConfig = json.loads(match.groups()[0]) 
      for key, attribute in spConfig['attributes'].iteritems(): 
       for option in attribute['options']: 
        if option['label_uk'] == size: 
         label = option['label_uk'].strip() 
         for product_id in option['products']: 
          print(Fore.CYAN + "Size Found!") 
          print product_id, "-", label 
          #str = product_id 
          #productsizeid = str 
     else: 
      print(Fore.RED + "Sizes not live yet") 
      print("Retrying in 10 seconds . . .") 
      time.sleep(10) 
      print("Trying again. . .") 
      getIds() 
+1

sind Sie zufällig die brakcets fehlt nach GetIDs Aufruf? – Eumel

+0

das ist nur ein Tippfehler auf meiner Kopie und einfügen, mit den Klammern, wird es die IDs gefunden und auch die sonst Nachricht gedruckt, so ist es immer noch falsch – cbos93

+0

Haben Sie iterativ und nicht rekursiv versucht? Das Problem, das ich hier sehe, ist, wenn das Skript nicht 'spConfig =' darin hat, wird es endlos Schleife. Vielleicht ist es das, was Sie wollen, aber der Call-Stack wird überladen, wenn er rekursiv ist. – AlEmerich

Antwort

0

Iteration wird die bevorzugte Methode so etwas wie:

url = "http://notimportant.com" 
size_alive = false 
while not size_alive: 
      do_the_scraping_function(#the function should set size_alive=true when it finds spConfig =' in script.getText()) 
      print("retrying in 10 seconds") 
      time.sleep(10) 
Verwandte Themen