我想从一个用javascript渲染的网站(https://nextgenftl.com/leagues/ftl-main-2022/game-weeks/week-30/players)中抓取数据。我想得到所有的球员,以及每个球员的徽章、价格和价格变化。如何在渲染后从网站中获取所有数据?
我试图在刮之前呈现整个页面(包括脚本)。
from requests_html import HTMLSession
from bs4 import BeautifulSoup
# Assign the URL,
# create the HTMLSession object,
# and run the "get" method to retrieve information from the URL
week = 30
url = f'https://nextgenftl.com/leagues/ftl-main-2022/game-weeks/week-{week}/players'
session = HTMLSession()
response = session.get(url)
# Check that the resolution code was 200
# (successfully retrieved info from URL)
res_code = response.status_code
print(res_code)
if res_code == 200:
response.html.render() # This is the critical line. This render method runs the script tags to turn them into HTML
# Get the page content
soup = BeautifulSoup(response.content, 'lxml')
print(soup.prettify())
else:
print("Could not reach web page!")
我不能使用BS4,因为页面源代码不包含正文(正文全部由javascript呈现)。另外,我已经通过网络选项卡查看了哪些API正在发布数据,但它不起作用。我也尝试了 selenium ,但我仍然不知道如何从网站上抓取数据。
1条答案
按热度按时间vfh0ocws1#
这里有一个方法可以用Selenium获得这些信息。它不是很快,但是它是可靠的,并且返回所有的播放器(725)。Selenium的设置是chromedriver/linux,你可以根据自己的设置来调整它,在定义驱动程序后,只需观察导入和代码。
这将在终端中显示 Dataframe /表,并将其保存为csv:
请参见https://www.selenium.dev/documentation/上的Selenium文档