iT邦幫忙

2

關於Python使用requests的爬蟲問題

各位大大好,因為最近在學Python用來爬蟲,使用的套件是requests,目前學著用requests去取網頁中get及post的資料,但是目前在爬蝦皮的商品頁面資料遇到問題,想說是不是有搞錯或沒注意到的地方,麻煩各位大大解答。

想爬的頁面是在賣家的主頁去爬該賣場所有的商品資料,包含庫存、價格等,舉例如下頁面(把賣場名字遮起來是怕侵權或感覺像是打廣告,然後紅色框起來的部分就是我想爬的資料):
https://shopee.tw/shop/3625341/search/
https://ithelp.ithome.com.tw/upload/images/20180601/20106935epxt3ajhUJ.jpg
我目前的做法是,從開發人員工具裡觀察他的request,於是看到了一個get中有回傳產品的所有資料,以下圖片畫紅線的地方是產品名稱及庫存數量:
https://ithelp.ithome.com.tw/upload/images/20180601/20106935oRBEqedus8.jpg
透過Headers去觀察它是使用get去請求這個資料:
https://ithelp.ithome.com.tw/upload/images/20180601/201069350FFH7IRUqa.jpg
但是在我使用Python的requests的get去請求的時候,跑出來的不是在Preview中的JSON資料,而是目前頁面的HTML,當然在那個HTML中也沒有產品的資料/images/emoticon/emoticon20.gif,程式碼以下附上:

import requests

res = requests.get("https://shopee.tw/api/v2/search_items/?by=pop&limit=30&match_id=3625341&newest=0&order=desc&page_type=shop")

print(res.text)

結果用圖片奉上:
https://ithelp.ithome.com.tw/upload/images/20180601/201069357MmLtHEgDd.jpg
其實結果的圖片也看不出什麼,但是就是一些JavaScript和少許HTML,請問版上大大有方法能夠告訴我是漏了什麼,也可以稍微給個方向讓我嘗試!麻煩大家了!/images/emoticon/emoticon41.gif

PS.如果文中有令人惹議的圖片請留言告訴我,我會再把圖片拿掉!謝謝!

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

12
froce
iT邦大師 1 級 ‧ 2018-06-02 09:55:22
最佳解答

1.requests送出的UA(python-requests/2.18.4),蝦皮擋掉了,會導向蝦皮的新手教學頁面。
2.解法也很簡單,就把UA改掉就行。

import requests

headers = {'user-agent': 'Mozilla/5.0 (Macintosh Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'}

res = requests.get("https://shopee.tw/api/v2/search_items/?by=pop&limit=30&match_id=3625341&newest=0&order=desc&page_type=shop", headers=headers)
print(res.request.headers)    # 看requests送出的header
print(res.text)
看更多先前的回應...收起先前的回應...
神Q超人 iT邦研究生 5 級 ‧ 2018-06-02 11:16:18 檢舉

太厲害了吧!真的有值了!
小弟我剛踏入爬蟲界,
還以為會很困難,沒想到直接被高手解掉XD
我在繼續實做看看!順便看一下UA是指什麼/images/emoticon/emoticon13.gif
真心感謝你!/images/emoticon/emoticon41.gif

froce iT邦大師 1 級 ‧ 2018-06-02 11:43:23 檢舉

就user-agent啊,瀏覽器在送出request的時候會送出header告訴server一些資訊,包含瀏覽器是什麼,UA就是瀏覽器的識別字串。

通常不用登入、用get傳參數,還會發生問題的,就送假UA去試試看。

除了IE,現在主流瀏覽器的開發者模式都能很簡單的看到header,爬不到就是看header和偷用cookies。

神Q超人 iT邦研究生 5 級 ‧ 2018-06-02 14:04:31 檢舉

好的!謝謝大大補充說明/images/emoticon/emoticon12.gif
如果之後有問題再發問,還要麻煩你了/images/emoticon/emoticon32.gif

周本正 iT邦新手 5 級 ‧ 2019-03-18 17:03:56 檢舉

請問大神 我用這個連結下載https://shopee.tw/api/v2/search_items/?by=relevancy&limit=20&match_id=15226905&newest=0&order=desc&page_type=shop'

但是發現下載下來的資料某些欄位會被截斷
https://ithelp.ithome.com.tw/upload/images/20190318/20116018wXVWo9UImS.png

比如我用瀏覽器看到的是 "image": "2fa1053d2416683abc3f6d63b6ec356c"
但是requests下來的 "2fa1053d2416683abc3f6d63b6e" 少了c356c

瀏覽器看到的 "name: "【會員粉絲特價】免運費 佳貝恩小粉象 電動吸鼻器 吸鼻器洗鼻器面罩噴霧三合一優惠組 上寰電動吸鼻器 大象機 愛樂恩"

requests下來的下來的是【會員粉絲特價】免運費 佳貝恩小粉象 電動吸鼻器 吸鼻器洗鼻器面罩噴霧三合一優惠組 上寰電動吸鼻器 大象" 少了 "機 愛樂恩"

還有價錢相關的也都requests不下來 請問我可以怎麼做呢?

1
alex0831
iT邦新手 5 級 ‧ 2020-07-05 00:41:51

我是python爬蟲初學者,這個線上教學我看了之後很有幫助,應該可以解決你的問題!

https://www.udemy.com/course/python-crawler/?referralCode=A4F2B9D20A2C35D5001D

我要發表回答

立即登入回答