Python конвертирует выходные данные BeautifulSoup в DICT / JSON - PullRequest
0 голосов
/ 29 августа 2018

Я пытаюсь собрать данные со страницы продукта Amazon. У меня есть вся разметка с Beautifulsoup. Я хочу получить необходимые данные о продукте в следующем формате json

{
  asin: string,
  title: string,
  price: number,
  listPrice: number,
  prime: boolean,

  dimensions: {
    height: number,
    length: number,
    width: number,
    weight: number,
  },
  images: Array<string>,
  attributes: Array<{ name: string, value: string }>,
  categories: <{ node: string, title: string }>,

}

Что я понял, мне нужно сначала получить подробности в формате словаря. Но не уверен, как получить эти конкретные теги из огромного HTML, чтобы преобразовать их в dict.

edit: мой код выглядит так

import requests
from bs4 import BeautifulSoup

url = "http://www.amazon.com/dp/B00ILZH9BO"
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}
response = requests.get(url,headers=headers)
soup = BeautifulSoup(response.text,"lxml")
print(soup)

edit 2: Я предоставляю html, из которого мне нужны детали моего продукта

#######title#########
<span class="a-size-large" id="productTitle">
  MagicBrite Complete Teeth Whitening Kit At Home Whitening
</span>


  #########price#####
<span class="a-color-price">
    <span class="p13n-sc-price">$11.85</span>
</span>



  ############images#########

<li class="a-spacing-small item"><span class="a-list-item">
<span class="a-declarative" data-action="thumb-action" data-thumb-action='{"thumbnailIndex":4,"variant":"PT04","index":4,"type":"image"}'>
<span class="a-button a-button-thumbnail a-button-toggle"><span class="a-button-inner"><input class="a-button-input" type="submit"/><span aria-hidden="true" class="a-button-text">
<img alt="" src="https://images-na.ssl-images-amazon.com/images/I/51f8kCdwmqL._SS40_.jpg"/>
</span></span></span>
</span>
</span></li>
<li class="a-spacing-small item"><span class="a-list-item">
<span class="a-declarative" data-action="thumb-action" data-thumb-action='{"thumbnailIndex":5,"variant":"PT05","index":5,"type":"image"}'>
<span class="a-button a-button-thumbnail a-button-toggle"><span class="a-button-inner"><input class="a-button-input" type="submit"/><span aria-hidden="true" class="a-button-text">
<img alt="" src="https://images-na.ssl-images-amazon.com/images/I/517mTOTBEiL._SS40_.jpg"/>
</span></span></span>
</span>
</span></li>

1 Ответ

0 голосов
/ 29 августа 2018

вручную.

data = {
    'asin': soup.find(id="ASIN").attrs['value'],
    'title': soup.find(id="title").text.strip(),
    'price': soup.find(id="price").find(id="priceblock_ourprice").text.strip(),
    ....
}

price кажется немного скрытым, и на разных страницах он может отличаться, где можно найти фактическую "окончательную цену".

Наконец, когда у вас есть готовый dict, просто введите его в json.dumps().

import json
result = json.dumps(data)

И если Amazon решит изменить свою наценку, все может сломаться.

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