各位大大安
最近在練習爬電商網站的商品資訊
目標網站是yahoo, pchome, momo
現在我已經可以爬yahoo跟pchome
最近在爬momo 發現momo好像有做反爬
試了好幾天 一直爬不下來
說明我試過的方法
____________________________________________
從network那裡試著找有沒有api可以發request
→ 發現是用 post 的方式,帶params跟form_data
params有兩個
n 跟 t
n = 2002、2018 等等,先假設這個值固定
t 是utc+8 int 時間戳記 (ex:1546461729893)
之後encode utf-8 再貼在 url + "?" + 後面
form_data 直接照著發
然後 header的部分也有加 user-agent
試過用 requests.post 跟urllib.request.urlopen(request, data=form_data)
可是抓回來的都是一堆空白跟換行 沒辦法抓到json資料
不知是我有遺漏的地方 還是momo自己有做一些反爬機制讓bot抓不到資料
____________________
於是嘗試第二種方式 webDriver
因為我是在雲端linux ubuntu 16.04上面跑爬蟲
所以環境設定的部分其實不太會用
盡力使用了selenium + firefox + geckodriver
卻發現當我把目標網址丟進某個list裡面foreach去跑driver.get(url)
迴圈跑個兩三次就停住了
不斷修改測試後仍然失敗
現在連要發request去抓準備丟進list裡面的url都直接Message: connection refused
程式碼大概像這樣::
options = Options()
options.headless = True
options.set_capability("marionette", False)
driver = webdriver.Firefox(options=options,
executable_path='/home/ubuntu/geckodriver')
driver.set_page_load_timeout(20)
driver.set_script_timeout(20)
i = 1
for url in web_drive_urls:
str = "https://www.momoshop.com.tw" + url
print(str)
driver.get(str)
#time.sleep(5)
print(i)
i+=1
不知是否有好方法能成功爬取momo的商品資料?
理想上我希望可以用第一種方式直接得到json
不然就只好暫時放棄爬momo
謝謝大大們指點
補上我想抓的商品頁範例:
https://www.momoshop.com.tw/category/DgrpCategory.jsp?d_code=1106700047