首页 > 解决方案 > Python - 循环变量以获取多个获取请求

问题描述

我正在尝试跨多个活动日期抓取门票可用性。

每个事件日期都有自己的 eventID,因此对于 23 个可能的日期,eventids 是 1001-1023

我已经开始手动执行此操作,下面为我提供了给定日期的所有可用座位,但重复 22 次并不是最有效的方法。

import requests
import json 

f = open('tickets.txt','a')

r = requests.get('https://www.website.com/events/1000/tickets/seatmap?sectionid=3')
d = json.loads(r.text)
zones = d['zones']
for key, value in zones.iteritems() :
    print >>f, (key, value)

我想遍历 eventID 并一次打印所有日期的所有可用性。但是我无法建立请求/ URL。到目前为止,我已经创建了:

eventIDs =  range(1001, 1023)
baseurl = "https://www.website.com/events/"
sectionId = "/tickets/seatmap?sectionId=3"

更新:我想我已经到了那里,我认为这是可行的......

for i in eventIDs:
    url=baseurl+str(i)+sectionId
    r = requests.get(url) 
    d = json.loads(r.text)
    print >>f, (d)

这是最好的方法吗?非常感谢任何帮助。谢谢。

标签: pythonweb-scrapingpython-requests

解决方案


你应该考虑让你的休息调用async。如果你想坚持requests-ish 风格,你可以使用grequests

# Python3
import grequests

event_ids =  range(1001, 1023)
base_url = "https://www.website.com/events/"
section_id = "/tickets/seatmap?sectionId=3"
# Create an array of urls
urls = [base_url + str(i) + section_id for i in event_ids ]
# Preapare requests
rs = (grequests.get(u) for u in urls)
# Send them
results = grequests.map(rs)

或者你可以使用asynciowith aiohttp。如果您对它感兴趣并想检查它的外观,可以访问此问题


推荐阅读