【问题标题】:BeautifulSoup can't find class that exists on webpage?BeautifulSoup 找不到网页上存在的类?
【发布时间】:2019-02-23 19:06:23
【问题描述】:

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

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

我发现另一个 SO 问题的答案说这是因为它是通过 AJAX 加载的,我需要查看 chrome 开发工具的网络选项卡下的 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 文件的内容复制到记事本并搜索 stage-finished 和其他标签,但一无所获。我在这里遗漏了一些简单的东西吗?

【问题讨论】:

  • 如果确实像您怀疑的那样是加载了 javascript 的页面,那么您可能想尝试使用可以处理此问题的 selenium
  • @MattCremeens 欣赏共鸣,这是唯一的方法吗?我问,因为我对 python 和 webscraping 真的很陌生,所以这对我来说似乎很吓人如何使用
  • 这是我找到的唯一方法,但我想你会发现它很容易使用。编码变化很小。从pip install selenium 开始,看看这里:automatetheboringstuff.com/chapter11 并向下滚动到 selenium 部分。
  • 如果您要查找的内容是由客户端 javascript 动态生成的 - 就像这里的情况一样 - 那么除了使用无头浏览器(selenium 或否则)确实。请注意,这与 Python 本身无关,无论使用哪种语言,您都会遇到同样的问题。
  • 出于好奇,如果你先page_soup.select('.stage-scheduled > td:nth-of-type(2)') 然后print(scheduled[0].getText()) 会发生什么?

标签: python beautifulsoup


【解决方案1】:

页面是 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。

祝你好运!

【讨论】:

    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2020-02-24
    • 2016-09-07
    • 2019-08-06
    相关资源
    最近更新 更多