BeautifulSoup не может использовать, если None, тогда продолжить оператор, чтобы избежать 'NoneType', объект не является подписным. Ошибка типа - PullRequest
1 голос
/ 13 октября 2019

Код следующий:

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'] не возвращает результата. Однако это не делает работу. Может ли кто-нибудь указать способ ее преодоления?

Ответы [ 3 ]

1 голос
/ 13 октября 2019

Не пытайтесь поместить так много в одну строку:

...
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)
1 голос
/ 13 октября 2019

В зависимости от того, что еще вы хотите сделать с блоком, если только после href, тогда используйте select и укажите, что родительский класс с дочерним элементом с атрибутом href использует комбинатор-потомок

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))
1 голос
/ 13 октября 2019

Используйте код ниже для выхода из TypeError.

try:
    cache.append(searchs.find('a')['href'])
except TypeError:
    continue
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...