【问题标题】:Not getting all the information when scraping bet365.com抓取 bet365.com 时未获取所有信息
【发布时间】:2021-05-11 04:31:10
【问题描述】:

我在尝试使用 urllib.requestBeautifulSoup 抓取 https://www.bet365.com/ 时遇到问题。 问题是,下面的代码没有得到页面上的所有信息,例如没有出现玩家的名字。也许是另一个框架或配置来提取信息?

我的代码是:

from bs4 import BeautifulSoup
import urllib.request
url = "https://www.bet365.com/"
try:
    page = urllib.request.urlopen(url)
except:
    print("An error occured.")

soup = BeautifulSoup(page, 'html.parser')
soup = str(soup) 

【问题讨论】:

  • 信息并不总是包含在初始 HTML 响应中。在浏览器上加载页面时,在初始加载后是否还有其他请求包含您需要的信息? (使用chrome之类的浏览器和开发者工具进行分析)
  • 加载@FraggaMuffin 后没有其他请求,即使我在 Chrome 中使用元素检查器,我也可以找到我想要的所有信息。你知道任何可以利用这一点的工具吗?

标签: python web-scraping beautifulsoup scrapy screen-scraping


【解决方案1】:

查看相关页面的源代码,看起来基本上所有数据都是由 Javascript 填充的。 BeautifulSoup 不是一个无头客户端,它只是下载和解析 HTML 的东西,所以任何填充了 Javascript 的东西它都看不到。你需要一个像 selenium 这样的无头浏览器来抓取这样的东西。

【讨论】:

  • 我知道了,但我从来没有让 selenium 在这个网站上工作,我不知道是否对 selenium 无知。您能否附上一些简短的代码,说明您将如何使用 selenium 或其他工具来解决它?
  • 也许他们不希望它被刮掉。制作任何现成工具都无法抓取的网站相当容易。
  • 所以,虽然我可以手动获取 chrome 中使用元素检查器的信息,但这并不意味着任何可用的工具都可以自动获取此信息,不是吗?
  • 这已经从原始问题中删除了。您为什么不在示例 selenium 实现中发布一个新问题,突出显示它失败的地方?
  • 我会这样做,但我的实现看起来像 Khaled Koubaa 所附的。
【解决方案2】:

您需要使用 selenium 而不是请求,以及 Beautifulsoup。

from selenium import webdriver

url = "https://www.bet365.com"
driver = webdriver.Chrome(executable_path=r"the_path_of_driver")

driver.get(url)

driver.maximize_window() #optional, if you want to maximize the browser
driver.implicitly_wait(60) ##Optional, Wait the loading if error

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

【讨论】:

  • 它对你有用吗?你测试过吗?因为我一直在尝试测试它,但它没有完成页面加载,它卡住了。我正在使用 Firefox 网络驱动程序,但我认为这不是问题。
  • 你需要精确刮什么?赔率运动?只是事件名称?
  • 赛事名称和自己的赔率
  • 我认为 bet365 阻止在 webdrivers 上加载网站,您可以从oddsportal 中抓取您需要(以及更多)的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多