2014-10-31 1 views
0

Для веб-страницы: http://www.amazon.com/Harry-Potter-Prisoner-Azkaban-Rowling/dp/0439136369/ref=pd_sim_b_2?ie=UTF8&refRID=1MFBRAECGPMVZC5MJCWG Как я могу очистить детали продукта и вывести dict в python. В вышеописанном случае, выход ДИКТ я хочу иметь будет:Как очистить информацию о продукте на веб-странице amazon с помощью beautifulsoup

Age Range: 9 - 12 years 
Grade Level: 4 - 7 
... 
... 

Я новичок в BeautifulSoup и не нашел хороший пример, чтобы это произошло. Я хочу привести пример.

+1

Вы предприняли какие-либо попытки? –

+1

Что у вас пробовал до сих пор ?? – Hackaholic

+0

Посмотрите на 'mechanize' и' BeautifulSoup', посмотрите на этот ответ на пример: http://stackoverflow.com/a/19284156/2327821 Как правило, вам нужно сделать немного больше работы с ногами, прежде чем вы спросите об этом открытом вопрос. – Michael

ответ

2

Идея заключается в том, чтобы перебрать все Product Details элементов с помощью table#productDetailsTable div.content ul liCSS 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.

+0

Спасибо за ответ. но почему вы добавляете информацию заголовка в request.get? – so3

+0

@ so3 Я просто так привык это делать :) – alecxe

+0

@alecxe Знаете ли вы, почему я получаю только {'Возрастной диапазон': '9 - 12 лет', 'Grade Level': '4 - 7'}, когда Я передаю аргумент «html.parser» в soup = BeautifulSoup (response.content, «html.parser»)? – multigoodverse

3
from bs4 import BeautifulSoup 
import urllib 
import urllib2 
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'} 
url = 'http://www.amazon.com/dp/0439136369' 
data = urllib.urlencode(headers) 
req = urllib2.Request(url,data) 
soup = BeautifulSoup(urllib2.urlopen(req).read()) 
for x in soup.find_all('table',id='productDetailsTable'): 
    for tag in x.find_all('li'): 
     tag.get_text() 

Из приведенного выше кода вы можете извлечь текст из таблицы, я не форматировать его на печать или положить в Словаре, как вы сказали, что вам нужно немного помочь. так что я сделал в этом вышеприведенном коде. Мне нужно изменить user-agent, так как амазон не позволял python user-agent. используя find_all Я нахожу таблицу с id=productDetailsTable'. затем я перебираю его, чтобы найти все теги li, поскольку вся информация хранится в этом теге.

Смежные вопросы