我正在使用美麗的湯來取消網頁。我想訪問這個webpage上的dataLayer(一個JavaScript變量)?我如何使用python檢索它? 使用python報廢時訪問dataLayer(JS變量)
1
A
回答
1
您可以用重新和json.loads幫助下,找到包含JSON正確腳本標籤源解析它:
from bs4 import BeautifulSoup
import re
from json import loads
url = "http://www.allocine.fr/video/player_gen_cmedia=19561982&cfilm=144185.html"
soup = BeautifulSoup(requests.get(url).content)
script_text = soup.find("script", text=re.compile("var\s+dataLayer")).text.split("= ", 1)[1]
json_data = loads(script_text[:script_text.find(";")])
運行它,你看我們得到你想要的東西:
In [31]: from bs4 import BeautifulSoup
In [32]: import re
In [33]: from json import loads
In [34]: import requests
In [35]: url = "http://www.allocine.fr/video/player_gen_cmedia=19561982&cfilm=144185.html"
In [36]: soup = BeautifulSoup(requests.get(url).content, "html.parser")
In [37]: script_text = soup.find("script", text=re.compile("var\s+dataLayer")).text.split("= ", 1)[1]
In [38]: json_data = loads(script_text[:script_text.find(";")])
In [39]: json_data
Out[39]:
[{'actor': '403573,19358,22868,612492,418933,436500,46797,729453,66391,16893,211493,249636,18324,483703,1193,165792,231665,114167,139915,155111,258115,119842,610268,166263,597100,134791,520768,149470,734146,633703,684803,763372,673220,748361,178486,241328,517093,765381,693327,196630,758799,220756,550759,737383,263596,174710,118600,663153,463379,740361,702873,659451,779133,779134,779135,779136,779137,779138,779139,779140,779141,779142,779143,779144,779145,779146,779147,779241,779242,779243,779244',
'director': '41198',
'genre': '13025=action&13012=fantastique',
'movie_distributors': 929,
'movie_id': 144185,
'movie_isshowtime': 1,
'movie_label': 'suicide_squad',
'nationality': '5002',
'press_rating': 2,
'releasedate': '2016-08-03',
'site_route': 'moviepage_videos_trailer',
'site_section': 'movie',
'user_activity': 'videowatch',
'user_rating': 3.4,
'video_id': 19561982,
'video_label': 'suicide_squad_bande_annonce_finale_vo',
'video_type_id': 31003,
'video_type_label': 'trailer'}]
你也可以使用正則表達式,但在這種情況下使用str.find以獲得數據的結束就足夠了。
1
這個beautifulsoup不是一個JavaScript模擬器,所以你不能執行JS並獲取var的內容。但是,也許這個var由ajax請求填充,如果你發送相同的請求與你的python腳本,你可以觸摸這些數據。
另一方面,如果這個數據是靜態分配的,那麼你可以使用字符串處理和正則表達式來獲取它們。
聲明:對不起,對於一般的答案。
相關問題
- 1. 如何訪問dataLayer變量
- 2. js訪問變量值
- 3. JS範圍:訪問變量
- 4. 嘗試訪問數組中的dataLayer變量
- 5. Python的訪問使用全局變量()
- 6. 訪問MVC2中的LinqToSql DataLayer
- 7. dataLayer中的PHP變量
- 8. 使用節點js使用身份驗證報廢網站
- 9. 我在使用python beautifulsoup的網絡報廢時出現錯誤
- 10. 如何使用python請求執行twitter報廢時執行oauth
- 11. JS - 訪問全局變量問題
- 12. python:使用包含變量的名稱訪問實例變量
- 13. Python - 實例變量訪問
- 14. 捲毛報廢問題
- 15. 廢料,用Python模擬點擊並再次報廢
- 16. 從HTML調用js函數時可以訪問javascript變量嗎?
- 17. 如何訪問JS變量在C#
- 18. 在.js文件中訪問JavaScript變量?
- 19. 從javascript訪問JSP變量[Angular JS]
- 20. 變量無法訪問JS在部分
- 21. 在rails中訪問js變量/值
- 22. React JS訪問變量超出範圍
- 23. 訪問js函數內的變量
- 24. 使用警報對話框從內部類訪問變量
- 25. 在訪問報告(DoCmd.OpenReport)中使用表單變量
- 26. 在報廢時防止警報消息
- 27. 如何訪問變量設定使用app.set()快遞JS
- 28. 訪問變量時出錯
- 29. Java訪問時間變量
- 30. 如何使用R(rvest)在網頁報廢時使用R
OP試圖獲取的數據在源代碼中 –