Python實戰計劃學習筆記示例(2)爬取商品信息

學習Python第二節課,爬取商品信息。

1.爬取目標

爬取本地網頁中圖片地址、價格、商品標題、瀏覽量、評分星級。

爬取網頁及爬取信息

2.爬取成果

本地網頁爬取信息成果

3.我的代碼

#! /usr/bin/env/python
# -*- coding:utf-8 -*-


from bs4 import BeautifulSoup
path='./1_2_homework_required/index.html'    #這里使用了相對路徑,只要本地有這個文件就能打開

with open(path,'r') as f:    # 使用with open打開本地文件
    Soup = BeautifulSoup(f,'lxml')    # 解析網頁內容
    # print(Soup) 打印網頁被解析后得到的內容(網頁代碼)

    titles = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4 > a')    # 復制每個元素的css selector 路徑
    images = Soup.select('body > div > div > div.col-md-9 > div > div > div > img')
    prices = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.caption > h4.pull-right')
    stars  = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p:nth-of-type(2)')
    reviews = Soup.select('body > div > div > div.col-md-9 > div > div > div > div.ratings > p.pull-right')

# print(titles,images,prices,stars,reviews,sep='\n----------------------------\n')    # 打印每個元素,其中sep='\n--------\n'是為了在不同元素之間添加分割線

for title,image,price,star,review,in zip(titles,images,prices,stars,reviews):    # 使用for循環,把每個元素裝到字典中
    data = {
        'title':title.get_text(),
        'image':image.get('src'),
        'price':price.get_text(),
        'review':review.get_text(),
        'star': len(star.find_all("span", class_='glyphicon glyphicon-star'))
        # 觀察發現,每一個星星會有一次<span class="glyphicon glyphicon-star"></span>,所以我們統計有多少次,就知道有多少個星星了;
        # 使用find_all 統計有幾處是★的樣式,第一個參數定位標簽名,第二個參數定位css 樣式
        # 由于find_all()返回的結果是列表,我們再使用len()方法去計算列表中的元素個數,也就是星星的數量
    }
    print(data)

4.總結

4.1爬取步驟

1.使用BeautifuSoup解析網頁內容
首先使用open語句打開網頁,然后使用BeautifulSoup語句解析網頁。
2.描述網頁爬取的東西
此過程分以下幾步實現:
首先,使用瀏覽器工具得到所抓取信息的Css Path。
其次,由于BeautifulSoup不支持nth-child語法,去掉上一步中獲取Css Path的nth-child語法。
再次,使用select方法對爬取信息進行描述。
3.從標簽中獲取所需的東西然后裝入字典中。
在此過程中,使用了for語句和find函數。

4.2相關語句的用法解釋

1.open語句

open語句使用方法

2.BeautifulSoup語句

BeautifulSoup語句使用方法

3.select語句

select語句使用方法

4.find語句
find_all( name , attrs , recursive , text , **kwargs )
find_all()
方法搜索當前tag的所有tag子節點,并判斷是否符合過濾器的條件.詳細見:https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#find-all

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容