无法在python中刮<ui-tags>。不确定为什么吗?

时间:2019-04-21 11:53:03

标签: python html selenium web-scraping

我正试图从betfair(https://www.betfair.com.au/exchange/plus/australian-rules)刮起AFL赔率。 我对网络爬虫还很陌生,但是已经设法摆脱了其他博彩公司的麻烦,但是我在必发方面遇到了麻烦。我需要的数据在“ ui-view”标签内,当我使用Beautiful soup获取HTML时,该标签似乎没有打开。

我在加载页面以获取赔率时尝试使用硒未成功。

from selenium import webdriver
from bs4 import BeautifulSoup
import pprint as pp

BETFAIR_URL = "https://www.betfair.com.au/exchange/plus/australian-rules"

#functions
def parse(url):
    # open url

    driver = webdriver.Chrome(
        'C:/Users/Maroz/Downloads/chromedriver_win32 (1)/chromedriver.exe')
    # opens page
    driver.get(url)

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

    # closes same
    driver.quit()


    return soup

betfair_soup = parse(BETFAIR_URL)

pp.pprint(betfair_soup)

#edit to show that it finds nothing in the span i need which is within the ui-#tags
price = betfair_soup.find_all("span", {"class": "bet-button-price"})
pp.pprint(price)
#output is []


我希望betfair_soup在此标签ui-view中包含信息 但是,当打印到终端时,它保持关闭状态。 不允许我发布图片,因为这是我的第一篇文章,但是您可能可以在这里看到我尝试访问的标签的屏幕截图。 https://imgur.com/gallery/jI3MQYY

根据要求,这里是进入终端的html:

<!--[if IE]>
        <script type="text/javascript">window['isIE'] = true;</script>
        <![endif]-->
<!-- Set ie10 class: http://www.impressivewebs.com/ie10-css-hacks/ -->
<!--[if !IE]><!-->
<script>
        (function () {
            var isIE10 = Function('/*@cc_on return document.documentMode===10@*/')();

            if (isIE10) {
                document.documentElement.className += ' ie10';
            }
        })();

    </script>
<!--<![endif]-->
<bf-meta-tags></bf-meta-tags>
<bf-tooltip-guide><div class="tooltip-guide-container" ng-controller="TooltipGuideController as controller"><!-- --></div></bf-tooltip-guide>
<!-- --><ui-view></ui-view> #INFO IS IN HERE
<script src="//ie2eds.cdnppb.net/resources/eds/bundle/vendor-assets-min_4146.js"></script>
<script src="//ie2eds.cdnppb.net/resources/eds/bundle/bf-eds-static-client.min_4146_.js"></script>
<script type="text/javascript">

我在赔率所在的位置添加了一条注释,当我查看页面源代码时,标签也已关闭,因此,除了检查赔率框上的元素之外,没有其他方法可以向我展示我看到的内容我在上面发布的照片​​链接^

edit:在尝试建议等待ui-view加载后,这是整个响应,但是我仍然无法访问span标记中的信息。 https://pastebin.com/v6JzYa6V

最终编辑:问题已解决!谢谢大家的建议,特别感谢S Ahmed为我解决问题的坚持!

1 个答案:

答案 0 :(得分:0)

看起来加载<ui-view>标记的内容需要花费时间,并且它是由javascript加载的。在获取页面源之前,尝试等待内部元素出现。

尝试一下:

def parse(url):
    driver.get(url)
    try:
        WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.ID,"main-wrapper")))

    except:
        pp.pprint("Exception")

    finally:
        soup = BeautifulSoup(driver.page_source, 'html.parser')
        return soup
        driver.quit()

您必须导入以下库

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

编辑: 尝试等待span.bet-button-price代替#main-wrap出现

WebDriverWait(driver, 30).until(EC.presence_of_element_located((By.CSS_SELECTOR,"span.bet-button-price")))