Попытка разобрать определенное значение в сценарии JS - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь очистить значение, необходимое в запросе POST.Это значение можно найти несколько раз при использовании Inspect Element в Chrome, но поскольку BS4 просматривает только исходный код, мне нужно очистить значение из JS-скрипта, размещенного на сайте.

<script type ="text/javascript">        
    var isSRFlow = true;
    var isPpaOnSignIn =true;
    var simplifyRegFlowSuccess = false;
    var retUrl = "https&#x3a;&#x2f;&#x2f;www.ebay.com&#x2f;";
    var isFB = false;
    var isMobile = false;
    var langCode = "en-US";


    var emailAutoCompleteEnabled = true;

    var dfpContext = '{"enableTMXTagging":"true","slURL":"ebay","flashTagUpgrade":"0","enableFlashTagging":"false","tmxDfpUrl":"https://signin.ebay.com/t_n.html?suppressFlash\u003dtrue\u0026org_id\u003dusllpic0\u0026session_id\u003d57be07a71660ad4e16f42acffffc95e8","swfURL":"ebay","enableSLTagging":"false","swfObjectJSLibURL":"ebay","mid":"AQAAAWZGrHELAAUxNjY1N2JlMDdhNy5hZDRlMTZmLjQyYWNmLmZmZmM5NWU5Jp0dBAKw4k3h8WAm/g97vwVzjcA*","tmxSessionId":"57be07a71660ad4e16f42acffffc95e8","enableHTML5Tagging":"true","flashTagVersion":"1","dfpjsURL":"https://secureir.ebaystatic.com/f/0vk0rkyoky1ltm32dhy0hthnxyx.js"}';

Мне удалось получить весь сценарий, используя r = requests.get('https://reg.ebay.com/reg/PartialReg')<br> soup = BeautifulSoup(r.text, 'lxml') scripts = soup.find_all('script') your_script = [script for script in scripts if 'tmxSessionId' in str(script)][0]

Однако единственное, что мне нужно, - это '57be07a71660ad4e16f42acffffc95e8', то есть числа после «tmxSessionId».Как это может быть сделано?

Я также попробовал это:

scripts = soup.find_all('script')
your_script = [script for script in scripts if 'tmxSessionId' in str(script)][0]
new = your_script.find("tmxSessionId")
print(new)

, а также использовал «find_all» вместо просто «find».Один из моих друзей также предложил разделить сценарий, но я попробовал это и обнаружил, что он работает не очень хорошо.Есть какие-нибудь мысли?

PS: я не хотел бы использовать такие решения, как селен и PhantomJS, основанные на более широких возможностях, поскольку я нахожу это медленным и неэффективным

Редактировать: я использовал свой старый код, чтобы получитьсценарий из исходного кода, а затем использовать то, что предложил Сельчук

scripts = soup.find_all('script')
your_script = [script for script in scripts if 'tmxSessionId' in str(script)][0]
script_tag = your_script
soup = BeautifulSoup(script_tag, 'lxml')
script = soup.find_all('script')[0]
data = re.findall("{.*?}", script.text)[0]

print(json.loads(data)['tmxSessionId'])

1 Ответ

0 голосов
/ 09 октября 2018

Я не знаю остальную часть вашего скрипта, поэтому мне пришлось закрыть тег.Но это будет работать.

import requests
from bs4 import BeautifulSoup
import re
import json

script_tag = """
<script type ="text/javascript">        
    var isSRFlow = true;
    var isPpaOnSignIn =true;
    var simplifyRegFlowSuccess = false;
    var retUrl = "https&#x3a;&#x2f;&#x2f;www.ebay.com&#x2f;";
    var isFB = false;
    var isMobile = false;
    var langCode = "en-US";


    var emailAutoCompleteEnabled = true;

    var dfpContext = '{"enableTMXTagging":"true","slURL":"ebay","flashTagUpgrade":"0","enableFlashTagging":"false","tmxDfpUrl":"https://signin.ebay.com/t_n.html?suppressFlash\u003dtrue\u0026org_id\u003dusllpic0\u0026session_id\u003d57be07a71660ad4e16f42acffffc95e8","swfURL":"ebay","enableSLTagging":"false","swfObjectJSLibURL":"ebay","mid":"AQAAAWZGrHELAAUxNjY1N2JlMDdhNy5hZDRlMTZmLjQyYWNmLmZmZmM5NWU5Jp0dBAKw4k3h8WAm/g97vwVzjcA*","tmxSessionId":"57be07a71660ad4e16f42acffffc95e8","enableHTML5Tagging":"true","flashTagVersion":"1","dfpjsURL":"https://secureir.ebaystatic.com/f/0vk0rkyoky1ltm32dhy0hthnxyx.js"}';
</script>
"""

soup = BeautifulSoup(script_tag, 'lxml')
script = soup.find_all('script')[0]
data = re.findall("{.*?}", script.text)[0]

print(json.loads(data)['tmxSessionId'])

Вывод будет

57be07a71660ad4e16f42acffffc95e8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...