【问题标题】:Dynamically scrape JSON values [closed]动态抓取 JSON 值 [关闭]
【发布时间】:2021-01-31 23:37:58
【问题描述】:

我想从 JSON 响应中抓取一些数据。这是link

我需要lessonTypes 中的值。我想导出用逗号分隔的所有值。 所以Theorieopleidingen有4个值Beroepsopleidingen有8个等等。

我想动态抓取,所以即使值的数量发生变化,它总是用逗号分隔全部抓取。

对不起,如果我的解释是周。

【问题讨论】:

    标签: python json web-scraping scrapy


    【解决方案1】:

    既然它是一个 JSON 对象,为什么不只使用 requests 并做你想做的事情(使用数据)。

    例如:

    import requests
    url = "https://www.cbr.nl/web/show?id=289168&langid=43&channel=json&cachetimeout=-1&elementHolder=289170&ssiObjectClassName=nl.gx.webmanager.cms.layout.PagePart&ssiObjectId=285674&contentid=3780&examtype=B"
    for value in requests.get(url).json()['lessonTypes'].values():
        print(value)
    

    输出:

    ['Motor', 'Auto', 'Bromfiets', 'Tractor']
    ['Bus', 'Aanhangwagen achter bus', 'Vrachtauto', 'Aanhangwagen achter vrachtauto', 'Heftruck', 'ADR', 'Taxi', 'Tractor']
    ['Aangepaste auto', 'Automaat personenauto']
    ['Motor', 'Auto', 'Aanhangwagen achter auto', 'Bromfiets', 'Brommobiel']
    

    编辑:

    要访问单个键及其值,您可能需要尝试以下操作:

    import requests
    url = "https://www.cbr.nl/web/show?id=289168&langid=43&channel=json&cachetimeout=-1&elementHolder=289170&ssiObjectClassName=nl.gx.webmanager.cms.layout.PagePart&ssiObjectId=285674&contentid=3780&examtype=B"
    lesson_types = requests.get(url).json()['lessonTypes']
    print(list(lesson_types.keys()))
    print("\n".join(lesson_types['Theorieopleidingen']))
    

    输出:

    ['Theorieopleidingen', 'Beroepsopleidingen', 'Bijzonderheden', 'Praktijkopleidingen']
    Motor
    Auto
    Bromfiets
    Tractor
    

    【讨论】:

    • 我用 Scrapy 和 JSON 库来做这个。
    • 这没什么问题,但是您已经收到了 JSON 作为响应,那么为什么不简化呢?
    • 这四行解决方案...?
    • 当您需要从网站的某些部分(即通过 HTML)获取数据时,Scrapy 很好,但如果网站已经返回原始数据,则没有使用它的意义,所以这是更好的解决方案。
    • 之前没用过requests,现在只好用scrapy了。
    猜你喜欢
    • 2012-02-09
    • 2015-06-11
    • 2019-12-25
    • 2015-03-27
    • 2019-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多