【发布时间】:2019-10-01 17:27:17
【问题描述】:
我有一个项目使用 python 屏幕抓取框架scrapy。我创建了一个蜘蛛,它加载所有<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
所以我的问题是:如何从 scrapy-fetched-page 中提取 JavaScript 变量或 JSON?
【问题讨论】:
-
您将使用Selenium 来控制可以运行JavaScript 的真实Web 浏览器。或过时的PhantomJS。或 Splash 甚至还有 Scrapy 插件:scrapy-splash
-
@furas 我完全不同意。 Selenium 首先是一个 webtester,而不是一个 webcrawler。所以加载页面和一些无用的东西需要更多的时间,因为有很多方法可以提取 json 模式而没有任何麻烦。我的意思是我也排除了scrapy-splash。
标签: python web-scraping scrapy