Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用URL中的变量循环抓取网站中多个页面的数据_Python_Arrays_Loops_Request - Fatal编程技术网

Python 使用URL中的变量循环抓取网站中多个页面的数据

Python 使用URL中的变量循环抓取网站中多个页面的数据,python,arrays,loops,request,Python,Arrays,Loops,Request,我想基于变量{event}从request2中的URL循环刮取多个页面。这段代码基本上会在数据集“eventid”中循环,并根据request2中的变量{event}刮取URL的多个页面。我遇到的问题是,代码只从“eventid”(991215)中刮取最后一个事件的页面,然后停止 >>> request1 = requests.get('https://www.odds.com.au/api/web/public/Meetings/getDataByRangeCacheable

我想基于变量{event}从request2中的URL循环刮取多个页面。这段代码基本上会在数据集“eventid”中循环,并根据request2中的变量{event}刮取URL的多个页面。我遇到的问题是,代码只从“eventid”(991215)中刮取最后一个事件的页面,然后停止

>>> request1 = requests.get('https://www.odds.com.au/api/web/public/Meetings/getDataByRangeCacheable/?filter=events,regions,meetings&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&sportId=1&regionId[]=1&regionId[]=22&regionId[]=24&regionId[]=25&regionId[]=26&regionId[]=27&regionId[]=28&regionId[]=29&regionId[]=30&rangeStart=2020-02-19T16:00:00.356Z&rangeEnd=2020-02-20T15:59:59.356Z ')

# Data set from request1

>>> eventid = []
>>> json1 = request1.json()
>>> for id in json1.get('events'):
        ...     eventid.append(id['id'])

>>> print(eventid)
[990607, 990111, 990594, 990614, 990608, 990112, 990595, 990615, 990609, 990113, 990114, 990115, 990116, 990117, 990118, 990119, 990324, 990325, 990326, 990327, 990295, 990286, 990328, 990318, 990296, 990287, 990329, 990319, 990297, 990288, 990330, 990320, 990311, 990298, 990289, 990331, 990321, 990312, 990299, 990290, 990322, 990313, 990300, 990291, 989959, 990323, 990314, 990301, 990292, 989960, 990315, 989822, 989961, 990316, 990303, 990293, 989962, 990317, 990304, 990294, 989963, 990305, 989964, 990306, 989965, 990307, 989966, 990308, 990309, 990310, 991142, 991143, 991144, 991145, 991146, 991232, 991211, 991218, 991147, 991233, 990583, 991212, 991219, 991148, 991234, 990584, 991213, 991220, 991235, 991149, 990585, 991214, 991221, 991236, 990586, 991215]

# Code I am having trouble with

>>> for event in eventid:
         ...     request2 = requests.get(f'https://www.punters.com.au/api/web/public/Odds/getOddsComparisonCacheable/?allowGet=true&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&eventId={event}&betType=FixedWin', headers={'User-Agent': 'Mozilla/5.0'})

代码是正常的,它确实提取了eventid:循环中的
for event中的每个事件。请尝试以下操作:

for event in eventid:    
    request2 = requests.get(f'https://www.punters.com.au/api/web/public/Odds/getOddsComparisonCacheable/?allowGet=true&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&eventId={event}&betType=FixedWin', headers={'User-Agent': 'Mozilla/5.0'})
    tmp_json = request2.json()
    print(tmp_json['eventId'], tmp_json['eventNameFull'])
输出将是:

990607 Ludlow Race 5 - 5234m
990111 Newcastle Race 5 - 1765m
990594 Punchestown Race 6 - 4400m
990614 Doncaster Race 5 - 5721m
990608 Ludlow Race 6 - 3512m
...

代码是正常的,它确实提取了eventid:
循环中的
for event中的每个事件。请尝试以下操作:

for event in eventid:    
    request2 = requests.get(f'https://www.punters.com.au/api/web/public/Odds/getOddsComparisonCacheable/?allowGet=true&APIKey=65d5a3e79fcd603b3845f0dc7c2437f0&eventId={event}&betType=FixedWin', headers={'User-Agent': 'Mozilla/5.0'})
    tmp_json = request2.json()
    print(tmp_json['eventId'], tmp_json['eventNameFull'])
输出将是:

990607 Ludlow Race 5 - 5234m
990111 Newcastle Race 5 - 1765m
990594 Punchestown Race 6 - 4400m
990614 Doncaster Race 5 - 5721m
990608 Ludlow Race 6 - 3512m
...
您在每次迭代中都会覆盖
request2
的内容,您应该将每个结果添加到列表中



您在每次迭代中都会覆盖
request2
的内容,您应该将每个结果添加到列表中。

您能分享您的输出吗?我认为您的问题在于没有保存每个eventId的结果。每次循环运行时,request2都会更新。但我还是不知道你到底有什么问题。我只是猜测产出太大,无法分享。你如何保存结果?我的理论是,当你改变网站时,eventid也会改变。因此,当页面更改时,您可能必须获取事件,但我没有分析该网站,我在其他网站中发现该问题是在第二个for循环内处理的
request2
,还是在第二个for循环外处理的?@hpollock每次迭代都会覆盖
request2
的值。请共享循环中的所有代码,以便我们确定。您可以共享您的输出吗?我认为您的问题在于没有保存每个eventId的结果。每次循环运行时,request2都会更新。但我还是不知道你到底有什么问题。我只是猜测产出太大,无法分享。你如何保存结果?我的理论是,当你改变网站时,eventid也会改变。因此,当页面更改时,您可能必须获取事件,但我没有分析该网站,我在其他网站中发现该问题是在第二个for循环内处理的
request2
,还是在第二个for循环外处理的?@hpollock每次迭代都会覆盖
request2
的值。请分享循环中的所有代码,这样我们就可以确定了。您能澄清一下您的解释吗?如果您使用list,或者python中的任何调用,每个事件都会完整地出现在列表中,就像从api中获取一样,然后,您可以为事件中的事件执行
之类的操作,以显示与每个事件相关的内容。我试图在编辑中对此进行总结,请告诉我是否正确?我已经提供了所有必要的代码。您的代码只打印最后一个事件。@hpollock此答案中的代码不起作用?这太奇怪了…你能澄清你的解释吗?如果你使用list,或者python中调用的任何东西,每个事件都会完整地出现在列表中,就像刚刚从api中获取的一样,然后你可以为event in events做
之类的事,显示与每个事件相关的内容。我试图在编辑中总结一下,让我知道我是否做对了?我已经提供了所有必要的代码。您的代码只打印最后一个事件。@hpollock此答案中的代码不起作用?这很奇怪…如果代码是正确的,他们就不会在堆栈溢出上发布,不。。。?据我所知,您共享的代码并不能解决OP程序的主要问题。代码可以从指定的URL中正确提取事件。然而,由于“for循环”迭代所有事件,当它完成时,request2自然只包含来自上一个提取事件的数据。因此,有必要在从for循环中提取数据时对其进行处理(正如我的代码示例所示)。在测试之前,我不会发布代码。但是,由于“for循环”会迭代所有事件,当它完成时,request2自然只包含最后提取的事件的数据。是的,你在回答中没有提到,你实际上没有解释什么是错的。另外,如果OP现在尝试在循环外使用
request2
,就像他们在原始代码中所做的那样,问题完全相同。如果代码是正确的,他们就不会在堆栈溢出上过帐,不是吗。。。?据我所知,您共享的代码并不能解决OP程序的主要问题。代码可以从指定的URL中正确提取事件。然而,由于“for循环”迭代所有事件,当它完成时,request2自然只包含来自上一个提取事件的数据。因此,有必要在从for循环中提取数据时对其进行处理(正如我的代码示例所示)。在测试之前,我不会发布代码。但是,由于“for循环”会迭代所有事件,当它完成时,request2自然只包含最后提取的事件的数据。是的,你在回答中没有提到,你实际上没有解释什么是错的。另外,如果OP现在尝试在循环之外使用
request2
,就像他们在原始代码中所做的那样,那么问题是完全相同的。