Beautiful Soup, очищающий аукционный сайт, который очищает проданный товар после завершения аукциона - PullRequest
0 голосов
/ 19 февраля 2020

столкнулся с проблемой со скребком, который я строю. Я хотел собрать информацию с сайта аукциона. Проблема заключается в том, что когда я запрашиваю html мне нужно обновить sh страницу, когда вы обновляете sh страницу этого аукциона, все элементы аукциона, которые закончились, удаляются, поэтому я теряю данные, которые я искал для получения.

def soldDetection(soup):
    #Select the timer and check if it == "Lot Closed" once lot is closed send the entire container information to getData() to extract price and details
    while True:
        getPage(url)
        container = soup.find_all('li', class_='current-price')
        #print(container)
        for child in container:
            label = child.span.contents[0]
            #print (label)
            if label == 'Closing bid':
                # grab entire div for the card with data for the getData()
                print('Found')
                parentDiv = label.find_parent('div', class_='lot-single')
                getData(parentDiv)
                return parentDiv
            else:
                continue
        time.sleep(1)
        print('Nothing Sold')
        continue

В моем браузере, если я не перефразирую sh, содержимое диапазона «текущая цена» изменится с «Текущей ставки» на «Закрывающую ставку», но если я перефразирую sh, то этот элемент очищено от html. Есть ли способ получить красивый суп, чтобы посмотреть это без освежения и очистки? Я обеспокоен тем, что bs4 может не подойти для этой работы, если да, то какой инструмент мне следует использовать?

Спасибо,

1 Ответ

0 голосов
/ 20 февраля 2020

Ну, я нашел решение, я использовал селен, чтобы открыть браузер и наблюдать за изменениями, которые javascript отправлял на страницу. Затем собрал все html и отправил его в мою прекрасную функцию супа для навигации по дереву.

from selenium import webdriver
browser = webdriver.Firefox()
browser.get(websiteAddress)
...
      elems = browser.find_elements_by_xpath("//*[contains(text(),'Closing bid')]")
        if not elems:
            print('Not Found')
            continue
        label = elems[0].text
        if label == 'Closing bid':
            # grab entire div for the card with data for the getData()
            soup = bs4.BeautifulSoup(browser.page_source,'html.parser')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...