2015-09-27 27 views
0

按照我剛纔的問題搜索在JavaScript字符串: how to fetch javascript contents in python使用python

我試圖讓另一個腳本從一個javascript獲取數據。當然得到了網頁內容。

但是,它只是沒有顯示我想要的內容。我想從頁面的javascript中找到「content_id」。這是網頁: - http://www.hulu.com/watch/815743

這就是我現在所擁有的。

import re 
import requests 
from bs4 import BeautifulSoup 
import os 
import fileinput 


Link = 'http://www.hulu.com/watch/815743' 
q = requests.get(Link) 
soup = BeautifulSoup(q.text) 
#print soup 
subtitles = soup.findAll('script',{'type':'text/javascript'}) 
pattern = re.compile(r'"content_id":"(.*?)"', re.MULTILINE | re.DOTALL) 
script = soup.find("script", text=pattern) 
print pattern.search(script.text).group(1) 

我得到這個錯誤:

AttributeError: 'NoneType' object has no attribute 'text'

不知道如何解決這個問題..?

+0

你有沒有考慮尋找*「AttributeError的:‘NoneType’對象有沒有屬性」 *?那裏已經有很多類似的問題了... – jonrsharpe

+0

我試過了解決方案...沒有工作。 – Xonshiz

+2

我從字面上不相信你 - 即使你真的*已*嘗試了所有的各種建議,爲什麼你不在問題中提到*? – jonrsharpe

回答

2

有兩個問題在您的正則表達式模式:

  • 引號逃脫的腳本內容反斜槓,考慮到這一點
  • 有冒號後空白

以下是固定版本:

pattern = re.compile(r'\\"content_id\\":\s*\\"(.*?)\\"', re.MULTILINE | re.DOTALL) 

適合我,因此得到60585710

僅供參考,這裏是我執行的完整代碼:

import re 

import requests 
from bs4 import BeautifulSoup 

Link = 'http://www.hulu.com/watch/815743' 
q = requests.get(Link) 
soup = BeautifulSoup(q.text) 

pattern = re.compile(r'\\"content_id\\":\s*\\"(.*?)\\"', re.MULTILINE | re.DOTALL) 
script = soup.find("script", text=pattern) 
print pattern.search(script.text).group(1) 
+0

好的。我看到錯誤...但是,我仍然得到相同的錯誤。你有沒有改變劇本中的其他內容? – Xonshiz

+0

似乎我的python安裝有一些錯誤。我在其他機器上試過我的代碼,它工作。謝謝:) – Xonshiz