这看起来类似于我之前的帖子(我将在底部链接),但这是一个不同的网址,它使用表格。当我运行以下代码时,我可以获取所提取的所有数据:
import requests
from bs4 import BeautifulSoup
url = "https://www.nascar.com/wp-content/plugins/raw-feed/raw-feed.php"
r = requests.get(url)
soup = BeautifulSoup(r.text, "lxml")
try:
data = soup.find('div', class_='div-col1')
print(data)
except:
print("You Get Nothing!")
然后我将尝试更改为
try:
data = soup.find_all('td', class_='car')
print(data)
except:
print("You Get Nothing!")
我只是从thead
而不是tbody
我有什么遗失或做错了吗?我试图进一步确定,我要么出错,要么只返回空[]
此外,这个网页是动态的,我尝试了我之前的帖子Old Post给了我的东西,我理解两页之间的布局和编码是不同的,但我对此的关注是加载Chrome每次运行脚本都会很多,因为它可能需要每30秒-1分钟刷新300-400次。
答案 0 :(得分:0)
为什么不直接使用源代码,如果您看到链接的页面源代码从https://www.nascar.com/live/feeds/live-feed.json获取数据,那么您可以轻松地获取json格式的数据并将其解析为你喜欢。
import requests
import json
url = "https://www.nascar.com/live/feeds/live-feed.json"
res = requests.get(url)
print(r.json())
答案 1 :(得分:0)
您希望从该页面获取的数据是动态生成的,因此当您使用requests
库发出http请求时,它无法处理。但是,您可以尝试使用同一作者requests-html中的新库。它能够处理动态生成的内容。这就是你如何使用这个新库:
import requests_html
URL = "https://www.nascar.com/wp-content/plugins/raw-feed/raw-feed.php"
with requests_html.HTMLSession() as session:
r = session.get(URL)
r.html.render(sleep=5)
for items in r.html.find('#pqrStatistic tr'):
data = [item.text for item in items.find("th,td")]
print(data)
部分结果:
['pos', 'car', 'driver', 'manuf', 'delta', 'laps', 'last lap', 'best time', 'best speed', 'best lap']
['1', '54', 'Kyle Benjamin(i)', '', '--', '161', '36.474', '20.198', '93.752', '8']
['2', '98', 'Grant Enfinger', '', '0.761', '161', '36.402', '20.144', '94.003', '157']
['3', '4', 'Todd Gilliland #', '', '1.407', '161', '36.359', '20.142', '94.013', '158']
['4', '8', 'John H. Nemechek(i)', '', '2.177', '161', '36.304', '20.234', '93.585', '31']
['5', '16', 'Brett Moffitt', '', '3.268', '161', '36.145', '20.359', '93.010', '8']