Я слежу за учебником YouTube о том, как очистить страницу продукта Amazon. Сначала я пытаюсь получить название продукта. Позже я хочу получить цену Amazon и вторичную цену. Для этого я устин прошу и бс4. Вот код:
import requests from bs4 import BeautifulSoup URL = 'https://www.amazon.de/Teenage-Engineering-Synthesizer-FM-Radio-AMOLED-Display/dp/B00CXSJUZS/ref=sr_1_1_sspa?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=op-1&qid=1594672884&sr=8-1-spons&psc=1&smid=A1GQGGPCGF8PV9&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFEMUZSUjhQMUM3NTkmZW5jcnlwdGVkSWQ9QTAwMzMwODkyQkpTNUJUUE9QUFVFJmVuY3J5cHRlZEFkSWQ9QTA4MzM4NDgxV1Y3UzVVN1lXTUZKJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==' headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'} page = requests.get(URL,headers=headers) soup = BeautifulSoup(page.content,'html.parser') title = soup.find('span',{'id' : "productTitle"}) print(title)
мой заголовок - Нет. Таким образом, функция поиска не находит элемент с идентификатором productTitle. Но проверка супа показывает, что есть элемент с этим идентификатором ..
Так что не так с моим кодом? Еще пробовал:
title = soup.find(id = "productTitle")
Попробуйте следующее:
import requests from bs4 import BeautifulSoup URL = 'https://www.amazon.de/Teenage-Engineering-Synthesizer-FM-Radio-AMOLED-Display/dp/B00CXSJUZS/ref=sr_1_1_sspa?__mk_de_DE=%C3%85M%C3%85%C5%BD%C3%95%C3%91&dchild=1&keywords=op-1&qid=1594672884&sr=8-1-spons&psc=1&smid=A1GQGGPCGF8PV9&spLa=ZW5jcnlwdGVkUXVhbGlmaWVyPUFEMUZSUjhQMUM3NTkmZW5jcnlwdGVkSWQ9QTAwMzMwODkyQkpTNUJUUE9QUFVFJmVuY3J5cHRlZEFkSWQ9QTA4MzM4NDgxV1Y3UzVVN1lXTUZKJndpZGdldE5hbWU9c3BfYXRmJmFjdGlvbj1jbGlja1JlZGlyZWN0JmRvTm90TG9nQ2xpY2s9dHJ1ZQ==' headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36'} page = requests.get(URL,headers=headers) soup = BeautifulSoup(page.content,'lxml') title = soup.find('span',{'id' : "productTitle"}) print(title.text.strip())
Вы все делаете правильно, но у вас "плохой" парсер. Подробнее о различиях парсеров читайте здесь . Я предпочитаю l xml, но иногда использую html5lib. Я также добавил
.text.strip()
для печати, чтобы печатался только текст заголовка.
Примечание: сначала вам нужно установить l xml для python!