iT邦幫忙

1

高手請進 反爬蟲網頁如何破解?

原本寫法是先取得SESSION_ID 之後透過POST則可登入
正常情況這時右上角會出現安全退出 有找到則為登入狀態
可能是站方反爬蟲的原因 雖然一樣有取得SESSION_ID 但卻requset 405
想問問有沒有高手可以破解的?

#登入頁面取得,動態產生的PAGE_SESSION_ID
headers = {'User-Agent':'User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36'}

s = requests.session()
URL = 'http://www.51bxg.com/web/login_register/login.aspx'
r = s.get(URL, headers=headers)
r.encoding = "utf-8"
sp = BeautifulSoup(r.text, 'lxml')

rt_msg = str(sp.find('script', type="text/javascript"))
#print(rt_msg)

m = re.search('var _PAGE_SESSION_ID=[\d]+', rt_msg, flags = 0)
pg_ssid = str(m.group()).replace("var _PAGE_SESSION_ID=","")
#print(pg_ssid)
#網站登入
	URL  = 'http://www.51bxg.com/api_web/WebCommon/PostUserLogin?'
	URL += 'z_access_mode=web_service&'
	URL += 'session_page_id=' + str(pg_ssid) + '&'
	URL += 'has_req_data=true&retry_num=0'

	arg_pload = '{"loginName":"' + acc_id + '","loginPwd":"' + acc_pwd + '","autoLogin":false}'
	
	payload = {
			"z_data": arg_pload
			}
	
	r = s.post(URL, data=payload, headers=headers)
	
	#測試是否登入成功
	URL = 'http://www.51bxg.com/'
	r = s.get(URL, headers=headers)
	r.encoding = "utf-8"
	sp = BeautifulSoup(r.text, 'html.parser')
	print(sp)
	sp.findAll('div', attrs={'class': 'dc_data_list'})

	flag = r.text.find('安全退出')

1 個回答

1
sheep630459
iT邦新手 5 級 ‧ 2020-04-23 15:29:57
最佳解答

通常爬蟲出錯時,應該先去看status_code判斷是發生怎樣的問題,你可以先加上以下這行檢查

print(r.status_code)

至於你失敗的理由則是你錯誤地使用http作為進行連線,你應該將網址改成https

zyxa9527 iT邦新手 5 級 ‧ 2020-04-23 15:49:57 檢舉

阿我可能沒說清楚 request為405不被允許
推測是站方阻擋爬蟲 請問有破解方式嗎?
另外http之前用是可以的 應該沒影響

我有測過,這個網站目前是禁止用http進行登入,改成https就會是200 OK了。另一方面,涉及登入的行為其實本來就不應該可以用未加密連線。

zyxa9527 iT邦新手 5 級 ‧ 2020-04-24 09:31:26 檢舉

對欸 感謝你!

我要發表回答

立即登入回答