gpt4 book ai didi

python - 返回网页内容之前等待

转载 作者:太空宇宙 更新时间:2023-11-03 13:56:25 24 4
gpt4 key购买 nike

我正在尝试抓取此网站:http://www.fivb.org/EN/BeachVolleyball/PlayersRanking_W.asp ,但此页面在页面加载后加载表的内容(可能通过 AJAX)。

我的尝试:

import requests
from bs4 import BeautifulSoup, Comment
uri = 'http://www.fivb.org/EN/BeachVolleyball/PlayersRanking_W.asp'

r = requests.get(uri)
soup = BeautifulSoup(r.content)
print(soup)

但是无论我做什么,带有 id='BTechPlayM' 的 div 仍然是空的。我试过:

  • 设置请求超时:requests.get(uri, timeout=10)
  • 传递 header
  • 使用 eventlet 设置延迟
  • 最近的事情是尝试使用 selenium-library,使用 PhantomJS ( installed from NPM ),但是这个兔子整体越来越深入。

有没有办法向 URI 发送请求,等待 X 秒,然后返回内容?

...或者要向 URI 发送请求,请继续检查 div 是否包含元素;并且无论什么时候都只返回内容?

最佳答案

简短回答:不。您不能使用请求来做到这一点。

但是,正如您所说,表数据是使用 JavaScript 动态生成的。数据取自this URL 。但是,响应不是 JSON 格式;这是 JavaScript。因此,从该数据中,您可以使用 RegEx 获取列表中可用的所需数据。

但是,RegEx 返回的数据是字符串格式,而不是实际的列表。您可以使用 ast.literal_eval() 将此字符串转换为列表。例如,数据如下所示:

'["1", "Humana-Paredes", "CAN", "4", "1,720", ""]'

完整代码:

import re
import requests
import ast

r = requests.get('http://www.fivb.org/Vis/Public/JS/Beach/TechPlayRank.aspx?Gender=1&id=BTechPlayW&Date=20180326')
data = re.findall(r'(\[[^[\]]*])', r.text)
for player in data:
details = ast.literal_eval(player)
print(details) # this var is a list (format shown below)

部分输出:

['1', 'Humana-Paredes', 'CAN', '4', '1,720', '']
['', 'Pavan', 'CAN', '4', '1,720', '']
['3', 'Talita', 'BRA', '4', '1,660', '']
['', 'Larissa', 'BRA', '4', '1,660', '']
['5', 'Hermannova', 'CZE', '4', '1,360', '']
['', 'Slukova', 'CZE', '4', '1,360', '']
['7', 'Laboureur', 'GER', '4', '1,340', '']
...

此列表的基本格式(详细信息)是:

[<Rank>, <Name>, <Country>, <Nb. part.>, <Points>, <Entry pts.>]

您可以根据需要使用这些数据。例如,使用 details[1] 将为您提供所有名称。

关于python - 返回网页内容之前等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572469/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com