Не могу соскрестив питоне.Не знаете почему? - PullRequest
0 голосов
/ 21 апреля 2019

Я пытаюсь очистить шансы AFL от Betfair (https://www.betfair.com.au/exchange/plus/australian-rules). Я довольно новичок в веб-скрапинге, однако мне удалось очистить шансы от других букмекеров, но у меня возникли проблемы с Betfair. Необходимые мне данные находятся в пределах "тег 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">

Я помещаю комментарий, где расположены коэффициенты,когда я просматриваю исходный код страницы, теги также закрываются, поэтому я не могу показать вам, что я вижу, когда проверяю элемент в поле шансов, кроме ссылки на фотографию, которую я разместил above ^

edit: после попытки предложить подождать пока пользовательский интерфейс загрузит весь ответ, я все же не смог получить доступ к информации в тегах span.https://pastebin.com/v6JzYa6V

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ : проблема решена!Спасибо всем за ваши предложения и особую благодарность С. Ахмеду за его настойчивость в решении этой проблемы для меня!

1 Ответ

0 голосов
/ 21 апреля 2019

Похоже, что для загрузки содержимого тега <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")))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...