Код следующий:
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))
Я хочу использовать оператор if continue, чтобы избежать ошибки типа, когда .find ('a') ['href'] не возвращает результата. Однако это не делает работу. Может ли кто-нибудь указать способ ее преодоления?
Не пытайтесь поместить так много в одну строку:
... 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)
В зависимости от того, что еще вы хотите сделать с блоком, если только после href, тогда используйте select и укажите, что родительский класс с дочерним элементом с атрибутом href использует комбинатор-потомок
href
select
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))
Используйте код ниже для выхода из TypeError.
TypeError
try: cache.append(searchs.find('a')['href']) except TypeError: continue