python - 在抓取之前等待页面加载
问题描述
我试图浏览足球网站的多个页面。所有链接都在列表 teamLinks 中。其中一个链接的示例是:“ http://www.premierleague.com//clubs/1/Arsenal/squad?se=79 ”。我只是想知道是否可以让请求功能等到页面完全更新后再实现。如果您单击链接,它将最初显示 2018/2019 小队,然后刷新到我想要的 2017/2018 小队。
playerLink1 = []
playerLink2 = []
for i in range(len(teamLinks)):
# Request
squadPage = requests.get(teamlinks[i])
squadTree = html.fromstring(squadPage.content)
#Extract the player links.
playerLocation = squadTree.cssselect('.playerOverviewCard')
#For each player link within the team page.
for i in range(len(playerLocation)):
#Save the link, complete with domain.
playerLink1.append("http://www.premierleague.com/" +
playerLocation[i].attrib['href'] + '?se=79')
#For the second link, change the page from player overview to stats
playerLink2.append(playerLink1[i].replace("overview", "stats"))
解决方案
您尝试抓取的页面正在使用 Javascript 加载您想要的播放器列表。
选项 1:您可以使用这个名为requests-html 的新模块(我自己从未尝试过),它声称支持 Javascript。
选项 2:使用 Chrome 的 devtools,我可以找到页面发出的实际 XHR 请求以获取播放器列表。此代码可以使用 requests 模块获取您所需的输出。
import json
playerLink1 = []
playerLink2 = []
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.75 Safari/537.36',
'Origin': 'https://www.premierleague.com',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Referer': 'https://www.premierleague.com//clubs/1/Arsenal/squad?se=79'}
res = requests.get('https://footballapi.pulselive.com/football/teams/1/compseasons/79/staff?altIds=true&compCodeForActivePlayer=EN_PR', headers=headers)
player_data = json.loads(res.content.decode('utf-8'))
for player in player_data['players']:
href = 'https://www.premierleague.com/players/{}/{}/'.format(player['id'], player['name']['display'].replace(' ', '-'))
playerLink1.append("http://www.premierleague.com/" + href + "overview" + '?se=79')
playerLink2.append(href + "stats")
推荐阅读
- java - Hibernate flush() 影响事务
- python - 划分北美
- angular - 在 mat-select 中添加“删除”按钮
- r - 缺少 NHANES 库
- python - CPLEX:如何以一种确定的方式获得真实的运行时间?(Python)
- javascript - 使用 Map 进行渲染时,如何使用来自渲染数据对象外部的变量
- docker - 用另一层 node express 镜像扩展 prisma Docker 镜像
- python - 如何计算非线性模型的调整后 R2 分数
- apache-spark - 使用 pyspark 创建外部 Hive 表
- c++ - 不调用自定义分配器方法