使用 BS4 抓取用 JS 编写的脚本

Scraping a script written in JS with BS4

我目前正在编写一个脚本,该脚本使用 BS4 和 aiohttp 在站点上注册帐户。 POST 中需要的一件事是称为 tagInfo 的东西。 tagInfo 的一部分是这个叫做 "tmxSessionId" 的东西。通常我会像往常一样使用 BS4 并且每次都抓取值。然而,问题是 tmxSessionId 是网站正在使用的脚本的一部分,它在 JS 中。我将 post 此处的一些脚本:

<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')

它返回 <script type="text/javascript">var layer = false;</script> 而不是完整的脚本。那么如何解析 tmxSessionId?

我遇到过同样的情况,并且自己找到了一条捷径,在每一个相同的场景中都对我有所帮助。你需要走那条捷径。

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

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

希望对您有所帮助!干杯!