斷斷續續地在網路和書籍上學習有關 Python 的爬蟲技術,但隨著反爬蟲的技術也是越來越精進,所以想說藉由 「超新手也能用 Python 爬蟲打造貨比千家的比價網站」這門課來看看能否解決相關的疑惑。這篇筆記下結合先前所學,將爬取到的電商網站資料,運用「Pandas」做整理後輸出成 csv 或是 xlsx 檔案。
課程相關資訊
[連結]:https://hiskio.com/courses/527/lectures/26092
本篇範圍:Chapter 4 ( 資料很髒很亂怎麼辦?資料清理與資料整併 )
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
重點整理
1. 將爬回來的資料,使用 pandas 整理出各自的表格
2. 將表格依照一定的方式合併後,輸出成 csv 或是 xlsx 檔
3. 過程中,有機會遇上文字編碼問題:中文的話需要指定 ‘utf_8_sig’
程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import sys import codecs sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach()) import requests from bs4 import BeautifulSoup headers = { 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36' } totalPage = 6 currentPage = 1 links = [] products = [] for currentPage in range(1, totalPage+1): url = f'https://m.momoshop.com.tw/search.momo?_advFirst=N&_advCp=N&curPage={currentPage}&searchType=&cateLevel=-1&ent=k&searchKeyword=iphone13&_advThreeHours=N&_isFuzzy=0&_imgSH=fourCardType' rawRes = requests.get(url,headers = headers) resText = rawRes.text soup = BeautifulSoup(resText,'html.parser') for item in soup.findAll('li', class_='goodsItemLi'): link = 'https://www.momoshop.com.tw/goods/GoodsDetail.jsp?'+item.a['href'].split('?',1)[1] productRawRes = requests.get(link,headers = headers) productRawText = productRawRes.text productSoup = BeautifulSoup(productRawText,'html.parser') product = {} product['name'] = productSoup.findAll('p',class_="fprdTitle")[0].text product['price'] = productSoup.select('.special span')[0].text products.append(product) links.append(link) from datetime import date import pandas as pd df1 = pd.DataFrame(products) df1['Source'] = 'Momo' df1['created_time'] = date.today() print(df1) df1.to_csv('./result/sample.csv', encoding='utf_8_sig') df1.to_excel('./result/sample.xls') |