python - python loop requests.get() 只返回第一个循环
问题描述
试图从多个网页中抓取一个表格并存储在一个列表中。该列表将第一个网页的结果打印 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)
解决方案
你遗漏了&
after '?p=' + str(i)
,所以你的请求都p
设置为${NUMBER}race=worldchampionship
,ironman.com 大概无法理解,只是忽略了。&
在开头插入 a 'race=worldchampionship'
。
为防止将来出现此类错误,您可以将 URL 的查询参数作为 adict
传递给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)
推荐阅读
- java - MySQL 语法错误 | 您的 SQL 语法有错误;
- javascript - 为什么 TypeScript 有时只能通过字符串索引对象
- prometheus - Prometheus 查询返回 Top 5 结果
- java - 我们如何使用 jpa 规范实现动态排序?
- php - Wordpress 函数 get_post_gallery() 不注册帖子的图库
- c++ - C++中的随机数生成
- java - java检测打开的ZipOutputStream或未关闭的inflater,曾经有开源类加载器util
- python - 了解递归三角数函数
- c# - 如何在 C# 中将数组的长度增加 1?
- modelica - 如何在使用 Open Modelica 编译器进行展平步骤后停止编译过程?