python 讓挑選家具更方便

2021-09-11 12:52:27 字數 4758 閱讀 9496

家中想置辦些家具,聽朋友介紹說蘇州蠡(li第二聲)口的家具比較出名,因為工作在蘇州,也去那邊看過,簡直...,走斷雙腿都逛不完,更何況還疲於逛街的。

也瀏覽過家具城的官網,本著在一定的預算範圍之類挑選最合適的,作為乙個程式猿,一顆不安分的心,決定自己爬蟲下**,列出個excel**,也方便給父母輩們檢視,順帶再練習下爬蟲的。

同樣後期實地再去購買時,也可以帶上這份**進行參考。

關於爬蟲的文章還有另外兩篇實戰的:

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

excel**:

詞頻統計:

爬蟲分析

開啟官網 ,可以看到分類,這裡以「沙發」來舉例。

總共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 = "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.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])用於插入到指定的單元格

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

# 建立excel

def 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, )

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庫的使用,製作成**也方便父母輩檢視。當然,爬蟲的資料還可以用在許多地方。

歡迎關注我的部落格:blog.manjiexiang.cn/

讓Linux下的網路購物更方便些吧!

在alipay社群裡發現了一則意外的訊息 關於關閉firefox等瀏覽器訪問支付寶 許可權的通知。之所以感到意外,是因為本人一般都是在linux下使用 和支付寶。一直還覺得慶幸,農行的電子支付卡能在linux下的firefox裡正常操作。甚至,將農行的證書匯入到firefox裡後,也能正常使用個人銀...

如何用好Gson讓json使用更方便之解析篇

在以往專案中比較常用的無非就是解析json或者生成json 首先咱們先使用類庫 implementation com.google.code.gson gson 2.8.5 注 本人android studio版本比較高 例項解析篇 然後生成pojo類 我暫時命名為objectinfo 注 需要養成...

如何用好Gson讓json使用更方便之生成篇

在以往專案中比較常用的無非就是解析json或者生成json 首先咱們先使用類庫 implementation com.google.code.gson gson 2.8.5 注 本人android studio版本比較高 例項解析篇 然後生成pojo類 我暫時命名為objectinfo 注 需要養成...