python 讓挑選傢具更方便

來源:互聯網
上載者:User

標籤:分割   www   好友   開心   通過   sts   join   str   start   

原文連結:https://mp.weixin.qq.com/s/tQ6uGBrxSLfJR4kk_GKB1Q

家中想置辦些傢具,聽朋友介紹說蘇州蠡(li第二聲)口的傢具比較出名,因為工作在蘇州,也去那邊看過,簡直...,走斷雙腿都逛不完,更何況還疲於逛街的。
也瀏覽過傢具城的官網,本著在一定的預算範圍之類挑選最合適的,作為一個程式猿,一顆不安分的心,決定自己爬蟲下網站,列出個excel表格,也方便給父母輩們查看,順帶再練習下爬蟲的。
同樣後期實地再去購買時,也可以帶上這份表格進行參考。
關於爬蟲的文章還有另外兩篇實戰的:

python itchat 爬取好友資訊

python爬蟲學習:爬蟲QQ說說並產生詞雲圖,回憶滿滿

excel表格:

詞頻統計:

爬蟲分析

開啟官網 http://www.likoujiaju.com/ ,可以看到分類,這裡以「沙發」來舉例。

總共8頁的資料,第一頁的網址裡 sell/list-66.html,第二頁的sell/list-66-2.html,所以sell/list-66-1.html也就是第一頁資料了,這樣就更方便遍曆網址來擷取資料了。

同時這裡使用BeautifulSoup解析資料,F12尋找標題、價格、圖片對應的標籤。

def get_data():    # 定義一個列表格儲存體資料    furniture = []    # 用於存放傢具名,後續用於產生詞頻    title_all = ""    # 分頁資料擷取    for num in range(1, 9):        url = "http://www.likoujiaju.com/sell/list-66-%d.html" % num        response = requests.get(url)        content = BeautifulSoup(response.content, "lxml")        # 找到資料所在的div塊        sm_offer = content.find("div", class_="sm-offer")        lis = sm_offer.ul.find_all("li")        # 遍曆每一條資料        for li in lis:            # 價格            price_span = li.find("span", class_="sm-offer-priceNum")            price = price_span.get_text()            # 名稱            title_div = li.find("div", class_="sm-offer-title")            title = title_div.a.get_text()            title_all = title_all + title + " "            # 圖片            photo_div = li.find("div", class_="sm-offer-photo")            photo = photo_div.a.img.get("src")            # 詳情連結            href = photo_div.a.get("href")            # 數組裡每一項是元祖            furniture.append((price, title, photo, href))    # 排序    furniture.sort(key=take_price, reverse=True)    # 產生excel    create_excel(furniture, title_all)

爬取到的價格是string類型的,且有些價格並不明確的,所以這裡需要對價格進行處理並排序,用到的list的sort(key=take_price)方法,其中key=take_price指定的方法,使用指定的方法去進行比較排序。

# 傳參是列表的每一個元素,這裡即元祖def take_price(enum):    # 取元祖的第一個參數--價格,處理價格得到數實值型別進行比較    price = enum[0]    if "面議" in price:  # 面議的話就設為0        return 0    start = price.index("¥")    end = price.index("/")    new_price = price[start + 1:end]    return float(new_price)

再對列表進行排序操作,reverse=True降序排列

furniture.sort(key=take_price, reverse=True)
產生表格

這裡採用的xlsxwriter庫,便於圖片的插入,安裝pip install xlsxwriter
主要用到的方法:
xlsxwriter.Workbook("")建立excel表格。
add_worksheet("")建立工作表。
write(row, col, *args) 根據行、列座標將資料寫入儲存格。
set_row(row, height) 設定行高。
set_column(first_col, last_col, width) 設定列寬,first_col 指定開始列位置,last_col 指定結束列位置。
insert_image(row, col, image[, options]) 用於插入圖片到指定的儲存格

建立兩個表,一個用於存放爬取的資料,一個用於存放詞頻。

# 建立exceldef create_excel(furniture, title_all):    # 建立excel表格    file = xlsxwriter.Workbook("furniture.xlsx")    # 建立工作表1    sheet1 = file.add_worksheet("sheet1")    # 定義表頭    headers = ["價格", "標題", "圖片", "詳情連結"]    # 寫表頭    for i, header in enumerate(headers):        # 第一行為表頭        sheet1.write(0, i, header)    # 設定列寬    sheet1.set_column(0, 0, 24)    sheet1.set_column(1, 1, 54)    sheet1.set_column(2, 2, 34)    sheet1.set_column(3, 3, 40)    for row in range(len(furniture)):  # 行        # 設定行高        sheet1.set_row(row + 1, 180)        for col in range(len(headers)):  # 列            # col=2是當前列為圖片,通過url去讀取圖片展示            if col == 2:                url = furniture[row][col]                image_data = BytesIO(urlopen(url).read())                sheet1.insert_image(row + 1, 2, url, {"image_data": image_data})            else:                sheet1.write(row + 1, col, furniture[row][col])    # 建立工作表2,用於存放詞頻    sheet2 = file.add_worksheet("sheet2")    # 產生詞頻    word_count(title_all, sheet2)    # 關閉表格    file.close()

目錄下會產生 furniture.xlsx 表格

產生詞頻

利用jieba分詞對傢具名進行分詞處理,用字典儲存各個名詞的數量,寫入到excel。

# 產生詞頻def word_count(title_all, sheet):    word_dict = {}    # 結巴分詞    word = jieba.cut(title_all)    word_str = ",".join(word)    # 處理掉特殊的字元    new_word = re.sub("[ 【】-]", "", word_str)    # 對字串進行分割出列表    word_list = new_word.split(",")    for item in word_list:        if item not in word_dict:            word_dict[item] = 1        else:            word_dict[item] += 1    # 對字典進行排序,按照數目排序    val = sorted(word_dict.items(), key=lambda x: x[1], reverse=True)    # 寫入excel    for row in range(len(val)):        for col in range(0, 2):            sheet.write(row, col, val[row][col])

詞頻統計,實地去購買的時候,也可以根據相應的詞彙去諮詢賣家~

這篇文章用到的爬蟲方面的知識還是比較基礎的,excel表格的產生也是xlsxwriter庫的使用,製作成表格也方便父母輩查看。當然,爬蟲的資料還可以用在許多地方。

詳細代碼見
github地址:https://github.com/taixiang/furniture

歡迎關注我的部落格:https://blog.manjiexiang.cn/
更多精彩歡迎關注號:春風十裡不如認識你

有個「佛系碼農圈」,歡迎大家加入暢聊,開心就好!

到期了,可加我 tx467220125 拉你入群。

python 讓挑選傢具更方便

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.