Получение ошибки при разбивке на страницы — очистка веб-страниц python

#python #web-scraping #beautifulsoup

#python #очистка веб-страниц #beautifulsoup

Вопрос:

Я новичок в веб-очистке, поэтому здесь я написал код для веб-очистки Amazon, но я получаю ошибку при разбивке на страницы, поэтому не могли бы вы подсказать мне, как я могу исправить эту ошибку. взгляните на мой код:

 from requests_html import HTMLSession
from  bs4 import BeautifulSoup as bs

url = 'https://www.amazon.com/s?k=oneplus 8 proamp;crid=341BPYMDWRS5Wamp;qid=1606986946amp;sprefix=oneplus,aps'
s = HTMLSession()


def getdata(url):
    r = s.get(url)
    soup = bs(r.text,'html.parser')
    return soup
def nextpage(soup):
    page = soup.find('ul', {'class':'a-pagination'})
    if not page.find('li', {'class':'a-disabled a-last'}):
        url = 'https://www.amazon.com'  str(page.find('li', {'class':'a-selected'}).find('a')['href'])
        return url
    else:
        return
while True:
    soup = getdata(url)
    url = nextpage(soup)
    if not url:
        break
    print(url)
 

И я получаю эту ошибку:

Трассировка (последний последний вызов): файл «C:UsersDELLPycharmProjectsfirstAmazon.py «, строка 34, в файле url = nextpage(soup) «C:UsersDELLPycharmProjectsfirstAmazon.py «, строка 27, на следующей странице, если не страница.find(‘li’, {‘class’:’a-disabled’}): ошибка атрибута: ‘Нетипичный’ у объекта нет атрибута ‘find’

Комментарии:

1. Возникает ли ошибка до достижения последней страницы?

Ответ №1:

В сообщении об ошибке указывается, что page None это может произойти, если указанное выше soup.find() не может найти атрибут и, следовательно, возвращает None . Вам нужно будет проверить, действительно ли атрибут был найден, прежде чем продолжить поиск чего-либо еще.

Поэтому вместо:

 def nextpage(soup):
    page = soup.find('ul', {'class':'a-pagination'})
    if not page.find('li', {'class':'a-disabled a-last'}):
        url = 'https://www.amazon.com'  str(page.find('li', {'class':'a-selected'}).find('a')['href'])
        return url
    else:
        return
 

это должно выглядеть так:

 def nextpage(soup):
    page = soup.find('ul', {'class':'a-pagination'})
    if page is None:
        # page not found; return or do something else
        return
    elif not page.find('li', {'class':'a-disabled a-last'}):
        url = 'https://www.amazon.com'  str(page.find('li', {'class':'a-selected'}).find('a')['href'])
        return url
    else:
        return