首页 > 解决方案 > 即使屏幕刮板的路径正确,列表也会返回空

问题描述

所以我试图从 Ubisoft 网站上的免费游戏网站获取所有 url,但它总是返回空。我不知道我在这里做错了什么,下图显示了路径

headers = {
    "User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0",
}

result = requests.get("https://free.ubisoft.com/", headers=headers)
soup = BeautifulSoup(result.content, 'lxml')
print(result.content)
urls = []
urls = soup.find('div', {'class': 'free-events'}).find_all("a")
for url in urls:

    link = url.attrs['data-url']
    if "https" in link:
        links.append(link)

return links

在此处输入图像描述

标签: pythonscreen-scraping

解决方案


数据是动态加载的,因此如果您打印,result.content您会看到只有一些简单的 HTML 和 Javascript。

使用 Selenium,您可以加载页面并检索链接,如下所示:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
browser = webdriver.Chrome(chrome_options=options)
browser.get("https://free.ubisoft.com/")
for link in browser.find_elements_by_css_selector("div.free-event-button a[data-type='freegame']"):
    print(link.get_attribute("data-url"))

# https://register.ubisoft.com/aco-discovery-tour
# https://register.ubisoft.com/acod-discovery-tour
# https://register.ubisoft.com/might_and_magic_chess_royale
# https://register.ubisoft.com/rabbids-coding

推荐阅读