本文目录一览:
- 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就是文档。