本文目錄一覽:
- 1、請教各位,python編寫爬蟲,返回http error 521怎麼解決
- 2、python中如何調用js文件中的方法呢
- 3、python execjs怎麼用
- 4、linux上安裝了pyv8 執行execjs的時候想用pyv8的環境去執行,但是 運行的時候 說找不到js的運行環境怎麼辦
- 5、怎麼樣python爬蟲進行此網站爬取
請教各位,python編寫爬蟲,返回http error 521怎麼解決
原博主用的是PyV8執行JS代碼,我換了PyExecJS
import execjs
import re
import requests
url = “”
HERDERS = {
“Host”: “”,
‘User-Agent’: ‘Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36’,
}
def executejs(html):
# 提取其中的JS加密函數
js_string = ”.join(re.findall(r'(function .*?)/script’,html))
# 提取其中執行JS函數的參數
js_func_arg = re.findall(r’setTimeout\(\”\D+\((\d+)\)\”‘, html)[0]
js_func_name = re.findall(r’function (\w+)’,js_string)[0]
# 修改JS函數,使其返回Cookie內容
js_string = js_string.replace(‘eval(“qo=eval;qo(po);”)’, ‘return po’)
func = execjs.compile(js_string)
return func.call(js_func_name,js_func_arg)
def parse_cookie(string):
string = string.replace(“document.cookie='”, “”)
clearance = string.split(‘;’)[0]
return {clearance.split(‘=’)[0]: clearance.split(‘=’)[1]}
# 第一次訪問獲取動態加密的JS
first_html = requests.get(url=url,headers=HERDERS).content.decode(‘utf-8’)
# 執行JS獲取Cookie
cookie_str = executejs(first_html)
# 將Cookie轉換為字典格式
cookie = parse_cookie(cookie_str)
print(‘cookies = ‘,cookie)
# 帶上cookies參數,再次請求
response = requests.get(url=url,headers=HERDERS,cookies=cookie)
print(response.status_code)
python中如何調用js文件中的方法呢
1、打開pycharm開發工具,點擊File菜單,選擇Settings…,進行第三方模塊安裝;輸入selenium,點擊Install Package。
2、接着在python項目的指定文件夾下,鼠標右鍵新建python文件,輸入文件名並點擊Python file。
3、打開新建的文件,依次導入selenium、webdriver和time。
4、調用webdriver模塊中的Chrome(),使用get()獲取對應網址的內容。
5、調用find_element_by_id()獲取對應頁面元素,然後調用按鈕點擊事件。
6、修改get()方法中的請求路徑,然後保存代碼並運行文件,查看運行結果。
python execjs怎麼用
可以在webstorm中copy這個encode函數帶上自己的用戶名運行,返回的結果就是su的值,這個值在之後進行post提交的時候也會用到。
如果對加密有一定經驗的同學可能一眼就會看出這個是base64編碼,python中有個base64模塊可以干這個事情。
linux上安裝了pyv8 執行execjs的時候想用pyv8的環境去執行,但是 運行的時候 說找不到js的運行環境怎麼辦
pyv8 的作用是在python中執行js代碼,然後可以使用js里的變量等內容。python取得javascript裡面的值、javascript取得python裡面的值、python和javascript裡面的函數交互
mac下的安裝:pip install -e git://github.com/brokenseal/PyV8-OS-X#egg=pyv8
安裝後有兩個文件:一個PyV8.py 另一個_PyV8.so
下面示例是執行js文件
from pyv8 import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
with open(‘/usr/graph.js’) as f:
jsdata = f.read() # print jsdata
print ctxt.eval(jsdata)
下面是執行一段代碼
import PyV8
ctxt = PyV8.JSContext()
ctxt.enter()
func = ctxt.eval(“””
(function(){
function hello(){
return “Hello world.”;
}
return hello();
})”””)print func()
則在python環境中打印出js執行的結果:Hello world.
更多信息可參考《Linux就該這麼學》
怎麼樣python爬蟲進行此網站爬取
是加密的,解密方法在JS裡面可以弄出來。
首先要AES解密,可以【Python:import Crypto.Cipher.AES】包,解密mode是CFB,seed是”userId:”+uid+”:seed”的SHA256值,解密的key是seed[0:24],iv是seed[len(seed)-16:]。
如果沒有登錄,uid就是用的”anyone”,這時候的seed是”61581AF471B166682A37EFE6DD40FE4700EE337FEEEF65E2C8F203FCA312AAAB”,也就是key為”61581AF471B166682A37EFE6″,iv為”C8F203FCA312AAAB”。
解密後文件是壓縮過的,解壓即可得到一個JSON。這部分解壓我沒仔細看他的算法,好像是gzip,直接用【Python:import gzip】解壓有點出錯,可能沒用對或者不是這個算法,你在研究一下。第二種投機的方法就是,可以通過【Python:import execjs】直接調用他的pako.js文件的JS的inflate()函數來解壓這塊。JS代碼混淆後看起來是非常難懂的,使用這種做法可以不用太看懂加密的算法,效率當然寫Python實現這個解密算法低1點咯。
最後的JSON再用【Python:import demjson】解析,text的value就是文檔。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/283027.html