美汤加工

Beautiful Soup processing

我正在尝试从 http://www.indiacom.com/yellow-pages/travel-agencies-and-services/ 中删除不同旅行社的名称和评级 这是我的代码

    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 我想根据评级进行排序。我该怎么做,因为如果有人被评级,他们的评级就会显示,但如果有人没有被评级,它就会出现 "Be the first to rate" 那么我如何根据评级

进行排序

迭代列表,构建包含列表名称和评级的元组列表。使用 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)
]