首页 > 解决方案 > Python WebScraping 使用 Soap + Request

问题描述

我正在尝试在 Python 中使用肥皂获取链接的信息。我可以通过信息获取整个数组,但我不知道如何以我想要的方式操作信息。

例如:我想显示在线名称(Nome)和状态。


我试图只获取 div,但结果它返回“none”。

from bs4 import BeautifulSoup
import requests

source = requests.get('http://apps.cptm.sp.gov.br:8080/AppMobileService/api/LinhasMetropolitanas').text

soup = BeautifulSoup(source, 'html.parser')

print(soup)

标签: pythonbeautifulsoup

解决方案


在这种特殊情况下,您根本不需要BeautifulSoup。您可以直接获取source.contents,对其进行解码并使用ast.literal_eval获取列表。

import requests
import ast
source = requests.get('http://apps.cptm.sp.gov.br:8080/AppMobileService/api/LinhasMetropolitanas')
content_list=ast.literal_eval(source.content.decode("utf-8"))
for d in content_list:
    print(d['Nome'],d['Status'])

输出:

AZUL Operação Normal
VERDE Operação Normal
VERMELHA Operação Normal
AMARELA Operação Normal
LILÁS Operação Normal
RUBI Operação Normal
DIAMANTE Velocidade Reduzida
ESMERALDA Velocidade Reduzida
TURQUESA Operação Normal
CORAL Operação Normal
SAFIRA Velocidade Reduzida

content_list看起来像这样

[{'Nome': 'AZUL', 'Status': 'Operação Normal', 'Tipo': 'M', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:44', 'LinhaId': 1}, {'Nome': 'VERDE', 'Status': 'Operação Normal', 'Tipo': 'M', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:44', 'LinhaId': 2}, {'Nome': 'VERMELHA', 'Status': 'Operação Normal', 'Tipo': 'M', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:44', 'LinhaId': 3}, {'Nome': 'AMARELA', 'Status': 'Operação Normal', 'Tipo': '4', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:00', 'LinhaId': 4}, {'Nome': 'LILÁS', 'Status': 'Operação Normal', 'Tipo': 'M', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:44', 'LinhaId': 5}, {'Nome': 'RUBI', 'Status': 'Operação Normal', 'Tipo': 'C', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 7}, {'Nome': 'DIAMANTE', 'Status': 'Velocidade Reduzida', 'Tipo': 'C', 'Descricao': 'Por motivo de Serviços Programados , os trens da Linha 8 - Diamante estão circulando com intervalos maiores entre as Estações Júlio Prestes e Itapevi .', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 8}, {'Nome': 'ESMERALDA', 'Status': 'Velocidade Reduzida', 'Tipo': 'C', 'Descricao': 'Por motivo de Obras de Modernização , os trens da Linha 9 - Esmeralda estão circulando com intervalos maiores entre as Estações Osasco e Grajaú .', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 9}, {'Nome': 'TURQUESA', 'Status': 'Operação Normal', 'Tipo': 'C', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 10}, {'Nome': 'CORAL', 'Status': 'Operação Normal', 'Tipo': 'C', 'Descricao': '', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 11}, {'Nome': 'SAFIRA', 'Status': 'Velocidade Reduzida', 'Tipo': 'C', 'Descricao': 'Por motivo de Obras de Modernização , os trens da Linha 12 - Safira estão circulando com intervalos maiores entre as Estações Brás e Calmon Viana .', 'DataGeracao': '2019-04-13T22:50:43', 'LinhaId': 12}]

推荐阅读