2015-03-23 3 views
2

Я пытаюсь лом имени и рейтингов различных туристических агентов из http://www.indiacom.com/yellow-pages/travel-agencies-and-services/ Вот мой кодBeautiful Soup обработка

from bs4 import BeautifulSoup 
    import requests 
    url="http://www.indiacom.com/yellow-pages/travel-agencies-and-services/" 
    r=requests.get(url) 
    soup=BeautifulSoup(r.content) 
    links=soup.find_all("a") 
    #for link in links: 
    # if"http" in link.get("href"): 
     #  print("<a href='%s'>%s</a>"%(link.get("href"),link.text)) 
    L=[] 
    g_data=soup.find_all("div",{"class": "Info_listing"}) 
    for item in g_data: 
     L.append(item.contents[3].text) 
     # L.append(item.text) 
    for index in L: 
     print(index) 
    #print(L[2]) 

Я спасаю имена и рейтинги в list.Now Я хочу, чтобы отсортировать на основы рейтингов. Как я могу это сделать, потому что, если кто-то оценивает их рейтинг, отображается, но если кто-то не оценивается, он приходит «Будьте первым, чтобы оценить». Так как я могу сортировать на основе рейтинга

+0

как же список выглядит? – letsc

+0

Когда я печатаю список, похоже, что это имя появляется по следующему адресу: http://i.imgur.com/0ecAvrc.png, тогда рейтинг приходит с большим пространством между –

ответ

3

Итерация над списками, построение списка кортежей, содержащих листинговые имена и рейтинги. Используйте sorted(), чтобы отсортировать по рейтингу. Лечить Be The First To Rate как 0 Рейтинг:

from operator import itemgetter 

listings = [] 
for item in soup.select("div.Details_listing"): 
    name = item.a.text 
    rating = item.find('div', id='total_ratings_details').text 
    rating = 0 if rating.startswith('Be The First To Rate') else float(rating.split(' ')[0]) 

    listings.append((name, rating)) 

print sorted(listings, key=itemgetter(1)) 

Печать:

[ 
    (u'Jasvinder Tours And Travels', 0), 
    ... 
    (u'The Royal Tours & Travels', 2.9), 
    (u'Preeti Travels & Transport', 4.4) 
] 
+0

Что делать, если я хочу сделать то же самое для всех страниц ? Должен ли я каждый раз передавать URL-адрес для страниц1, page2, page3 или есть какая-то команда для отказа? –