как получить названия продуктов от Amazon - PullRequest
0 голосов
/ 26 сентября 2019

Я видел все соответствующие предыдущие темы об этом, и я многое узнал (особенно о разнице между lxml и html.parser) в любом случае после того, как я изменил свой BeautifulSoup, чтобы проанализировать страницу как lxml, я все еще не могу получитьвсе время один и тот же результат.большую часть времени я получаю: "name = soup.find ('span', id =" productTitle "). text AttributeError: у объекта 'NoneType' нет атрибута 'text'", но через несколько раз я получаю настоящее имяпродукт.что мне не хватает?

import requests
from bs4 import BeautifulSoup


def main():
    url = "https://www.amazon.com/Homego-Bluetooth-Wrist-Smart-Handsfree/dp/B01DOULDN0/ref=sr_1_1?keywords=smart+watch&qid=1569450390&sr=8-1"
    client = requests.get(url, headers={"User-Agent": "Defined"})
    try:
        client.raise_for_status()
    except requests.exceptions.HTTPError as e:
        print("Error!!!!" + str(e))

    soup = BeautifulSoup(client.content, 'lxml')
    name = soup.find('span', id="productTitle").text
    title = name[161:len(name)-128]
    print("the title is: ", title)


if __name__ == '__main__':
    main()

1 Ответ

1 голос
/ 26 сентября 2019

Предположительно, вы получаете другой HTML обратно.Проверьте сам HTML.Вы можете добавить в тест, являются ли переменные None, прежде чем пытаться получить доступ к .text

import requests
from bs4 import BeautifulSoup

def main():
    url = "https://www.amazon.com/Homego-Bluetooth-Wrist-Smart-Handsfree/dp/B01DOULDN0/ref=sr_1_1?keywords=smart+watch&qid=1569450390&sr=8-1"
    client = requests.get(url, headers={"User-Agent": "Defined"})
    try:
        client.raise_for_status()
    except requests.exceptions.HTTPError as e:
        print("Error!!!!" + str(e))

    soup = BeautifulSoup(client.content, 'lxml')
    name = soup.find('span', id="productTitle")
    if name is None:
        name = 'N/A'
        title = 'n/a'
    else:
        name = name.text    
        title = name[161:len(name)-128]
    print("the title is: ", title)


if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...