網(wǎng)絡(luò)請求分析實戰(zhàn)篇(01)—— 爬取amazon搜索欄的關(guān)聯(lián)關(guān)鍵詞
1. 需求介紹
- 在amazon搜索商品,當(dāng)輸入部分單詞時,下面會自動彈出一些關(guān)聯(lián)關(guān)鍵詞。這些關(guān)鍵詞是amazon內(nèi)部總結(jié),統(tǒng)計的熱門搜索關(guān)鍵詞。我們現(xiàn)在的需求就是,給出一些關(guān)鍵詞,然后把對應(yīng)的關(guān)聯(lián)關(guān)鍵詞抓出來。
2. 環(huán)境
- 系統(tǒng):win7
- python 3.6.1
- requests 2.14.2 (通過pip list查看)
3. 分析請求
Request URL:https://completion.amazon.com/search/complete?method=completion&mkt=
1&r=GFPC5GA3RHYHZK8YKY93&s=
136-
4489048-
3064812&c=&p=Gateway&l=en_US&b2b=
0&fresh=
0&sv=desktop&client=amazon-search-ui&x=String&search-alias=aps&ks=
82&q=car&qs=&cf=
1&fb=
1&sc=
1&
Request Method:GET
Status Code:
200 OK
Remote Address:
54.239.17.86:
443
Referrer Policy:no-referrer-when-downgrade
Host:completion.amazon.com
Referer:https://www.amazon.com/ref=nav_logo
User-Agent:Mozilla/
5.0 (Windows NT
6.1; WOW64) AppleWebKit/
537.36 (KHTML, like Gecko) Chrome/
63.0.3239.132 Safari/
537.36
method:completion
mkt:
1
r:GFPC5GA3RHYHZK8YKY93
s:
136-
4489048-
3064812
c:
p:Gateway
l:en_US
b2b:
0
fresh:
0
sv:desktop
client:amazon-search-ui
x:String
search-alias:aps
ks:
82
q:car
qs:
cf:
1
fb:
1
sc:
1
- 從上面的參數(shù)中,發(fā)現(xiàn)有3個參數(shù)是需要我們重點關(guān)注的:
r:GFPC5GA3RHYHZK8YKY93
s:136-4489048-3064812
search-alias:aps
- 第三步:分析這幾個參數(shù)的來源:
- 之前我的文章中就提到過,這種參數(shù)來源,一般是在以下的4個點:
第一,網(wǎng)頁源代碼中攜帶。
第二,藏在服務(wù)器返回過來的cookie中。
第三,網(wǎng)頁js腳本計算生成。
第四,登錄時,請求js腳本生成,或者同步產(chǎn)生的其他網(wǎng)頁中。
- 在這個案例中,發(fā)現(xiàn)相對比較簡單,這些參數(shù)就屬于第一種情況,網(wǎng)頁源代碼中攜帶。
4. 編寫爬蟲
- 從上面的分析過程來看,就知道抓取這個數(shù)據(jù)很簡單,分兩步:
- 第一:抓取amazon主頁,從主頁源代碼中取出必要的參數(shù)。
- 第二:使用這些參數(shù),向目標(biāo)網(wǎng)頁請求關(guān)聯(lián)關(guān)鍵詞。
import requests
import reunicornHeader = {
'Host':
'www.amazon.com',
'Referer':
'https://www.amazon.com',
'user-agent':
'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}
if __name__ ==
"__main__":resp = requests.get(
"https://www.amazon.com/ref=nav_logo", headers=unicornHeader)respText = resp.text
'''method:completionmkt:1r:T9GNBFENMKCSHQ96SN69s:136-4489048-3064812c:p:Gatewayl:en_USb2b:0fresh:0sv:desktopclient:amazon-search-uix:Stringsearch-alias:mobileks:82q:carqs:cf:1fb:1sc:1'''ue_id_Re = re.search(
"ue_id = '(.*?)'", respText, re.DOTALL)print(f
"ue_id_Re = {ue_id_Re}")
if ue_id_Re:ue_id = ue_id_Re.group(
1)
else:ue_id =
""ue_sid_Re = re.search(
"ue_sid = '(.*?)'", respText, re.DOTALL)print(f
"ue_sid_Re = {ue_sid_Re}")
if ue_sid_Re:ue_sid = ue_sid_Re.group(
1)
else:ue_sid =
""originalKey =
"car" search_alias =
'aps' ks =
100 keywordsUrl = f
"https://completion.amazon.com/search/complete?method=completion&mkt=1&r={ue_id}&s={ue_sid}&c=&p=Gateway&l=en_US&b2b=0&fresh=0&sv=desktop&client=amazon-search-ui&x=String&search-alias={search_alias}&ks={ks}&q={originalKey}&qs=&cf=1&fb=1&sc=1&"secondResp = requests.get(keywordsUrl, headers=unicornHeader)print(f
"secondRespText = {secondResp.text}")
ue_id_Re = <_sre.SRE_Match object; span=(
1617,
1647), match=
"ue_id = '6M0F9KJN25H89JPK5B1R'">
ue_sid_Re = <_sre.SRE_Match object; span=(
1732,
1762), match=
"ue_sid = '144-1591423-1127326'">
secondRespText = completion = [
"car",[
"car phone mount",
"carbon monoxide detector",
"car charger",
"cards against humanity",
"car accessories",
"car seat protector",
"car vacuum",
"cardigans for women",
"carry on luggage",
"car phone holder"],[{
"nodes":[{
"name":
"Cell Phones & Accessories",
"alias":
"mobile"}]},{},{},{},{},{},{},{},{},{}],[],
"AA2EWWA46T4I"];String();.
總結(jié)
以上是生活随笔為你收集整理的网络请求分析实战篇(01)—— 爬取amazon搜索栏的关联关键词的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。