2014-03-13 35 views
0

我有一個鏈接到JavaScript文件的URL,例如http://something.com/../x.js。我需要提取一個變量從x.js使用python從url中提取javascript信息

是否有可能使用python做到這一點? 目前我使用urllib2.urlopen()但是當我使用.read()我得到這個可愛的爛攤子:

U�(��%y�d�<�!���P��&Y��iX���O�������<Xy�CH{]^7e� �K�\�͌h��,U(9\ni�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元素。

+0

嘗試在網絡瀏覽器中打開js文件,看看它是否確實是一個js文件 – karthikr

+0

它看起來像一個,它有一件事,一個json變量,其中有很多東西。 – EasilyBaffled

回答

4

.read()應該給你你在瀏覽器的「查看源文件」窗口中看到同樣的事情,那麼什麼是錯的。它看起來像HTTP響應可能gzipped,但urllib2 doesn't support gzipurllib2也不會請求壓縮的數據,所以如果這是問題,服務器可能配置錯誤,但我認爲這是失控的。

我建議改用requestsrequestsautomatically decompresses gzip-encoded responses,所以它應該爲你解決這個問題。

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 

一般來說,requests更容易比urllib2使用,所以我建議使用它無處不在,除非你絕對必須堅持標準庫。

+0

所以它幾乎在那裏。 r.text讓我的字符串,但r.json()失敗'ValueError:沒有JSON對象可以解碼'和r.text.json()失敗'AttributeError:'unicode'對象沒有屬性'json' ' – EasilyBaffled

+0

任何機會你可以分享_actual_網址 - 這將使這更容易排除故障! –

+0

或許你的URL像'var data = {foo:「bar」}''而不是原始的JSON那樣返回JavaScript。在這種情況下,你需要做一些字符串操作來解析JSON,然後用'json.loads(s)'解析它。這可以像's = r.text [s.find(「{」):s.find(「}」)+ 1]'這麼簡單,如果JSON對象是第一次使用'{}'文件,但它可能更復雜。 JSON也比實際的JavaScript對象表示法稍微嚴格 - 例如,如果原始JavaScript使用'''而不是''',則會遇到問題。 – sjy

0
import json 

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

對不起,但這不讓我'ValueError:沒有JSON對象可以解碼 ' – EasilyBaffled