python写爬虫的文章很多,我就说一说自己碰到的坑。
有坑就最好有解决方法,本博不像其他到处转,结果啥用没有。
想爬取一个国内知名网站的内容,该网站有Json数据直接回传,开始挺高兴,写了段,爬爬挺轻松。
过了几天一看,nnd,request的url变了。
仔细看了网页的源代码,这个变态网站,连json的url都是由js生成的。这个js每隔一段时间就改变一下 url内容。
方法零:
完全模拟网页形式,获取内容,这是没办法的办法,效率低下,不到万不得已不采用。
方法一:
爬取html中的javascript内容,用正则获取js中变量的内容。但是,这天杀的网站,只要稍微将变量+-*/一下就直接废了。
方法二:
解析javascript,获取变量内容,再组合URL。解析js,python中最出名的是pyv8,这东西就是本文介绍的天坑。
50%以上的自以为是的人,说win下安装pyv8 直接pip就可以了。但是,实际上,根本安装不成功。查了官方的pypi,也没显示支持python3。翻出去,找到code.google网页原版,支持的也最多到python2.7。
剩下49.99999%告诉你,有个pyv8-binaries项目,里面2个文件直接下载下来就可以使用。事实上,这个项目是为sublime Text3 的 emment 编译的 pyv8 , 用dumpbin查看_pyv8.pyd ,显示需要python33.dll ,我尝试copy python33.dll 至项目下,直接显示python版本冲突。用python37.dll 改名至项目下,仍旧找不到Dll。用反便宜软件反编译_pyv8.pyd ,再修改python33.dll 为 python37.dll ,重新编译,仍旧无法导入。反正反正我是没脾气,在win下,python3.3以上版本安装这个pyv8了。
漫无目的的闲逛网站,在知乎的一个爬虫介绍帖子里,有个作者说,经过大家提醒有个js2py项目可用。再翻翻js2py,终于守得云开见月明。
import js2py
jsStr ="""
var global_lang = 'zh_CN';
"""
context = js2py.EvalJs()
context.execute(jsStr)
print("value=",context.global_lang)
唯一不爽的是,这个js2py的import比较慢。