斷斷續續地在網路和書籍上學習有關 Python 的爬蟲技術,但隨著反爬蟲的技術也是越來越精進,所以想說藉由 「超新手也能用 Python 爬蟲打造貨比千家的比價網站」這門課來看看能否解決相關的疑惑。這篇換一個線上購物網站來試試。
課程相關資訊
[連結]:https://hiskio.com/courses/527/lectures/30364
本篇範圍:Chapter 2 ( 開啟第一個網頁爬蟲 – 自動化收集商品資料 )
請注意:本系列文章為個人對應課程的消化吸收後,所整理出來的內容。換言之,並不一定會包含全部的課程內容,也有可能會添加其他資源來說明。
筆記
1.有些網站會針對網頁版和手機板做不同的頁面。所以當你桌機板因為是動態網頁無法爬蟲取得資料時,可以改用手機板看看
2. 若要自動化收集多頁數的話,可以觀察一下「不同頁碼」究竟是在何處傳遞,像是網址列的參數
程式碼
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 |
// install pip and beautifulSoup4 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install beautifulSoup4 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) print(products) |