代码之家  ›  专栏  ›  技术社区  ›  Filipe Ferminiano

刮削反应id

  •  1
  • Filipe Ferminiano  · 技术社区  · 8 年前

    我想在这件事上用刮胡粉 page 要提取元素中的电话号码:

    sel = selector(response)
    sel.xpath('.//*[@class="ProfileSimpleContact-item"]/span/span/text()').extract()
    

    但这又回来了:

    ['(11) 98528-27...']
    

    我想得到完整的数字(不带“…”),它只在动态单击一个react id时出现。我如何才能得到它?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Joaquin    8 年前

    你可以用 splash 作为最后的选择,它将导致你的蜘蛛更昂贵和复杂。

    幸运的是,在您的情况下,您可以使用 <script> 获取所需数据的标记。

    首先你需要得到正确的答案 <脚本> 标签:

    ans = response.xpath("//script[contains(text(),'telephone')]/text()").extract_first()
    

    它给你一个 json 这样地:

    {
        "@context": "http://schema.org",
        "@type": "Person",
        "name": "Cynthia Hóss Rocha",
        "description": "advogada há 15 anos.",
        "telephone": "(11) 985282712",
        "image": "imgs.jusbr.com/profiles/5368773/images/1419878998_standard.jpg",
        "jobTitle": "Advogado",
        "url": "https://cynthiahossrocha.jusbrasil.com.br",
        "address": {
            "@type": "PostalAddress",
            "addressLocality": "São Paulo (SP)",
            "streetAddress": "Rua Marconi, 131",
            "postalCode": "01047-000"
        }
    }
    

    要将其转换为所需的对象 import json 使用 json.loads :

    json_ans = json.loads(ans)
    

    最后,您只需要提取所需的值:

    phone = json_ans["telephone"]