Python循环中requests.get请求不同链接却返回相同内容问题
循环请求不同链接却拿同一页面内容?问题出在这
问题根源
你代码里的filterURL是硬编码死的,里面的idExpansion=1178固定指向了某个扩展包。不管你拼接的expansion路径是什么,实际请求的都是这个固定id的页面,所以每次返回的内容都一样。
修复步骤
- 给每个扩展包映射对应的id:
先从目标网站的页面URL里,查清楚每个expansion对应的idExpansion值,用字典存储映射关系。 - 动态生成filterURL:
替换掉硬编码的idExpansion,用对应扩展包的id值。 - 可选:禁用请求缓存:
防止requests自动缓存响应,确保每次请求都是最新的。
修改后的代码示例
import requests from bs4 import BeautifulSoup import re import math import time # 把HEADERS提到外面,避免重复定义 HEADERS = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246' } # 扩展包名称对应id的映射(需要替换成你查到的实际id) EXPANSION_ID_MAP = { 'Stardust-Overdrive': '123', 'Power-of-the-Elements': '456', 'Darkwing-Blast': '789' } def getListCardFromExpansion(expansion): baseURL = 'https://www.cardmarket.com/it/YuGiOh/Products/Singles/' # 动态生成filterURL,替换idExpansion为对应的值 filterURL = f'?idCategory=5&idExpansion={EXPANSION_ID_MAP[expansion]}&idRarity=0&sortBy=collectorsnumber_asc&perSite=20' URL = baseURL + expansion + filterURL print("URL: " + URL) # 添加cache_control禁用缓存,确保每次请求都是新的 resp = requests.get(url=URL, headers=HEADERS, cache_control='no-cache') soup = BeautifulSoup(resp.content, 'html.parser') num_string = soup.find_all(text=re.compile('Risultati')) numOfCards = [score_string.split()[0] for score_string in num_string] numOfPage = math.ceil(int(numOfCards[0])/20) print(numOfCards) print(numOfPage) if __name__ == '__main__': listNewExp = ['Stardust-Overdrive', 'Power-of-the-Elements', 'Darkwing-Blast'] for exp in listNewExp: print("Inizio giro per espansione: " + exp) getListCardFromExpansion(exp) print("Fine giro per espansione: " + exp)
补充说明
- 你需要自己替换
EXPANSION_ID_MAP里的id值:打开对应扩展包的页面,从URL中提取idExpansion参数的数值即可。 - 如果还是存在缓存问题,可以在请求URL末尾追加随机参数,比如
URL += f'&t={int(time.time())}',强制触发新请求。
内容的提问来源于stack exchange,提问作者Near93
相关产品推荐
相关产品推荐

