python循环请求。get()只返回第一个循环

python循环请求。get()只返回第一个循环,python,python-3.x,loops,python-requests,Python,Python 3.x,Loops,Python Requests,试图从多个网页中刮取一个表并存储在列表中。列表将第一个网页的结果打印3次 import pandas as pd import requests from bs4 import BeautifulSoup dflist = [] for i in range(1,4): s = requests.Session() res = requests.get(r'http://www.ironman.com/triathlon/events/americas/ironman/worl

试图从多个网页中刮取一个表并存储在列表中。列表将第一个网页的结果打印3次

import pandas as pd
import requests
from bs4 import BeautifulSoup

dflist = []
for i in range(1,4):
    s = requests.Session()
    res = requests.get(r'http://www.ironman.com/triathlon/events/americas/ironman/world-championship/results.aspx?p=' + str(i) + 'race=worldchampionship&rd=20181013&agegroup=Pro&sex=M&y=2018&ps=20#axzz5VRWzxmt3')
    soup = BeautifulSoup(res.content,'lxml')
    table = soup.find_all('table')
    dfs = pd.read_html(str(table))
    dflist.append(dfs)
    s.close()

print(dflist)  

你在
'?p='+str(i)
之后漏掉了
&
,因此你的请求都将
p
设置为
${NUMBER}race=worldconsumportion
,ironman.com可能无法理解,只是忽略了这一点。在
'race=worldcountship'
开头插入
&

为了防止将来出现此类错误,您可以将URL的查询参数作为
dict
传递给
params
关键字参数,如下所示:

    params = {
        "p": i,
        "race": "worldchampionship",
        "rd": "20181013", 
        "agegroup": "Pro",
        "sex": "M",
        "y": "2018",
        "ps": "20",
    }

    res = requests.get(r'http://www.ironman.com/triathlon/events/americas/ironman/world-championship/results.aspx#axzz5VRWzxmt3', params=params)