使用python从url中提取javascript信息

Extract javascript information from url with python

我有一个链接到javascript文件的URL,例如http://something.com/../x.js。 我需要从x.js中提取变量

是否可以使用python执行此操作?
目前我正在使用urllib2.urlopen()但是当我使用.read()时,我得到了这个可爱的混乱:

1
2
3
U?(??%y?d?<?!???P??&Y??iX???O???????<Xy?CH{]^7e? ?K?\??h??,U(9
i?A ??2dp}?9???t?<M?M,u?N??h?b??uV?\??0?A1??Q?.)?A??XNc??$"SkD?y????5?)?B?t9?):?^6??`(???d??hH=9D5wwK'?E?j%?]U~??0U?~???)?pj??aA??;n?px`?r?/8<?;?t??z?{??n??W
?s???????h8????i??#}???}&?M?K?y??h?z?6,?Xc??!:'D|?s??,?g$?Y??H?T^#`r????f????tB??7??X?%?.X\??M9V[Z?Yl?LZ[ZM?F???`D?=?5?A?0?){Ce?L*?k?????????5????"
?A??Y?}???t??X?(?O???[?{???T?V???:?s?i?????8m??6b??d$??j}??u?D&RL?[0>~x?j?7?

当我查看开发工具来查看DOM时,正文中唯一的东西就是包含在标签中的字符串。 在常规视图中,字符串是json元素。


.read()应该给你在浏览器的"查看源"窗口中看到的相同内容,所以出了点问题。 看起来HTTP响应可能是gzip压缩,但urllib2不支持gzip。 urllib2也不会请求gzip压缩数据,所以如果这是问题,服务器可能配置错误,但我认为这是你无法控制的。

我建议改用requestsrequests自动解压缩gzip编码的响应,因此它应该为您解决此问题。

1
2
3
4
import requests
r = requests.get('https://something.com/x.js')
r.text   # unparsed json output, shouldn't be garbled
r.json() # parses json and returns a dictionary

一般来说,requestsurllib2更容易使用,所以我建议在任何地方使用它,除非你绝对必须坚持使用标准库。


1
2
3
4
import json

js = urllib2.urlopen("http://something.com/../x.js").read()
data = json.loads(js)