как восстановить текст продавца и цену - PullRequest
0 голосов
/ 20 апреля 2020

привет, я пытаюсь восстановить текст продавца и цену.

это код

<div class="cd">
  <span class="seller"> Vendido por </span>
  <span class="seller_name">
          Cdiscount
        </span>
  <div class="offer_price_section">
    <div>
      <span class="price_offer">
              88,99 €
            </span>
    </div><!---->
  </div>
</div>

и мой код python, я беру URL из базы данных и нуждаюсь в вставке в каждый URL продавец и цена так, я делаю это:

if database.is_connected():
        cursor = database.cursor()
        cursor.execute("sql")
        records = cursor.fetchall()

        for row in records:
            url = urlopen('row[0].encode('utf-8')).read()
            soup = BeautifulSoup(url, "lxml")
            find = soup.find_all('div', {'class' : 'cd'}, limit=None)
            for offer in find:
                vendor = offer.span({'class' : 'seller_name'})
                print vendor

но когда поставщик печати получает только []

и как можно сохранить информацию, только если продавец является Cdiscount?

может мне помочь?

большое спасибо

1 Ответ

0 голосов
/ 20 апреля 2020

Используйте find() или find_all()

vendor = offer.find('span', {'class' : 'seller_name'})

РЕДАКТИРОВАТЬ: После тестирования я обнаружил, что это должно быть

vendor = offer('span', {'class' : 'seller_name'})

Использование offer.span вас получить только первый <span> в <div>.

Используя offer.span(...), он не ищет <span> внутри <div>, а элементы внутри <span> - он работает как offer.span.find_all(...).

Do c: Вызов тега похож на вызов find_all ()


from bs4 import BeautifulSoup

HTML = '''<div class="cd">
  <span class="seller"> Vendido por </span>
  <span class="seller_name">
          Cdiscount
        </span>
  <div class="offer_price_section">
    <div>
      <span class="price_offer">
              88,99 €
            </span>
    </div><!---->
  </div>
</div>'''

soup = BeautifulSoup(HTML, "lxml")
find = soup.find_all('div', {'class' : 'cd'})
for offer in find:
    vendor = offer.find('span', {'class' : 'seller_name'})
    print(vendor.text.strip())

    vendor = offer.find_all('span', {'class' : 'seller_name'})
    print(vendor)

    vendor = offer('span', {'class' : 'seller_name'})
    print(vendor)

Результат

Cdiscount

[<span class="seller_name">
          Cdiscount
        </span>]

[<span class="seller_name">
          Cdiscount
        </span>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...