Python中的请求和美化组未提取html中的所有元素

Python中的请求和美化组未提取html中的所有元素,python,web-scraping,beautifulsoup,html-parsing,Python,Web Scraping,Beautifulsoup,Html Parsing,我正试图从一个网站上获取赔率,该网站显示了来自不同机构的关于市场竞争影响的任务的当前赔率。我正在使用Requests和BeautifulSoup提取相关数据。但使用后: import requests from bs4 import BeautifulSoup url = "https://www.bestodds.com.au/odds/cricket/ICC-World-Twenty20/Sri-Lanka-v-Afghanistan_71992/" r=requests.get(url

我正试图从一个网站上获取赔率,该网站显示了来自不同机构的关于市场竞争影响的任务的当前赔率。我正在使用Requests和BeautifulSoup提取相关数据。但使用后:

import requests
from bs4 import BeautifulSoup

url = "https://www.bestodds.com.au/odds/cricket/ICC-World-Twenty20/Sri-Lanka-v-Afghanistan_71992/"

r=requests.get(url)
Print(r.text)

它不会打印任何可能性,但是如果我检查页面上的元素,我可以在html中看到它们。如何获取将它们导入Python以提取的请求?

请求在这种情况下不太适合使用-该站点非常动态,使用多个XHR请求和javascript来形成页面。获取所需信息的一种更快、更省力的方法是使用真正的浏览器

下面是一个示例代码,可以帮助您入门-使用无头浏览器:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.PhantomJS()
driver.get("https://www.bestodds.com.au/odds/cricket/ICC-World-Twenty20/Sri-Lanka-v-Afghanistan_71992/")

# waiting for the page to load
wait = WebDriverWait(driver, 10)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, ".odds-comparison")))

for comparison in driver.find_elements_by_css_selector(".odds-comparison"):
    description = comparison.find_element_by_css_selector(".description").text
    print(description)

driver.close()
它将打印页面上的所有赔率表描述:

MATCH ODDS
MOST SIXES
TOP SRI LANKA BATSMAN
TOP AFGHANISTAN BATSMAN

最好使用urlopen:

   import urllib
   from bs4 import BeautifulSoup
   from urllib.request import urlopen

   url = "https://www.bestodds.com.au/odds/cricket/ICC-World-Twenty20/Sri-Lanka-v-Afghanistan_71992/"

   response = urlopen(url)
   htmltext = BeautifulSoup(response)
   print (htmltext)
之后,您可以找到您想要的:

   Liste_page =htmltext.find('div',{"id":"pager"}).text
   Tr=htmltext.find('table',{"class":"additional_data"}).findNext('tbody').text

数据很可能是动态加载的

它不在HTML中

您可以尝试了解哪些请求用于检索真实数据,或者尝试使用selenium webdriver等来模拟真实浏览器(第二个选项的速度要慢得多)


请注意,您极有可能违反该网站的使用条款。这很容易让你陷入麻烦。他们还可能故意向您提供不良数据。

谢谢您的回答。但是,当我“打印(说明)”时,输出为空。在我按下回车键后,下一行显示为“…”。它是将表输出到另一个文件中还是显示在终端中?@David it对我有用-在终端上显示描述。您是否更改了此代码中的任何内容,或者是否按原样执行了此代码?抱歉,此代码确实有效,并且已能够从.赔率比较表中打印多个元素,例如“.oc link--sportbet.pplobbs.quickbet popover”或“.competitor info”但是它只打印每个表中的第一行?@David我刚刚解释了这个问题,并提供了一个数据提取代码示例。据我所见,我已经回答了你最初提出的问题。如果你遇到后续困难,考虑在这里创建一个单独的问题。确保提供所有必要的细节。谢谢你的理解。嗨,谢谢你的回答。我遇到了与执行alecxe建议的代码时相同的问题。当我“print(htmltext)”甚至“print(htmltext.text)”时,它不会显示任何内容。我只是跳过一行,然后显示通常的“>>>”。有什么想法吗?