Le code est le suivant:
import requests from bs4 import BeautifulSoup ticker='FAST' url = "https://www.google.com/search?q=nasdaq+%s+earnings+reaction+history&tbs=qdr:m"%(ticker) response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") # for searchs in soup.find_all('div', {'class':'BNeawe s3v9rd AP7Wnd'}): cache = [] for searchs in soup.find_all('div', {'class':'kCrYT'}): if searchs.find('a')['href'] is None: continue cache.append(searchs.find('a')['href']) print(''.join(cache))
Je souhaite utiliser l'instruction if continue pour éviter l'erreur de type lorsque .find ('a') ['href'] ne renvoie aucun résultat. Cependant, cela ne fait pas le travail. Quelqu'un pourrait-il indiquer un moyen de le surmonter?
3 Réponses :
Utilisez le code ci-dessous pour sortir de TypeError
.
try: cache.append(searchs.find('a')['href']) except TypeError: continue
Merci d'avoir répondu! Je sais utiliser try + sauf pour gérer l'erreur. Ce que je souhaite comprendre, c'est le problème associé à l'instruction if continue.
N'essayez pas de mettre autant de choses sur une seule ligne:
... for searchs in soup.find_all('div'): tag = searchs.find('a') #print(searchs) if not tag: continue try: h = tag['href'] except KeyError as e: continue print(h)
Oui, le problème réside exactement dans le cas searchs.find ('a') is None pour lequel la référence à son champ 'href' produit l'erreur de type!
En fonction de ce que vous vouliez faire d'autre avec block si ce n'est qu'après href
puis utilisez select
et spécifiez que la classe parente avec l'élément enfant avec href code > attribut utilisant le combinateur descendant
import requests
from bs4 import BeautifulSoup
ticker='FAST'
url = "https://www.google.com/search?q=nasdaq+%s+earnings+reaction+history&tbs=qdr:m"%(ticker)
response = requests.get(url)
soup = BeautifulSoup(response.text, "html.parser")
cache = [searchs['href'] for searchs in soup.select('div.kCrYT [href]')]
print(''.join(cache))
solution vraiment sympa! Je veux collecter le résultat de la recherche et visiter les URL valides, le soup.select () évite si ... continuez et essayez ... sauf déclaration tout à fait, vraiment sympa et merci beaucoup!
docs.python.org/3/tutorial/errors.html#handling- exceptions
En relation: Python: continuez l'itération de la boucle for sur exception