盤點(diǎn)一個(gè)Python網(wǎng)絡(luò)爬蟲(chóng)問(wèn)題

大家好,我是皮皮。

一、前言

前幾天在Python最強(qiáng)王者群【劉桓鳴】問(wèn)了一個(gè)Python網(wǎng)絡(luò)爬蟲(chóng)的問(wèn)題,這里拿出來(lái)給大家分享下。

image.png

他自己的代碼如下:

import requests

key = input("請(qǐng)輸入關(guān)鍵字")

res = requests.post(
    url="https://jf.10086.cn/cmcc-web-shop/search/query",
    data={
    "sortColumn" : "default",
    "sortType": "DESC",
    "pageSize": "60",
    "pageNum": "1",
    "firstKeyword": key,
    "integral": "",
    "province": ""},
    headers={"User_Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"}
)


print(res.json())

二、實(shí)現(xiàn)過(guò)程

這里【隔壁??山楂】指出拿到的數(shù)據(jù)需要用json解析,后來(lái)【瑜亮老師】指出是參數(shù)加少了。

image.png

甯同學(xué)指出,需要在請(qǐng)求頭里邊加上origin,后來(lái)【eric】給出了一個(gè)對(duì)應(yīng)代碼,如下所示:

import requests


headers = {
    "authority": "jf.10086.cn",
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
    "content-type": "application/x-www-form-urlencoded;charset=UTF-8",
    "origin": "https://jf.10086.cn",
    "referer": "https://jf.10086.cn/",
    "sec-ch-ua": "\"Microsoft Edge\";v=\"113\", \"Chromium\";v=\"113\", \"Not-A.Brand\";v=\"24\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-origin",
    "sessionid": "",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36 Edg/113.0.1774.42"
}
cookies = {
    "sajssdk_2015_cross_new_user": "1",
    "sensorsdata2015jssdkcross": "%7B%22distinct_id%22%3A%221882e060ca319-0c9999999999998-7b515477-921600-1882e060ca46ed%22%2C%22first_id%22%3A%22%22%2C%22props%22%3A%7B%22%24latest_traffic_source_type%22%3A%22%E7%9B%B4%E6%8E%A5%E6%B5%81%E9%87%8F%22%2C%22%24latest_search_keyword%22%3A%22%E6%9C%AA%E5%8F%96%E5%88%B0%E5%80%BC_%E7%9B%B4%E6%8E%A5%E6%89%93%E5%BC%80%22%2C%22%24latest_referrer%22%3A%22%22%7D%2C%22identities%22%3A%22eyIkaWRlbnRpdHlfY29va2llX2lkIjoiMTg4MmUwNjBjYTMxOS0wYzk5OTk5OTk5OTk5OTgtN2I1MTU0NzctOTIxNjAwLTE4ODJlMDYwY2E0NmVkIn0%3D%22%2C%22history_login_id%22%3A%7B%22name%22%3A%22%22%2C%22value%22%3A%22%22%7D%2C%22%24device_id%22%3A%221882e060ca319-0c9999999999998-7b515477-921600-1882e060ca46ed%22%7D",
    "BSFIT_EXPIRATION": "1684453169465",
    "BSFIT_DEVICEID": "eNgfgPaqBaS8qXzJHKXgXxJUCen3U5WF8tO1cjBaMqaDL7EKt2xK0J5XwThnB_kC-VbJC2t-N4axkF2UXAKhRvM7w7kNMRWX8pyxlMitEPPbnWVSnXSU4e2MZvpGBme1L3PX7et2B40xYhXg0MpYpfmUtnuJJTEQ"
}
url = "https://jf.10086.cn/cmcc-web-shop/search/query"
data = {
    "sortColumn": "default",
    "sortType": "DESC",
    "pageSize": "60",
    "pageNum": "1",
    "firstKeyword": "食用油",
    "integral": "",
    "province": ""
}
response = requests.post(url, headers=headers, cookies=cookies, data=data)

代碼運(yùn)行之后,可以得到預(yù)期的數(shù)據(jù):

image.png

這里【甯同學(xué)】也給出了對(duì)應(yīng)的代碼,如下所示:

image.png

后來(lái)【瑜亮老師】測(cè)試發(fā)現(xiàn),請(qǐng)求頭里邊只需要增加ua和origin就可以了。

image.png

順利地解決了粉絲的問(wèn)題。

image.png

三、總結(jié)

大家好,我是皮皮。這篇文章主要盤點(diǎn)了一個(gè)Python網(wǎng)絡(luò)爬蟲(chóng)的問(wèn)題,文中針對(duì)該問(wèn)題,給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問(wèn)題。

最后感謝粉絲【劉桓鳴】提問(wèn),感謝【隔壁??山楂】、【瑜亮老師】、【eric】、【甯同學(xué)】給出的思路和代碼解析,感謝【冷喵】、【Ineverleft】、【??黑科技·鼓包??】等人參與學(xué)習(xí)交流。

【提問(wèn)補(bǔ)充】溫馨提示,大家在群里提問(wèn)的時(shí)候??梢宰⒁庀旅鎺c(diǎn):如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點(diǎn)demo數(shù)據(jù)來(lái)(小文件的意思),然后貼點(diǎn)代碼(可以復(fù)制的那種),記得發(fā)報(bào)錯(cuò)截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過(guò)50行這樣的話,發(fā)個(gè).py文件就行。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容