使用偽裝user-agent爬取蝦皮購物網

星期四 14 Mar 2019   even  
資料分析 教學

前言

歡迎回到我的python網路爬蟲教學系列

在前一份實戰教學中,雖然只要會使用最基本的requests和beautifulsoup的操作就可以爬許多網站,但那只是剛好對方的網站伺服器沒有任何檢查措施,就直接將網站的內容回應給你了。

然而只要對方伺服器有任何檢查措施時,你就會得不到你想要的資訊,你可能被拒絕訪問,又或者是被重新導向到一個新的網頁。為了處理這種狀況,在使用requests套件時,可以額外加入user agent,使用虛擬的身份,這樣在拜訪網站時,對方的網頁伺服器如果認可你的身份,你就可以得到正確的網頁內容。

我將以蝦皮購物作為範例,向你們示範,某些網站需要恰當的使用user-agent,才可以成功的獲取網頁內容。

正篇

當你一進入他的首頁時,在搜索欄中輸入你要查找的商品後,你就會跳到商品清單的頁面,請注意這裡的網址。

我以PS4 pro 主機,進行搜索,你可以看到網址變成 https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F

很明顯這是以get的方式傳遞你輸入的變數(keyword)給對方的伺服器後台,之後進資料庫比對將最符合的商品傳出來,呈現給你。

因此我們可以試試看手動改一下網址裡的keyword,然後直接用瀏覽器拜訪看看是不是能得到預期的東西。

例如(XBOX one 主機): https://shopee.tw/search?keyword=XBOX%20one%20%E4%B8%BB%E6%A9%9F

沒問題!你在瀏覽器中可以很簡單的直接改網址來獲得不一樣的商品,因此應該可以很簡單的設計一份網路爬蟲程式來抓取你要的商品。

使用我們之前的requests、及beautifulsoup套件,你可以寫出例如以下的程式:

import requests
from bs4 import BeautifulSoup

url = 'https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F'
r = requests.get(url)
print(r.status_code)
print(len(r.text))

200
57662

似乎沒有問題?狀態碼為200,代表沒有問題?

接著試著使用beautifulesoup去剖析內容,在瀏覽器中檢查元素,可以得知商品是位在div class=" col-xs-2-4 shopee-search-item-result__item"底下,因此可以使用以下程式嘗試去剖析原始碼:

soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all("div", class_="col-xs-2-4 shopee-search-item-result__item")
print(len(items))

0

沒有任何東西!!

是的,你成功地拜訪了網站(status_code == 200),但是伺服器卻不回傳給你任何商品。

我們可以再檢查看看是不是被重新導向了,被連接到一個新的網址去。

可以使用以下指令檢查:

print(r.history)
print(r.url)

[<Response [302]>]
https://shopee.tw/search-item/?search=PS4%20pro%20%E4%B8%BB%E6%A9%9F

302 可以簡單的理解為該資源原本確實存在,但已經被臨時改變了位置 。ref: https://zh.wikipedia.org/wiki/HTTP_302

所以導致無法獲得商品資料。網址沒有改變,但是被臨時改變了位置?

為了避免像這樣,status code顯示200,但事實上中途有被重新導向,而誤解為有正確的拜訪網站,我們可以在request.get中加入allow_redirects=False,

如下:

url = 'https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F'
r = requests.get(url,allow_redirects=False)
print(r.status_code)

302

直接出現302,現在我們可以避免中途明明被重新導向過,卻顯示一切正常。但是,我們依然無法獲得商品資訊,該怎麼做呢?

這就是這篇教學的重點,使用user-agent,明確的告訴對方伺服器你是誰,然後如果認同你的身分的話就回傳給你正確的結果。

我們可以使用fake_useragent隨機產生user-agent,放入requests.get裡面再試一次,

請先安裝fake_useragent ref: https://pypi.org/project/fake-useragent/

pip install fake-useragent

然後,試試看使用隨機的fake_useragent:

from fake_useragent import UserAgent
ua = UserAgent()
for i in range(5):
    print(ua.random)
    print('*-----------------*')

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
*-----------------*
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
*-----------------*
Mozilla/5.0 (Windows; U; Windows NT 5.1; ru-RU) AppleWebKit/533.19.4 (KHTML, like Gecko) Version/5.0.3 Safari/533.19.4
*-----------------*
Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0
*-----------------*
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36
*-----------------*

OK!

接著以以下的方式將useragent放入headers在將放入request.get中,重新執行一次。

如果你想當個很有禮貌的爬蟲,可以在額外加入你的email等聯絡方式。

import requests
from fake_useragent import UserAgent

url = 'https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F'
ua = UserAgent()
headers = {
    'User-Agent': ua.random,
    'From': 'YOUR EMAIL ADDRESS'
}

r = requests.get(url,headers=headers,allow_redirects=False)
print(r.status_code)
print(r.history)
print(r.url)

soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all("div", class_="col-xs-2-4 shopee-search-item-result__item")
print(len(items))

200
[]
https://shopee.tw/search-item/?search=PS4%20pro%20%E4%B8%BB%E6%A9%9F
0

這次成功的進入,並沒有被重新導向,但是依然沒有得到商品資訊。

我猜測可能是如果沒有提供user-agent,對方伺服器會將你重新導向,而提供之後,雖然不會重新導向,但是user-agent並非是伺服器所認可的user-agent,就會拒絕將商品的資訊回傳給你,只丟給你一個空空的頁面。那麼要用哪個user-agent才有可能會成功呢?我們可以直接看他的robots.txt來進行猜測。

https://shopee.tw/robots.txt

User-Agent:Googlebot
User-Agent:Bingbot
Crawl-delay:0.1
Disallow: /cart/
Disallow: /checkout/
Disallow: /buyer/
Disallow: /user/
Disallow: /me/
Disallow: /order/
Disallow: /daily_discover/
Disallow: /mall/just-for-you/
Disallow: /mall/*-cat.
Disallow: /from_same_shop/
Disallow: /you_may_also_like/
Disallow: *-i.*/similar?from=flash_sale
Disallow: /find_similar_products/
Disallow: /top_products
Disallow: /search*searchPrefill

User-Agent:*
Crawl-delay:1
Disallow: /cart/
Disallow: /checkout/
Disallow: /buyer/
Disallow: /user/
Disallow: /me/
Disallow: /order/
Disallow: /daily_discover/
Disallow: /mall/just-for-you/
Disallow: /mall/*-cat.
Disallow: /from_same_shop/
Disallow: /you_may_also_like/
Disallow: *-i.*/similar
Disallow: /find_similar_products/
Disallow: /top_products
Disallow: /search*searchPrefill

既然robots.txt中第一個提到的user-agent就是Googlebot,何不以Googlebot來試試呢?

url = 'https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F'
headers = {
    'User-Agent': 'Googlebot',
    'From': 'YOUR EMAIL ADDRESS'
}

r = requests.get(url,headers=headers,allow_redirects=True)
print(r.status_code)
print(r.history)
print(r.url)

soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all("div", class_="col-xs-2-4 shopee-search-item-result__item")
print(len(items))

200
[]
https://shopee.tw/search?keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F
50

成功!! 有50個商品!!

使用了Googlebot,對方伺服器認可了你所偽裝的身分,正確的將商品資訊傳給了你。

終於可以正確地獲得商品資訊了,使用瀏覽器檢查元素後,可以得到商品的資訊位在div class="_1NoI8_ _2gr36I",而價格資訊位在span class="_341bF0"底下。

商品連結位在每個商品品項底下,要先多執行一段程式。

現在,我們可以迅速地查看這些內容了。

contents = soup.find_all("div", class_="_1NoI8_ _2gr36I")
prices = soup.find_all("span", class_="_341bF0")
all_items = soup.find_all("div", class_="col-xs-2-4 shopee-search-item-result__item")
links = [i.find('a').get('href') for i in all_items]

for c, p, l in zip(contents, prices, links):
    print(c.contents[0])
    print(p.contents[0])
    print('https://shopee.tw/'+l)
    print('*---------------------------------*')

♋惟特爾電腦♋迎春回饋促銷中☼價格最優惠☼高品質電腦☼好評優質賣家☼專業遊戲電腦工作室☼
11,111
https://shopee.tw//♋惟特爾電腦♋迎春回饋促銷中☼價格最優惠☼高品質電腦☼好評優質賣家☼專業遊戲電腦工作室☼-i.4749641.445433814
*---------------------------------*
【超越i7】16核心 主機 16G DDR5【GTX1050】電競主機 十六核心電腦 天堂M GTA5 黑色沙漠 砍i5
22,549
https://shopee.tw//【超越i7】16核心-主機-16G-DDR5【GTX1050】電競主機-十六核心電腦-天堂M-GTA5-黑色沙漠-砍i5-i.5226673.158110645
*---------------------------------*
【爆殺i7】八核心 主機 8G DDR5【GTX1050】電競主機 英雄聯盟 桌機 天堂M 電腦 多開 超越i5 4核心
16,990
https://shopee.tw//【爆殺i7】八核心-主機-8G-DDR5【GTX1050】電競主機-英雄聯盟-桌機-天堂M-電腦-多開-超越i5-4核心-i.5226673.1489507549
*---------------------------------*
【豪禮大贈送 免運】台灣版 U-PRO2 安博盒子 第6代 X950 第四台免費 追劇神器
11,990
https://shopee.tw//【豪禮大贈送-免運】台灣版-U-PRO2-安博盒子-第6代-X950-第四台免費-追劇神器-i.3576347.14491797
*---------------------------------*
4色可選 (無線)PS4/PS3/PC WIN10通吃!原封正品 手把 線控 遊戲手柄 震動搖桿 USB線 2K19
3,980
https://shopee.tw//4色可選-(無線)PS4-PS3-PC-WIN10通吃!原封正品-手把-線控-遊戲手柄-震動搖桿-USB線-2K19-i.78020475.1751278225
*---------------------------------*
全配 現貨 全新 台灣公司貨 保固一年 PS4 Pro 1TB God of War 戰神 特仕 同捆 主機 利維坦之斧
299
https://shopee.tw//全配-現貨-全新-台灣公司貨-保固一年-PS4-Pro-1TB-God-of-War-戰神-特仕-同捆-主機-利維坦之斧-i.3580970.1114654452
*---------------------------------*
全新未拆封 貨到付款 公司貨 PS4 Pro God of War 戰神 特仕 同捆 主機 另售 火龍機 魔物獵人 世界
899
https://shopee.tw//全新未拆封-貨到付款-公司貨-PS4-Pro-God-of-War-戰神-特仕-同捆-主機-另售-火龍機-魔物獵人-世界-i.3603557.1112557215
*---------------------------------*
現貨 發票 貨到付款 公司貨 PS4 Pro God of War 戰神 特仕 同捆 主機 另售 火龍機 魔物獵人 世界
49,800
https://shopee.tw//現貨-發票-貨到付款-公司貨-PS4-Pro-God-of-War-戰神-特仕-同捆-主機-另售-火龍機-魔物獵人-世界-i.3603557.1091928444
*---------------------------------*
現貨免運費 PS4 PRO 主機 碧血狂殺2 同捆組 發售中【OK電玩】
53,000
https://shopee.tw//現貨免運費-PS4-PRO-主機-碧血狂殺2-同捆組-發售中【OK電玩】-i.15396495.1577586736
*---------------------------------*
PS4 Pro主機 CUH-7117系列 1TB 原廠公司貨 極致黑 冰河白
32,999
https://shopee.tw//PS4-Pro主機-CUH-7117系列-1TB-原廠公司貨-極致黑-冰河白-i.4300289.1585421082
*---------------------------------*
二館【PS4主機】☆ PS4 PRO 7117B 1TB 極致黑色 / 冰河白色 雙手把組 ☆【台灣公司貨】台中星光電玩
14,280
https://shopee.tw//二館【PS4主機】☆-PS4-PRO-7117B-1TB-極致黑色-冰河白色-雙手把組-☆【台灣公司貨】台中星光電玩-i.50729567.1574716180
*---------------------------------*
二館【PS4主機】☆ 5.05最新破解 PS4 PRO 7117B 1TB 極致黑色 ☆【自製改機備份】台中星光電玩
12,680
https://shopee.tw//二館【PS4主機】☆-5.05最新破解-PS4-PRO-7117B-1TB-極致黑色-☆【自製改機備份】台中星光電玩-i.50729567.1303024207
*---------------------------------*
全新現貨💎ps4 Pro 1TB主機限量冰河白/黑7117B最新型❤️原廠公司貨,保固一年!含單手把!支援4K電視
13,680
https://shopee.tw//全新現貨💎ps4-Pro-1TB主機限量冰河白-黑7117B最新型❤️原廠公司貨,保固一年!含單手把!支援4K電視-i.7181150.1557274161
*---------------------------------*
Sony PS4 Pro 1TB 專業版 主機 極致黑
18,180
https://shopee.tw//Sony-PS4-Pro-1TB-專業版-主機-極致黑-i.28795969.393006335
*---------------------------------*
[現貨] SONY PS4 Pro主機CUH-7218系列1TB-極致黑+雙手把【PlayStation旗艦館】
11,850
https://shopee.tw//-現貨-SONY-PS4-Pro主機CUH-7218系列1TB-極致黑-雙手把【PlayStation旗艦館】-i.72176300.1277744089
*---------------------------------*
[活動商品] PS4 Pro主機1TB 王國之心3 同捆組+第2支手把【PlayStation旗艦館】
13,350
https://shopee.tw//-活動商品-PS4-Pro主機1TB-王國之心3-同捆組-第2支手把【PlayStation旗艦館】-i.72176300.1803079810
*---------------------------------*
PS4 Pro 主機《王國之心 3》限量特仕機同捆組
12,980
https://shopee.tw//PS4-Pro-主機《王國之心-3》限量特仕機同捆組-i.60323372.1799654419
*---------------------------------*
PS4 Pro主機 極致黑 冰河白 CUH-7117 1TB 原廠公司貨
14,760
https://shopee.tw//PS4-Pro主機-極致黑-冰河白-CUH-7117-1TB-原廠公司貨-i.4720430.1585462617
*---------------------------------*
現貨【PS4主機】☆ PS4 PRO 7117B 1TB 極致黑色/冰河白色 ☆【台灣公司貨】台中星光電玩
14,480
https://shopee.tw//現貨【PS4主機】☆-PS4-PRO-7117B-1TB-極致黑色-冰河白色-☆【台灣公司貨】台中星光電玩-i.3278810.1143748909
*---------------------------------*
PS4 PRO主機 PlayStation 4 Pro 台灣公司貨 1TB CUH-7117B 【魔力電玩】
14,980
https://shopee.tw//PS4-PRO主機-PlayStation-4-Pro-台灣公司貨-1TB-CUH-7117B-【魔力電玩】-i.7193929.1626819401
*---------------------------------*
PS4 pro SONY 全新未拆 主機 台灣公司貨 非水貨 一年保固 容量1BT 黑白雙色
14,480
https://shopee.tw//PS4-pro-SONY-全新未拆-主機-台灣公司貨-非水貨-一年保固-容量1BT-黑白雙色-i.99804046.1619572459
*---------------------------------*
PS4 PRO 1TB/slim 500G 2218型黑/白/金/銀主機,days of play限量機,台灣公司貨I
12,980
https://shopee.tw//PS4-PRO-1TB-slim-500G-2218型黑-白-金-銀主機,days-of-play限量機,台灣公司貨I-i.614737.9364368
*---------------------------------*
🎁熱騰騰😊 全新未拆 現貨 SONY PS4 Pro 碧血狂殺2 同捆組 CUH-7117 主機 碧血狂殺 聖誕節
12,580
https://shopee.tw//🎁熱騰騰😊-全新未拆-現貨-SONY-PS4-Pro-碧血狂殺2-同捆組-CUH-7117-主機-碧血狂殺-聖誕節-i.2558954.1736388193
*---------------------------------*
【全新現貨 最新型】PS4 PRO 7218型 1TB 極致黑色 4K 主機 台灣公司貨 【台中一樂電玩】
13,885
https://shopee.tw//【全新現貨-最新型】PS4-PRO-7218型-1TB-極致黑色-4K-主機-台灣公司貨-【台中一樂電玩】-i.16133693.532317920
*---------------------------------*
PS4 PRO主機1TB 王國之心3 同捆組
11,600
https://shopee.tw//PS4-PRO主機1TB-王國之心3-同捆組-i.116309859.1867935487
*---------------------------------*
免卡 無卡 現金分期 全新 PS4 Pro 1TB 主機 CUH-7117B 極致黑 冰河白 台灣公司貨 一年保固
8,599
https://shopee.tw//免卡-無卡-現金分期-全新-PS4-Pro-1TB-主機-CUH-7117B-極致黑-冰河白-台灣公司貨-一年保固-i.1474331.122315038
*---------------------------------*
[預購]SONY PS4 PRO 戰神/SLIM 羅德 5.05系統 客製化 全新 主機 同捆 已備份 取得權限
11,580
https://shopee.tw//-預購-SONY-PS4-PRO-戰神-SLIM-羅德-5.05系統-客製化-全新-主機-同捆-已備份-取得權限-i.3823446.1009222643
*---------------------------------*
SONY PS4 Pro主機CUH-7218系列極致黑1TB(全新公司貨)
13,888
https://shopee.tw//SONY-PS4-Pro主機CUH-7218系列極致黑1TB(全新公司貨)-i.16385486.1877195501
*---------------------------------*
PS4 PRO 主機 7117型 1TB 4K 主機 冰河白 白色 (全新商品~台灣公司貨~一年保固)【台中大眾電玩】
11,980
https://shopee.tw//PS4-PRO-主機-7117型-1TB-4K-主機-冰河白-白色-(全新商品~台灣公司貨~一年保固)【台中大眾電玩】-i.78539214.1311684141
*---------------------------------*
SONY PS4 Pro主機CUH-7117B系列1TB-極致黑
14,480
https://shopee.tw//SONY-PS4-Pro主機CUH-7117B系列1TB-極致黑-i.16385486.415581378
*---------------------------------*
【PS4】 PS4 Pro 專業版 主機 冰河白 1TB
12,980
https://shopee.tw//【PS4】-PS4-Pro-專業版-主機-冰河白-1TB-i.2167422.1253354377
*---------------------------------*
【PS4】PS4 Pro 專業版 主機 極致黑 2TB(支援網路ATM手機付款)
16,180
https://shopee.tw//【PS4】PS4-Pro-專業版-主機-極致黑-2TB(支援網路ATM手機付款)-i.2167422.1776670973
*---------------------------------*
SONY PS4 Pro 1TB主機 (極致黑) 現金 分期 門號
4,800
https://shopee.tw//SONY-PS4-Pro-1TB主機-(極致黑)-現金-分期-門號-i.8125226.1606324427
*---------------------------------*
全新促銷超低價12500元~SONY PS4 Pro主機CUH-7117系列1TB-極致黑/白
21,800
https://shopee.tw//全新促銷超低價12500元~SONY-PS4-Pro主機CUH-7117系列1TB-極致黑-白-i.1959678.1643935440
*---------------------------------*
全配 台灣公司貨 刷卡 貨到付款 PS4 Pro 魔物獵人 世界 火龍 同捆 機 保固 全新 特仕 主機 7117b型
11,880
https://shopee.tw//全配-台灣公司貨-刷卡-貨到付款-PS4-Pro-魔物獵人-世界-火龍-同捆-機-保固-全新-特仕-主機-7117b型-i.3580970.1114666931
*---------------------------------*
【現貨快發】【超值組合】索尼 SONY PS4 Pro 主機 CUH-7117 1TB+無線耳機組 CUHYA-0080
11,900
https://shopee.tw//【現貨快發】【超值組合】索尼-SONY-PS4-Pro-主機-CUH-7117-1TB-無線耳機組-CUHYA-0080-i.88629103.1876535828
*---------------------------------*
PS4 PRO 主機 7117型 1TB 4K 主機 (極致黑色)(全新商品~台灣公司貨~保固一年)【台中大眾電玩】
12,580
https://shopee.tw//PS4-PRO-主機-7117型-1TB-4K-主機-(極致黑色)(全新商品~台灣公司貨~保固一年)【台中大眾電玩】-i.78539214.1311678630
*---------------------------------*
★御玩家★現貨不必等 PS4 Pro公司貨主機 1TB (極致黑) 典藏遊戲同捆組
12,980
https://shopee.tw//★御玩家★現貨不必等-PS4-Pro公司貨主機-1TB-(極致黑)-典藏遊戲同捆組-i.35230031.964094367
*---------------------------------*
【限量現貨】保證有貨 PS4 PRO主機 同捆 王國之心3 Kingdom Hearts III
14,480
https://shopee.tw//【限量現貨】保證有貨-PS4-PRO主機-同捆-王國之心3-Kingdom-Hearts-III-i.79066369.1813613107
*---------------------------------*
PS4主機 PRO Slim NBA2K18 戰神4 蜘蛛俠 限定版 藍色 五億 現貨
7,900
https://shopee.tw//PS4主機-PRO-Slim-NBA2K18-戰神4-蜘蛛俠-限定版-藍色-五億-現貨-i.63370140.1766322061
*---------------------------------*
|玩樂好夥伴|全新 現貨 PS4 Pro主機1TB 王國之心3 同捆組
12,980
https://shopee.tw//|玩樂好夥伴|全新-現貨-PS4-Pro主機1TB-王國之心3-同捆組-i.3408009.1929720106
*---------------------------------*
PS4 PRO 7218B 1TB頂級主機原廠原裝2019年1月26日購入 高雄可自取盒裝完整
12,500
https://shopee.tw//PS4-PRO-7218B-1TB頂級主機原廠原裝2019年1月26日購入-高雄可自取盒裝完整-i.30369666.1891451193
*---------------------------------*
‼️快速出貨(免運費)‼️PS4 Pro主機(1TB) 碧血狂殺2 同捆組
58,000
https://shopee.tw//‼️快速出貨(免運費)‼️PS4-Pro主機(1TB)-碧血狂殺2-同捆組-i.70360000.1853508081
*---------------------------------*
PS4 Pro 魔物獵人世界 限定主機 火龍機 1tb sony 主機
15,710
https://shopee.tw//PS4-Pro-魔物獵人世界-限定主機-火龍機-1tb-sony-主機-i.8668844.1047176878
*---------------------------------*
PlayStation 4 PS4 SLIM PRO 主機 500G 1TB 全新 台灣公司貨 可門號續約 無卡分期
11,900
https://shopee.tw//PlayStation-4-PS4-SLIM-PRO-主機-500G-1TB-全新-台灣公司貨-可門號續約-無卡分期-i.1287562.1694257341
*---------------------------------*
🔥超越i7🔥16核心 電腦 16G DDR5【GTX1050】電競主機 絕地求生 天堂M 多開 實況 超越i3 i5
14,380
https://shopee.tw//🔥超越i7🔥16核心-電腦-16G-DDR5【GTX1050】電競主機-絕地求生-天堂M-多開-實況-超越i3-i5-i.5226673.536365278
*---------------------------------*
送光纖線 光纖轉類比 同軸轉類比 ps3 ps4 DAC av vga SPDIF hdmi av
18,960
https://shopee.tw//送光纖線-光纖轉類比-同軸轉類比-ps3-ps4-DAC-av-vga-SPDIF-hdmi-av-i.43997244.695781019
*---------------------------------*
【爆殺i7】八核心 主機 8G DDR5【GTX1050】獨顯 電腦主機 英雄聯盟 桌機 天堂M 多開 超越i5 4核心
14,800
https://shopee.tw//【爆殺i7】八核心-主機-8G-DDR5【GTX1050】獨顯-電腦主機-英雄聯盟-桌機-天堂M-多開-超越i5-4核心-i.5226673.104230644
*---------------------------------*
終生免月租超多成人頻道上萬謎片越獄版送9好禮安博盒子6 PRO2台灣版藍牙版保12月】非千尋盒子小米盒子生日禮物023
25,990
https://shopee.tw//終生免月租超多成人頻道上萬謎片越獄版送9好禮安博盒子6-PRO2台灣版藍牙版保12月】非千尋盒子小米盒子生日禮物023-i.1380738.1512023877
*---------------------------------*
熊狂主機★→ 高效能繪圖機 AI PS CAD 3DMAX VRAY
14,480
https://shopee.tw//熊狂主機★→-高效能繪圖機-AI-PS-CAD-3DMAX-VRAY-i.16184795.490045145
*---------------------------------*

結尾

這次我們試圖以requests拜訪蝦皮購物網,經過多方嘗試,終於在設定user-agent等於Googlebot的情況下,成功地獲得了商品資訊。筆者也使用過robots.txt裡提到的Bingbot,但是也無法獲得商品資訊,只能說是湊巧成功了。是不是非常驚險刺激呢?爬蟲程式最有趣的地方就在於猜測對方伺服器後台是如何傳送資料,然後設法以各種手段獲得內容。

另外,仔細檢查蝦皮購物網的內容後,事實上對方是有api可以快速呼叫商品內容的,如: https://shopee.tw/api/v2/search_items/?by=relevancy&keyword=PS4%20pro%20%E4%B8%BB%E6%A9%9F&limit=20&newest=0&order=desc&page_type=search

,會得到包含商品資訊的json檔,然而一樣在python底下使用requests試圖爬取時,要用Googlebot才有辦法獲得該資訊。

當我們能夠成功地爬取購物網的商品內容後,就有很多可能的應用,例如:

(1) 編寫多個不同電商網站的爬蟲程式,放在一起,變成一個比價程式,讓使用者只要輸入商品名稱,就能跳出各大電商網站該商品的價格,讓使用者可以找到哪個購物網有比較便宜的價格。

(2) 讓使用者能夠快速的搜尋多項商品並且比較,例如,可以快速地比較PS4和XBox的價格大約為在哪裡。

(3) 可以將電商網站的爬蟲程式寫入排程器裡面(如linux底下的crontab)每隔一段時間執行一次,將商品價格儲存下來,如此,經過一段時間,我們就可以進行商品價格波動的分析。

...

最後,讓我將這次的程式整理成更加好用的函式來結束這次的教學吧~

一樣,感謝你耐心閱讀到最後,希望你在這篇教學中有學到些什麼,我們下回再見啦~

本章節程式碼

import requests
from bs4 import BeautifulSoup

def shopee_scraper(keyword,n_page=0,used=False,new=False):
    '''
    參數說明:
        keyword: 商品名稱關鍵字
        n_page: 第幾頁(每頁有50個商品)
        used: 是否為二手商品?
        new: 是否為新商品?
    '''
    url = f'https://shopee.tw/search?keyword={keyword}&page={n_page}&sortBy=relevancy'
    if used:
        url += '&newItem=true'
    if new:
        url += '&usedItem=true'
    
    headers = {
        'User-Agent': 'Googlebot',
        'From': 'YOUR EMAIL ADDRESS'
    }
    
    r = requests.get(url,headers=headers)
    soup = BeautifulSoup(r.text, 'html.parser')
    contents = soup.find_all("div", class_="_1NoI8_ _2gr36I")
    prices = soup.find_all("span", class_="_341bF0")
    all_items = soup.find_all("div", class_="col-xs-2-4 shopee-search-item-result__item")
    links = [i.find('a').get('href') for i in all_items]
    
    for c, p, l in zip(contents, prices, links):
        print(c.contents[0])
        print(p.contents[0])
        print('https://shopee.tw/'+l)
        print('*---------------------------------*')
python 網頁爬蟲教學
python網路爬蟲簡介
python網路爬蟲基本工具(1)
python網路爬蟲教學-實戰篇(1) 蘋果日報馬網
使用偽裝user-agent爬取蝦皮購物網
撈取深網中的資料-蝦皮購物API
以POST方式抓取資料-政府電子採購網
python網路爬蟲教學-Selenium基本操作
python網路爬蟲應用-facebook社團成員參與度分析

相關文章:

>