Python - просмотр веб-страниц pubmed.gov, тезисы w / BeautifulSoup - получение ошибки нетипа - PullRequest
1 голос
/ 20 мая 2019

Я вычеркиваю тезисы из pubmed.gov , и это работает по большей части, за исключением тезисов, в которых нет текста. Я попробовал заявление IF, но я явно что-то не так делаю. Как я могу сделать это и пропустить URL без абстрактного текста? Я предоставил URL, где это происходит.

Я получаю эту ошибку: AttributeError: у объекта 'NoneType' нет атрибута 'find'

Заранее спасибо!

import requests
from bs4 import BeautifulSoup

listofa_urls = ['https://www.ncbi.nlm.nih.gov/pubmed/31103571']

for th in listofa_urls:

    response = requests.get(th)
    soup = BeautifulSoup(response.content, 'html.parser')

    if (soup.find(class_='abstr').find('div') is not None):
       div_ = soup.find(class_='abstr').find('div')
       if div_.find('h4'):
           h4_ = div_.find_all('h4')
           p_ = div_.find_all('p')
       else:
           h4_ = soup.find(class_='abstr').find_all('h3')
           p_ = soup.find(class_='abstr').find_all('p')

       mp = list(map(lambda x, y: [x.get_text(),y.get_text()], h4_, p_))
       print(mp)

1 Ответ

3 голосов
/ 20 мая 2019

Как указано в комментариях, вы не можете сделать .find() для None, поэтому просто проверьте, найден ли первый find.

Просто удалите второй find:

if (soup.find(class_='abstr').find('div') is not None):

Становится

if (soup.find(class_='abstr') is not None)
...