使用Scrapy获取页面,执行JS并提取variab

2024-04-19 20:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用python屏幕抓取框架的项目scrapy。我创建了一个spider,它加载所有<script>标记并处理第二个标记。这是因为在我收集的测试数据中,我需要的数据在第二个<script>标记中。你知道吗

但是现在我遇到了一个问题,有些页面包含了我想要的其他脚本标记(#3或#4)中的数据。另一个障碍是,第二个javascript标记的第二行大部分都有我想要的JSON。但根据页面的不同,这也可能是第3行或第4行。你知道吗

考虑一下这个简单的HTML文件:

<html>
    <head>
        <title> Test </title>
    </head>

    <body>
        <p>
            This is a text
        </p>

        <script type="text/javascript">
            var myJSON = {
                a: "a",
                b: 42
            }
        </script>
    </body>
</html>

如果我在我的浏览器(firefox)中打开此页并转到开发人员工具和console.log(myJSON.b),我可以访问myJSON.b并获取42 所以我的问题是:如何从一个零碎的页面中提取JavaScript变量或JSON?你知道吗


Tags: 数据项目text标记框架json屏幕title
1条回答
网友
1楼 · 发布于 2024-04-19 20:34:32

我以前也遇到过类似的问题,我通过使用(基于您的示例HTML文件)提取脚本标记中的文本来解决它:

response.xpath('//script/text()')

之后,我使用正则表达式以JSON格式提取所需的数据。因此,使用上面的选择器和您的示例HTML

pattern = r'i-suck-at-regular-expressions'
json_data = response.xpath('//script/text()').re_first(pattern)

接下来,您应该能够使用json库将数据作为python字典加载,如下所示:

json.loads(json_data)

它应该返回类似于:

{"a": "a", "b": 42}

相关问题 更多 >