【问题标题】:Scraping a script written in JS with BS4用 BS4 抓取用 JS 编写的脚本
【发布时间】:2018-09-23 22:27:56
【问题描述】:

我目前正在编写一个脚本,该脚本使用 BS4 和 aiohttp 在网站上注册一个帐户。 POST 中需要的一件事是名为 tagInfo 的内容。 tagInfo 的一部分是这个叫做“tmxSessionId”的东西。通常我会像往常一样使用 BS4 并且每次都刮取价值。但是问题是 tmxSessionId 是该站点正在使用的脚本的一部分,并且它在 JS 中。我将在这里发布一些脚本:

<script type="text/javascript">

(function() {
var Context = raptor.require('ebay.context.Context');
    var langCode = "en-US";
    var emailAutoCompleteEnabled = true;

    var dfpContext = '{"tmxSessionId":"081708da1660ab61a9e69761fffcb25e"}';

}

我编辑了脚本并删除了大部分额外的部分,提供了一些上下文以及我很好奇的部分。如您所见,它位于脚本标签中。所以作为一个测试我试着做

soup = BeautifulSoup(r.text, 'lxml')
idd = soup.find('script', type='text/javascript')

它回来了&lt;script type="text/javascript"&gt;var layer = false;&lt;/script&gt; 而不是完整的脚本。那么如何解析 tmxSessionId 呢?

【问题讨论】:

    标签: javascript python beautifulsoup aiohttp


    【解决方案1】:

    我经历过同样的情况,我自己找到了一条捷径,在每一种情况下都对我有帮助。你需要走那个捷径。

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

    列表理解部分将找到包含您需要的文本的脚本元素。大多数情况下,第一个元素将是您的脚本。所以我最后添加了[0]

    希望这会有所帮助!干杯!

    【讨论】:

    • 所以在未来,让我们说脚本我不想要第一个而是第三个。我会做[0]?另外,如果它说 script src,我应该忽略它,因为它只是源代码而不是我需要的实际脚本?
    • 关键不是索引,你需要从你需要的script 元素中找到唯一的词。只需迭代所有脚本元素并使用关键字存储您需要的元素。很高兴我的建议对您有所帮助!
    • 所以可以说 tmxSessionID 是一个非常大的脚本的一部分,其中有很多我不需要的不必要的东西(我只需要 tmxSessionId)。我将如何只解析该值?这不可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    • 2017-03-21
    • 2013-12-04
    • 2019-03-06
    • 2019-03-08
    • 2017-09-20
    相关资源
    最近更新 更多