1. 程式人生 > >前端網頁入門之瞭解網頁中的元素鞏固版(三)

前端網頁入門之瞭解網頁中的元素鞏固版(三)

繼昨天學習在本地擷取網頁資訊之後,決心做個小練習鞏固一下自己,在練習的過程中不但回顧了一下昨天所學知識,並且發現一些小小的新知識點記錄下來~
萌新一枚,如有不對,大神們輕噴!!!

正文開始~

今日練習目標:沿襲昨天使用BeautifulSoup的套路,對這個網頁的圖片,標題,價格,評論數,星級進行獲取
難點發現:對於星星顆數的獲取(就是自動識別點亮了幾個星星)
在這裡插入圖片描述

因每顆星星都對應著一行程式碼,圖片中的五顆星星就對應了五行程式碼,
為了讓其通過一行程式碼就顯示,觀察網頁,多取幾顆星星的selector發現規律:
從父節點開始取,此處保留:nth-of-type(2)
在這裡插入圖片描述

接下來就是今天疑惑的難點,對於星星數量的獲取
此處使用find all() 方法來解決
在這裡插入圖片描述

由此再加上昨天的學習內容
解析本地網頁,獲取圖片地址,價格,商品標題,評分量,評分星級這些內容
就so easy啦~

原始碼如下:

from bs4 import BeautifulSoup

with open('D:/Study/Data Analysis/week1/1_2/1_2answer_of_homework/1_2_homework_required/index.html','r')as wb_data:
    Soup = BeautifulSoup(wb_data,'lxml')
    #print(Soup)
    # address = Soup.select('body > div:nth-of-type(3) > div > div.col-md-9 > div:nth-of-type(3) > div:nth-of-type(3) > div > img')
    address = Soup.select('body > div > div > div.col-md-9 > div > div > div > img')
    price = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')
    title = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')
    amount = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
    stars = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p:nth-of-type(2)')

# print(address,price,title,amount,star,sep='\n-------------\n')

#現在是第三步篩選出標籤中需要的資訊,使用for迴圈取元素,並且對元素使用方法
# for address in address:
#     print(address.get('src'))
#
# for price in price:
#     print(price.get_text())

#優化後如下
#放入字典中方便查詢
#使用zip對所有元素進行字典迴圈並且對所有元素進行字典構造
for address,price,title,amount,stars in zip(address,price,title,amount,stars):
    data = {
        'address':address.get('src'),
        'price':price.get_text(),
        'title':title.get_text(),
        'amount':list(amount.stripped_strings),
        'stars': len(stars.find_all("span", class_='glyphicon glyphicon-star'))
    }
    print(data)

效果圖如下(可以看到最後的星星是自動識別出來有幾顆了)
在這裡插入圖片描述
做完本地網頁的元素的鞏固練習之後,
下一篇是一定要開始在真實網頁中爬爬資料闖一闖了!