Как правильно использовать функцию поиска из BeatifulSoup4 в python3? - PullRequest
0 голосов
/ 14 июля 2020

Я слежу за учебником 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")

1 Ответ

0 голосов
/ 14 июля 2020

Попробуйте следующее:

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!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...