Python實戰(zhàn)計劃——第二節(jié):爬取商品信息

視頻重點####

練習代碼####

總結#####

1. 視頻重點###

  1. 解析網(wǎng)頁soup = Beautifulsoup('html','lxml')Beautifulsoup只認css selector的寫法xpatch是表示元素絕對路徑的方法

  2. 描述要爬取元素的位置select到了一類信息放入了列表,之后要for循環(huán)釋放這些位置信息

  3. 釋放爬取標簽的信息get_text()方法能獲取標簽中的文本信息,get()方法來獲得標簽中的屬性信息,比如<img src='#'>中的鏈接信息。用zip()函數(shù)搭配for循環(huán),將所有信息裝入字典中。stripped_string獲取父節(jié)點下所有子節(jié)點的文本信息。

2. 練習代碼###

from bs4 import BeautifulSoup
    
    with open('F:/Plan-for-combating-master/week1/1_2/1_2answer_of_homework/index.html','r') as wb_data:
        soup = BeautifulSoup(wb_data,'lxml')
        imgs = soup.select('body > div > div > div.col-md-9 > div > div > div > img')
        titles = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a ')
        prices = soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')
        rates1=soup.find_all('span', class_='glyphicon')  #find_all()方法,class因為是關鍵字,在使用css selector時用class_
        views=soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')
        rates= rates1[2:]。#rates1列表中前兩個不是星級,去掉前兩個存到rates列表中。
        str_rates=[] #創(chuàng)建了一個存放將rates元素字符串化后的列表,因為在之后使用list.count()是,元素包含關鍵字。
        stars=[]#存放一個商品星級的列表
        nums=[]

        for i in rates:#此迭代將元素字符串化
            str_rates.append(str(i))

        while len(str_rates)!=0:#此循環(huán)借鑒課程的參考,del 選出的五個元素,配合while循環(huán),將全部星級按五個一組分好,list.count()統(tǒng)計實心星的個數(shù)。
            stars=str_rates[0:5]
            star=stars.count('<span class="glyphicon glyphicon-star"></span>')
            nums.append(star)
            del str_rates[0:5]
    
    
    for img,title,price,view,num in zip(imgs,titles,prices,views,nums):#釋放抓取的信息,并作結構化處理,存入data字典中。
        data={
            'title':title.get_text(),
            'price':price.get_text(),
            'view':view.get_text().split()[0],#view.get_text()的信息包含"views",去掉
            'img':img.get('src'),
            'num':str(num)+"星"
        }
        print(data)

結果##

運行結果.png

3. 總結###

  • 序列結構的數(shù)據(jù)

與序列有關的內建函數(shù)有:sorted()、reversed()、enumerate()、zip()),其中sorted()和zip()返回一個序列(列表)對象,reversed()、enumerate()返回一個迭代器(類似序列)
與序列有關的操作方法有:max(),min(),len(),+,*,切片,查詢成員資格成員in序列,查詢索引list[2]
for循環(huán)遍歷整個可迭代對象

  • 切片

對于序列結構的數(shù)據(jù),切片比如列表list[A:B:C],A表示起始位置,默認是0。B表示結束位置,C表示步長。
AB就是索引,索引和步長都有負值。正序表示時,第B個元素是取不到的。
負步長可以用作倒序取值。相比reverse,它不會改變數(shù)據(jù)結構。

負步長與reverse倒序區(qū)別.png

  • 計數(shù)

list.count(元素)

find() 和 find_all()

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 兩本不錯的書: 《Python參考手冊》:對Python各個標準模塊,特性介紹的比較詳細。 《Python核心編程...
    靜熙老師哈哈哈閱讀 3,442評論 0 80
  • 套接字編程:1、 函數(shù)的功能基本和c類似,唯一不同的地方在于當發(fā)生錯誤時,它不是通過返回值來告知的,而是通過觸發(fā)異...
    靜熙老師哈哈哈閱讀 689評論 0 11
  • 輸出結果: 每個商品的信息存入字典,使用列表保存所有商品信息 作業(yè) github 地址 功能,獲取: 圖片地址 價...
    超net閱讀 658評論 0 1
  • 1、打印:print(100000) print("字符串輸出") 2、獲取輸入:input("輸入提示:") 3...
    annyecho閱讀 940評論 0 0
  • 1 阿魚是個沒有心的人,阿魚媽媽如是說。 但阿魚并不認同,但對只有小學文化水平的魚媽說出這樣文藝傷感的話有些驚訝。...
    傾黛閱讀 282評論 0 0

友情鏈接更多精彩內容