BeautifulSoup找不到网页上存在的课程?

时间:2018-09-19 14:52:26

标签: python beautifulsoup

因此,我正在尝试抓取以下网页 https://www.scoreboard.com/uk/football/england/premier-league/

特别是计划的和完成的结果。因此,我尝试使用class = "stage-finished" or "stage-scheduled"查找元素。但是,当我抓取网页并打印出 page_soup 所包含的内容时,它不包含这些元素。

我发现了另一个SO问题,回答是这是因为它是通过AJAX加载的,因此我需要查看chrome dev工具上“网络”标签下的XHR,以查找正在加载必要数据的文件。似乎不在那儿?

import bs4
import requests
from bs4 import BeautifulSoup as soup
import csv
import datetime

myurl = "https://www.scoreboard.com/uk/football/england/premier-league/"
headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36'}
page = requests.get(myurl, headers=headers)

page_soup = soup(page.content, "html.parser")

scheduled = page_soup.select(".stage-scheduled")
finished = page_soup.select(".stage-finished")
live = page_soup.select(".stage-live")
print(page_soup)
print(scheduled[0])

上面的代码当然会引发错误,因为计划的数组中没有内容。

我的问题是,我该如何获取所需的数据?

我将XHR文件的内容复制到了记事本中,并搜索了阶段完成的标签和其他标签,但没有发现任何问题。我在这里想念一些容易的事吗?

1 个答案:

答案 0 :(得分:3)

页面是JavaScript呈现的。您需要硒。这是一些开始的代码:

from selenium import webdriver

url = 'https://www.scoreboard.com/uk/football/england/premier-league/'

driver = webdriver.Chrome()
driver.get(url)
stages = driver.find_elements_by_class_name('stage-scheduled')
driver.close()

或者您可以将driver.content传递给BeautifulSoup方法。像这样:

soup = BeautifulSoup(driver.page_source, 'html.parser')

注意: 您需要先安装网络驱动程序。我安装了chromedriver。

祝你好运!

相关问题