gpt4 book ai didi

python - 如何从网页源中的<script>标签获取数据到.csv文件?

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:20 24 4
gpt4 key购买 nike

示例网页:https://subwaystats.com/status-1-train-on-2017-11-27 .

在页面源代码中有一个名为“data”的变量,它有两个数据列表(标签和数据),它们将成为我在 .csv 中的“列”。

<script>
...
var data = {
labels: ['12am', '00:05', '00:10', '00:15', '00:20', '00:25', ...],
...,
data: [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,...],
....}
</script>

如何将这两个列表转换为 .csv?感谢您的帮助,因为我对网络抓取非常陌生。

最佳答案

解析 JavaScript 的唯一可靠方法是使用真正的解析器,如 SlimIt 。使用 SlimIt,您可以定义 Visitor访问您感兴趣的 JavaScript 元素。在您的情况下,您需要一个能够访问对象的 JavaScript 元素。下面是一个访问者,它查找名称为 labelsdata 且值为数组的对象中的所有属性,并打印数组的元素:

from slimit.visitors.nodevisitor import ASTVisitor
from slimit.ast import Array

class MyVisitor(ASTVisitor):
def visit_Object(self, node):
"""Visit object literal."""
for prop in node:
name = prop.left.value
if name in ['labels', 'data'] and isinstance(prop.right, Array):
elements = [child.value for child in prop.right.children()]
print('{}: {}'.format(name, elements))
else:
self.visit(prop)

请注意,如果它不是您正在寻找的节点,它如何递归到该节点的子节点中 - 这允许它在任何级别找到您正在寻找的属性(在您的情况下,data 属性比 labels 深一级)。

要使用访问者,您只需下载 requests 的页面即可。 ,并用 Beautiful Soup 解析它,然后将访问者应用到脚本元素:

from requests import get
from bs4 import BeautifulSoup
from slimit.parser import Parser

def main():
url = 'https://subwaystats.com/status-1-train-on-2017-11-27'
response = get(url, headers={'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'})
soup = BeautifulSoup(response.text, "html.parser")
scripts = soup.find_all('script')
parser = Parser()
visitor = MyVisitor()
for script in scripts:
tree = parser.parse(script.text)
visitor.visit(tree)

if __name__ == '__main__':
main()

请注意,我已将 User-Agent header 值设置为来自常见浏览器的字符串。这是因为如果网站检测到用户代理是脚本,则不会返回页面。

关于python - 如何从网页源中的&lt;script&gt;标签获取数据到.csv文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541320/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com