Идея заключается в том, чтобы перебрать все Product Details
элементов с помощью table#productDetailsTable div.content ul li
CSS selector
, а затем использовать жирный текст в качестве ключа и next sibling в качестве значения:
from pprint import pprint
from bs4 import BeautifulSoup
import requests
url = 'http://www.amazon.com/dp/0439136369'
response = requests.get(url, headers={'User-agent': 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.120 Safari/537.36'})
soup = BeautifulSoup(response.content)
tags = {}
for li in soup.select('table#productDetailsTable div.content ul li'):
try:
title = li.b
key = title.text.strip().rstrip(':')
value = title.next_sibling.strip()
tags[key] = value
except AttributeError:
break
pprint(tags)
распечатки:
{
u'Age Range': u'9 - 12 years',
u'Amazon Best Sellers Rank': u'#1,440 in Books (',
u'Average Customer Review': u'',
u'Grade Level': u'4 - 7',
u'ISBN-10': u'0439136369',
u'ISBN-13': u'978-0439136365',
u'Language': u'English',
u'Lexile Measure': u'880L',
u'Mass Market Paperback': u'448 pages',
u'Product Dimensions': u'1.2 x 5.2 x 7.8 inches',
u'Publisher': u'Scholastic Paperbacks (September 11, 2001)',
u'Series': u'Harry Potter (Book 3)',
u'Shipping Weight': u'11.2 ounces ('
}
Обратите внимание, что мы разрываем петлю, как только попадаем в AttributeError
. Это происходит после того, как нет более жирного текста внутри элемента li
.
Вы предприняли какие-либо попытки? –
Что у вас пробовал до сих пор ?? – Hackaholic
Посмотрите на 'mechanize' и' BeautifulSoup', посмотрите на этот ответ на пример: http://stackoverflow.com/a/19284156/2327821 Как правило, вам нужно сделать немного больше работы с ногами, прежде чем вы спросите об этом открытом вопрос. – Michael