通过Python中的Get Request循环

时间:2018-02-21 22:03:27

标签: python api web-scraping get-request

我正在尝试使用Stubhub的API获取一些票务库存信息,但我似乎无法弄清楚如何循环获取请求。

我基本上想要遍历多个事件。 eventid_list是一个偶数列表。我的代码如下:

inventory_url = 'https://api.stubhub.com/search/inventory/v2'

for eventid in eventid_list:
    data = {'eventid': eventid, 'rows':500}
    inventory = requests.get(inventory_url, headers=headers, params=data)
    inv = inventory.json()
    print(inv)

listing_df = pd.DataFrame(inv['listing'])

当我运行它时,数据帧只返回一个事件的结果,而不是多个。我做错了什么?

编辑:print(inv)输出如下内容:

{
    'eventId': 102994860, 
    'totalListings': 82, 
    'totalTickets': 236, 
    'minQuantity': 1, 
    'maxQuantity': 6, 
    'listing': [
        {
            'listingId': 1297697413, 
            'currentPrice': {'amount': 108.58, 'currency': 'USD'}, 
            'listingPrice': {'amount': 88.4, 'currency': 'USD'}, 
            'sectionId': 1638686, 
            'row': 'E', 
            'quantity': 6, 
            'sellerSectionName': 'FRONT MEZZANINE RIGHT', 
            'sectionName': 'Front Mezzanine Sides', 
            'seatNumbers': '2,4,6,8,10,12', 
            'zoneId': 240236, 
            'zoneName': 'Front Mezzanine', 
            'deliveryTypeList': [5], 
            'deliveryMethodList': [23, 24, 25], 
            'isGA': 0, 
            'dirtyTicketInd': False, 
            'splitOption': '2', 
            'ticketSplit': '1', 
            'splitVector': [1, 2, 3, 4, 6], 
            'sellerOwnInd': 0, 
            'score': 0.0
        }, 
        ...
        {
            'listingId': 1297697417, 
            'currentPrice': {'amount': 108.58, 'currency': 'USD'}, 
            'listingPrice': {'amount': 88.4, 'currency': 'USD'}, 
            'sectionId': 1638686, 
            'row': 'D', 
            'quantity': 3, 
            'sellerSectionName': 'FRONT MEZZANINE RIGHT', 
            'sectionName': 'Front Mezzanine Sides', 
            'seatNumbers': '2,4,6', 
            'zoneId': 240236, 
            'zoneName': 'Front Mezzanine', 
            'deliveryTypeList': [5], 
            'deliveryMethodList': [23, 24, 25], 
            'isGA': 0, 
            'dirtyTicketInd': False, 
            'splitOption': '2', 
            'ticketSplit': '1', 
            'splitVector': [1, 3], 
            'sellerOwnInd': 0, 
            'score': 0.0
        },
    ]
}

1 个答案:

答案 0 :(得分:0)

我猜测inventory.json()['listing']是一系列事件。如果是这样,你可以试试这个:

inventory_url = 'https://api.stubhub.com/search/inventory/v2'

def get_event(eventid):
    """Given an event id returns inventory['listing']"""
    data = {'eventid': eventid, 'rows':500}
    inventory = requests.get(inventory_url, headers=headers, params=data)
    return inventory.json().get('listing', [])

# Concatenate output of all events
events = itertools.flatten(get_event(eventid) for eventid in eventid_list)

listing_df = pd.DataFrame(list(events))

这只是一个起点,你必须处理inventory.statos_code != 200的情况。结果可能不是很有用,因此您可能需要处理列表项行currentPricelistingPrice的部分属性:

enter image description here