家中想置辦些家具,聽朋友介紹說蘇州蠡(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 注 需要養成...