现在获取到的值是
"<script> window._xxxx = {}</script>"
window._xxxx 里面是一个对象
我想获取 window._xxxx 这个变量,但是在 console 里面直接打印_xxxx 也是可以获取到值的,所以想请教下如何获取到这个值?
我用的是 scrapy 框架,网上有说可以用 selenium 可以解决这个问题,还在看。
1
supermoonie 2020-06-25 23:11:42 +08:00
正则提取 {} 整个内容,然后转 JSON
|
2
Colorful OP @supermoonie
# soup3 = re.compile('window._xxxx = (.*?);', re.S) soup3 = re.findall("window._xxxx = (.*?)",soup2) 这两种方法都试过但都不行... 是我写的有问题? |
3
ClericPy 2020-06-25 23:29:51 +08:00
我自己写框架调用无头浏览器拿变量也就三四行...
正则的话, 你正则写错了吧? 没原始代码不容易拼, r' window\._xxxx = ([\s\S]*?)</script>' 你这又 xxx 又空 {} 的, 还是好好学学正则吧, 最怕盲猜需求 |
4
musi 2020-06-25 23:34:32 +08:00 via iPhone
正则转 json 吧。匹配不到就是正则表达式写的有问题,再好好看看。能不用 selenium 就不用 selenium
|
7
supermoonie 2020-06-25 23:39:40 +08:00
@Colorful python 正则不太会,给你一段 js 的吧
/.*_xxxx=({.*})<.*/.exec("<script> window._xxxx = {'foo': 'bar'}</script>".replace(/\s/g, '')) |
8
supermoonie 2020-06-25 23:40:31 +08:00
@Colorful 因为 selenium 要运行浏览器,属于重量级的操作
|
9
ClericPy 2020-06-25 23:41:34 +08:00
@Colorful ... 你是把 Tag 对象给正则了... 我以为提前已经 outerHTML 或者 text 了, 早点休息吧, 大过节的能不写代码就不写代码
|
10
supermoonie 2020-06-25 23:42:29 +08:00
@ClericPy 大过节的,写写自己的代码吧🐶
|
11
Colorful OP @supermoonie 懂了,感谢普及
|
12
lithbitren 2020-06-26 11:05:35 +08:00
以前还不会正则的时候碰到过这种,直接
i = html.find('window._xxxx = ') 获得头坐标,然后再 j = html.find('</script>', i) 获得尾坐标,然后再 json.loads(html[i + len('window._xxxx = '): j]) 就可以得到对象了。。 |
13
warcraft1236 2020-06-30 10:00:20 +08:00
scrapy 为啥不直接用 css 提取 script 里边的内容,然后直接截取 {} 里边的内容就好了,连正则都不需要调,简单的很
|